Added a checker for PEP 8 compliance.

Sun, 09 Jan 2011 18:16:46 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 09 Jan 2011 18:16:46 +0100
changeset 832
eb5ff61f927b
parent 831
f046b97785db
child 835
496031873fe8

Added a checker for PEP 8 compliance.

APIs/Python3/eric5.api 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.Pep8.Pep8Checker.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.CheckerPlugins.Pep8.pep8.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.PluginPep8Checker.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.PluginSyntaxChecker.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.QScintilla.Editor.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.ViewManager.ViewManager.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric5.Plugins.CheckerPlugins.Pep8.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric5.Plugins.CheckerPlugins.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric5.Plugins.html file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/Pep8Checker.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/Pep8Dialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/__init__.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/pep8.py file | annotate | diff | comparison | revisions
Plugins/PluginPep8Checker.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
Utilities/__init__.py file | annotate | diff | comparison | revisions
ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
changelog 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
--- a/APIs/Python3/eric5.api	Sun Jan 09 14:25:16 2011 +0100
+++ b/APIs/Python3/eric5.api	Sun Jan 09 18:16:46 2011 +0100
@@ -2621,6 +2621,101 @@
 eric5.Plugins.AboutPlugin.AboutDialog.licenseText?7
 eric5.Plugins.AboutPlugin.AboutDialog.thanksText?7
 eric5.Plugins.AboutPlugin.AboutDialog.titleText?7
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.Pep8Checker.report_error_args?4(line_number, offset, code, check, *args)
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.Pep8Checker?1(filename, lines, repeat=False, select="", ignore="")
+eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.Pep8CodeSelectionDialog.getSelectedCodes?4()
+eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.Pep8CodeSelectionDialog?1(codes, parent = None)
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.filenameRole?7
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.lineRole?7
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.messageRole?7
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_buttonBox_clicked?4(button)
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_excludeMessagesSelectButton_clicked?4()
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_includeMessagesSelectButton_clicked?4()
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_loadDefaultButton_clicked?4()
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_resultList_itemActivated?4(item, column)
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_showButton_clicked?4()
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_startButton_clicked?4()
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.on_storeDefaultButton_clicked?4()
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.positionRole?7
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.prepare?4(fileList, project)
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.settingsKey?7
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog.start?4(fn, codestring = "", save = False, repeat = None)
+eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.Pep8Dialog?1(parent = None)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.BENCHMARK_KEYS?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.BINARY_OPERATORS?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.build_tokens_line?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.check_all?4(expected=None, line_offset=0)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.check_logical?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.check_physical?4(line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.readline?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.readline_check_physical?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.report_error?4(line_number, offset, text, check)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker.run_check?4(check, argument_names)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.Checker?1(filename, lines=None)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.DEFAULT_EXCLUDE?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.DEFAULT_IGNORE?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.DOCSTRING_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.E225NOT_KEYWORDS?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.ERRORCODE_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.EXTRANEOUS_WHITESPACE_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.INDENT_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.MAX_LINE_LENGTH?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.OPERATORS?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.RAISE_COMMA_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.SELFTEST_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.SKIP_TOKENS?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.UNARY_OPERATORS?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.WHITESPACE?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.WHITESPACE_AROUND_NAMED_PARAMETER_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.WHITESPACE_AROUND_OPERATOR_REGEX?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8._main?5()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.args?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.blank_lines?4(logical_line, blank_lines, indent_level, line_number, previous_logical, previous_indent_level, blank_lines_before_comment)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.compound_statements?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.excluded?4(filename)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.expand_indent?4(line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.extraneous_whitespace?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.filename_match?4(filename)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.find_checks?4(argument_name)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.getMessage?4(code, *args)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.get_count?4(prefix='')
+eric5.Plugins.CheckerPlugins.Pep8.pep8.get_error_statistics?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.get_statistics?4(prefix='')
+eric5.Plugins.CheckerPlugins.Pep8.pep8.get_warning_statistics?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.ignore_code?4(code)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.imports_on_separate_lines?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.indentation?4(logical_line, previous_logical, indent_char, indent_level, previous_indent_level)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.input_dir?4(dirname, runner=None)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.input_file?4(filename)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.maximum_line_length?4(physical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.message?4(text)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.missing_newline?4(physical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.missing_whitespace?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.missing_whitespace_around_operator?4(logical_line, tokens)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.mute_string?4(text)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.options?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.pep8_messages?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.pep8_messages_sample_args?7
+eric5.Plugins.CheckerPlugins.Pep8.pep8.print_benchmark?4(elapsed)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.print_statistics?4(prefix='')
+eric5.Plugins.CheckerPlugins.Pep8.pep8.process_options?4(arglist=None)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.python_3000_backticks?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.python_3000_has_key?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.python_3000_not_equal?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.python_3000_raise_comma?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.readlines?4(filename)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.reset_counters?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.run_tests?4(filename)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.selftest?4()
+eric5.Plugins.CheckerPlugins.Pep8.pep8.tabs_obsolete?4(physical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.tabs_or_spaces?4(physical_line, indent_char)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.trailing_blank_lines?4(physical_line, lines, line_number)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.trailing_whitespace?4(physical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.whitespace_around_comma?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.whitespace_around_named_parameter_equals?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.whitespace_around_operator?4(logical_line)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.whitespace_before_inline_comment?4(logical_line, tokens)
+eric5.Plugins.CheckerPlugins.Pep8.pep8.whitespace_before_parameters?4(logical_line, tokens)
 eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.SyntaxCheckerDialog.errorRole?7
 eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.SyntaxCheckerDialog.filenameRole?7
 eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.SyntaxCheckerDialog.lineRole?7
@@ -2732,6 +2827,20 @@
 eric5.Plugins.PluginEricdoc.pyqtApi?7
 eric5.Plugins.PluginEricdoc.shortDescription?7
 eric5.Plugins.PluginEricdoc.version?7
+eric5.Plugins.PluginPep8Checker.Pep8CheckerPlugin.activate?4()
+eric5.Plugins.PluginPep8Checker.Pep8CheckerPlugin.deactivate?4()
+eric5.Plugins.PluginPep8Checker.Pep8CheckerPlugin?1(ui)
+eric5.Plugins.PluginPep8Checker.author?7
+eric5.Plugins.PluginPep8Checker.autoactivate?7
+eric5.Plugins.PluginPep8Checker.className?7
+eric5.Plugins.PluginPep8Checker.deactivateable?7
+eric5.Plugins.PluginPep8Checker.error?7
+eric5.Plugins.PluginPep8Checker.longDescription?7
+eric5.Plugins.PluginPep8Checker.name?7
+eric5.Plugins.PluginPep8Checker.packageName?7
+eric5.Plugins.PluginPep8Checker.pyqtApi?7
+eric5.Plugins.PluginPep8Checker.shortDescription?7
+eric5.Plugins.PluginPep8Checker.version?7
 eric5.Plugins.PluginSyntaxChecker.SyntaxCheckerPlugin.activate?4()
 eric5.Plugins.PluginSyntaxChecker.SyntaxCheckerPlugin.deactivate?4()
 eric5.Plugins.PluginSyntaxChecker.SyntaxCheckerPlugin?1(ui)
@@ -4908,7 +5017,7 @@
 eric5.QScintilla.Editor.Editor.getWordBoundaries?4(line, index, useWordChars = True)
 eric5.QScintilla.Editor.Editor.getWordLeft?4(line, index)
 eric5.QScintilla.Editor.Editor.getWordRight?4(line, index)
-eric5.QScintilla.Editor.Editor.gotoLine?4(line)
+eric5.QScintilla.Editor.Editor.gotoLine?4(line, pos = 1)
 eric5.QScintilla.Editor.Editor.gotoSyntaxError?4()
 eric5.QScintilla.Editor.Editor.handleMonospacedEnable?4()
 eric5.QScintilla.Editor.Editor.handleRenamed?4(fn)
@@ -6554,7 +6663,7 @@
 eric5.ViewManager.ViewManager.ViewManager.newEditorView?4(fn, caller, filetype = "")
 eric5.ViewManager.ViewManager.ViewManager.nextSplit?4()
 eric5.ViewManager.ViewManager.ViewManager.openFiles?4(prog = None)
-eric5.ViewManager.ViewManager.ViewManager.openSourceFile?4(fn, lineno = None, filetype = "", selStart = 0, selEnd = 0)
+eric5.ViewManager.ViewManager.ViewManager.openSourceFile?4(fn, lineno = None, filetype = "", selStart = 0, selEnd = 0, pos = 0)
 eric5.ViewManager.ViewManager.ViewManager.preferencesChanged?4()
 eric5.ViewManager.ViewManager.ViewManager.prevSplit?4()
 eric5.ViewManager.ViewManager.ViewManager.printCurrentEditor?4()
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sun Jan 09 14:25:16 2011 +0100
+++ b/Documentation/Help/source.qhp	Sun Jan 09 18:16:46 2011 +0100
@@ -330,6 +330,12 @@
               <section title="eric5.Plugins.AboutPlugin.AboutDialog" ref="eric5.Plugins.AboutPlugin.AboutDialog.html" />
             </section>
             <section title="eric5.Plugins.CheckerPlugins" ref="index-eric5.Plugins.CheckerPlugins.html">
+              <section title="eric5.Plugins.CheckerPlugins.Pep8" ref="index-eric5.Plugins.CheckerPlugins.Pep8.html">
+                <section title="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html" />
+                <section title="eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html" />
+                <section title="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html" />
+                <section title="eric5.Plugins.CheckerPlugins.Pep8.pep8" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html" />
+              </section>
               <section title="eric5.Plugins.CheckerPlugins.SyntaxChecker" ref="index-eric5.Plugins.CheckerPlugins.SyntaxChecker.html">
                 <section title="eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog" ref="eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html" />
               </section>
@@ -493,6 +499,7 @@
             <section title="eric5.Plugins.PluginAbout" ref="eric5.Plugins.PluginAbout.html" />
             <section title="eric5.Plugins.PluginEricapi" ref="eric5.Plugins.PluginEricapi.html" />
             <section title="eric5.Plugins.PluginEricdoc" ref="eric5.Plugins.PluginEricdoc.html" />
+            <section title="eric5.Plugins.PluginPep8Checker" ref="eric5.Plugins.PluginPep8Checker.html" />
             <section title="eric5.Plugins.PluginSyntaxChecker" ref="eric5.Plugins.PluginSyntaxChecker.html" />
             <section title="eric5.Plugins.PluginTabnanny" ref="eric5.Plugins.PluginTabnanny.html" />
             <section title="eric5.Plugins.PluginVcsMercurial" ref="eric5.Plugins.PluginVcsMercurial.html" />
@@ -5096,6 +5103,20 @@
       <keyword name="ColorDialogWizard.__initMenu" id="ColorDialogWizard.__initMenu" ref="eric5.Plugins.PluginWizardQColorDialog.html#ColorDialogWizard.__initMenu" />
       <keyword name="ColorDialogWizard.activate" id="ColorDialogWizard.activate" ref="eric5.Plugins.PluginWizardQColorDialog.html#ColorDialogWizard.activate" />
       <keyword name="ColorDialogWizard.deactivate" id="ColorDialogWizard.deactivate" ref="eric5.Plugins.PluginWizardQColorDialog.html#ColorDialogWizard.deactivate" />
+      <keyword name="PluginPep8Checker (Module)" id="PluginPep8Checker (Module)" ref="eric5.Plugins.PluginPep8Checker.html" />
+      <keyword name="Pep8CheckerPlugin" id="Pep8CheckerPlugin" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin" />
+      <keyword name="Pep8CheckerPlugin (Constructor)" id="Pep8CheckerPlugin (Constructor)" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__init__" />
+      <keyword name="Pep8CheckerPlugin.__editorClosed" id="Pep8CheckerPlugin.__editorClosed" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__editorClosed" />
+      <keyword name="Pep8CheckerPlugin.__editorOpened" id="Pep8CheckerPlugin.__editorOpened" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__editorOpened" />
+      <keyword name="Pep8CheckerPlugin.__editorPep8Check" id="Pep8CheckerPlugin.__editorPep8Check" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__editorPep8Check" />
+      <keyword name="Pep8CheckerPlugin.__editorShowMenu" id="Pep8CheckerPlugin.__editorShowMenu" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__editorShowMenu" />
+      <keyword name="Pep8CheckerPlugin.__initialize" id="Pep8CheckerPlugin.__initialize" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__initialize" />
+      <keyword name="Pep8CheckerPlugin.__projectBrowserPep8Check" id="Pep8CheckerPlugin.__projectBrowserPep8Check" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__projectBrowserPep8Check" />
+      <keyword name="Pep8CheckerPlugin.__projectBrowserShowMenu" id="Pep8CheckerPlugin.__projectBrowserShowMenu" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__projectBrowserShowMenu" />
+      <keyword name="Pep8CheckerPlugin.__projectPep8Check" id="Pep8CheckerPlugin.__projectPep8Check" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__projectPep8Check" />
+      <keyword name="Pep8CheckerPlugin.__projectShowMenu" id="Pep8CheckerPlugin.__projectShowMenu" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.__projectShowMenu" />
+      <keyword name="Pep8CheckerPlugin.activate" id="Pep8CheckerPlugin.activate" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.activate" />
+      <keyword name="Pep8CheckerPlugin.deactivate" id="Pep8CheckerPlugin.deactivate" ref="eric5.Plugins.PluginPep8Checker.html#Pep8CheckerPlugin.deactivate" />
       <keyword name="PluginWizardQFontDialog (Module)" id="PluginWizardQFontDialog (Module)" ref="eric5.Plugins.PluginWizardQFontDialog.html" />
       <keyword name="FontDialogWizard" id="FontDialogWizard" ref="eric5.Plugins.PluginWizardQFontDialog.html#FontDialogWizard" />
       <keyword name="FontDialogWizard (Constructor)" id="FontDialogWizard (Constructor)" ref="eric5.Plugins.PluginWizardQFontDialog.html#FontDialogWizard.__init__" />
@@ -9238,6 +9259,89 @@
       <keyword name="SyntaxCheckerDialog.on_startButton_clicked" id="SyntaxCheckerDialog.on_startButton_clicked" ref="eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html#SyntaxCheckerDialog.on_startButton_clicked" />
       <keyword name="SyntaxCheckerDialog.prepare" id="SyntaxCheckerDialog.prepare" ref="eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html#SyntaxCheckerDialog.prepare" />
       <keyword name="SyntaxCheckerDialog.start" id="SyntaxCheckerDialog.start" ref="eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html#SyntaxCheckerDialog.start" />
+      <keyword name="Pep8 (Package)" id="Pep8 (Package)" ref="index-eric5.Plugins.CheckerPlugins.Pep8.html" />
+      <keyword name="Pep8Checker (Module)" id="Pep8Checker (Module)" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html" />
+      <keyword name="Pep8Checker" id="Pep8Checker" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html#Pep8Checker" />
+      <keyword name="Pep8Checker (Constructor)" id="Pep8Checker (Constructor)" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html#Pep8Checker.__init__" />
+      <keyword name="Pep8Checker.__ignore_code" id="Pep8Checker.__ignore_code" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html#Pep8Checker.__ignore_code" />
+      <keyword name="Pep8Checker.report_error_args" id="Pep8Checker.report_error_args" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html#Pep8Checker.report_error_args" />
+      <keyword name="pep8 (Module)" id="pep8 (Module)" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html" />
+      <keyword name="Checker" id="Checker" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker" />
+      <keyword name="_main" id="_main" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#_main" />
+      <keyword name="blank_lines" id="blank_lines" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#blank_lines" />
+      <keyword name="compound_statements" id="compound_statements" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#compound_statements" />
+      <keyword name="excluded" id="excluded" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#excluded" />
+      <keyword name="expand_indent" id="expand_indent" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#expand_indent" />
+      <keyword name="extraneous_whitespace" id="extraneous_whitespace" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#extraneous_whitespace" />
+      <keyword name="filename_match" id="filename_match" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#filename_match" />
+      <keyword name="find_checks" id="find_checks" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#find_checks" />
+      <keyword name="getMessage" id="getMessage" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#getMessage" />
+      <keyword name="get_count" id="get_count" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#get_count" />
+      <keyword name="get_error_statistics" id="get_error_statistics" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#get_error_statistics" />
+      <keyword name="get_statistics" id="get_statistics" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#get_statistics" />
+      <keyword name="get_warning_statistics" id="get_warning_statistics" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#get_warning_statistics" />
+      <keyword name="ignore_code" id="ignore_code" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#ignore_code" />
+      <keyword name="imports_on_separate_lines" id="imports_on_separate_lines" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#imports_on_separate_lines" />
+      <keyword name="indentation" id="indentation" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#indentation" />
+      <keyword name="input_dir" id="input_dir" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#input_dir" />
+      <keyword name="input_file" id="input_file" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#input_file" />
+      <keyword name="maximum_line_length" id="maximum_line_length" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#maximum_line_length" />
+      <keyword name="message" id="message" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#message" />
+      <keyword name="missing_newline" id="missing_newline" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#missing_newline" />
+      <keyword name="missing_whitespace" id="missing_whitespace" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#missing_whitespace" />
+      <keyword name="missing_whitespace_around_operator" id="missing_whitespace_around_operator" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#missing_whitespace_around_operator" />
+      <keyword name="mute_string" id="mute_string" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#mute_string" />
+      <keyword name="print_benchmark" id="print_benchmark" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#print_benchmark" />
+      <keyword name="print_statistics" id="print_statistics" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#print_statistics" />
+      <keyword name="process_options" id="process_options" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#process_options" />
+      <keyword name="python_3000_backticks" id="python_3000_backticks" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#python_3000_backticks" />
+      <keyword name="python_3000_has_key" id="python_3000_has_key" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#python_3000_has_key" />
+      <keyword name="python_3000_not_equal" id="python_3000_not_equal" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#python_3000_not_equal" />
+      <keyword name="python_3000_raise_comma" id="python_3000_raise_comma" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#python_3000_raise_comma" />
+      <keyword name="readlines" id="readlines" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#readlines" />
+      <keyword name="readlines_1" id="readlines_1" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#readlines_1" />
+      <keyword name="reset_counters" id="reset_counters" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#reset_counters" />
+      <keyword name="run_tests" id="run_tests" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#run_tests" />
+      <keyword name="selftest" id="selftest" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#selftest" />
+      <keyword name="tabs_obsolete" id="tabs_obsolete" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#tabs_obsolete" />
+      <keyword name="tabs_or_spaces" id="tabs_or_spaces" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#tabs_or_spaces" />
+      <keyword name="trailing_blank_lines" id="trailing_blank_lines" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#trailing_blank_lines" />
+      <keyword name="trailing_whitespace" id="trailing_whitespace" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#trailing_whitespace" />
+      <keyword name="whitespace_around_comma" id="whitespace_around_comma" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#whitespace_around_comma" />
+      <keyword name="whitespace_around_named_parameter_equals" id="whitespace_around_named_parameter_equals" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#whitespace_around_named_parameter_equals" />
+      <keyword name="whitespace_around_operator" id="whitespace_around_operator" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#whitespace_around_operator" />
+      <keyword name="whitespace_before_inline_comment" id="whitespace_before_inline_comment" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#whitespace_before_inline_comment" />
+      <keyword name="whitespace_before_parameters" id="whitespace_before_parameters" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#whitespace_before_parameters" />
+      <keyword name="Checker (Constructor)" id="Checker (Constructor)" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.__init__" />
+      <keyword name="Checker.build_tokens_line" id="Checker.build_tokens_line" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.build_tokens_line" />
+      <keyword name="Checker.check_all" id="Checker.check_all" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.check_all" />
+      <keyword name="Checker.check_logical" id="Checker.check_logical" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.check_logical" />
+      <keyword name="Checker.check_physical" id="Checker.check_physical" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.check_physical" />
+      <keyword name="Checker.readline" id="Checker.readline" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.readline" />
+      <keyword name="Checker.readline_check_physical" id="Checker.readline_check_physical" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.readline_check_physical" />
+      <keyword name="Checker.report_error" id="Checker.report_error" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.report_error" />
+      <keyword name="Checker.run_check" id="Checker.run_check" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#Checker.run_check" />
+      <keyword name="Pep8CodeSelectionDialog (Module)" id="Pep8CodeSelectionDialog (Module)" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html" />
+      <keyword name="Pep8CodeSelectionDialog" id="Pep8CodeSelectionDialog" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html#Pep8CodeSelectionDialog" />
+      <keyword name="Pep8CodeSelectionDialog (Constructor)" id="Pep8CodeSelectionDialog (Constructor)" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html#Pep8CodeSelectionDialog.__init__" />
+      <keyword name="Pep8CodeSelectionDialog.getSelectedCodes" id="Pep8CodeSelectionDialog.getSelectedCodes" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html#Pep8CodeSelectionDialog.getSelectedCodes" />
+      <keyword name="Pep8Dialog (Module)" id="Pep8Dialog (Module)" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html" />
+      <keyword name="Pep8Dialog" id="Pep8Dialog" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog" />
+      <keyword name="Pep8Dialog (Constructor)" id="Pep8Dialog (Constructor)" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.__init__" />
+      <keyword name="Pep8Dialog.__clearErrors" id="Pep8Dialog.__clearErrors" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.__clearErrors" />
+      <keyword name="Pep8Dialog.__createResultItem" id="Pep8Dialog.__createResultItem" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.__createResultItem" />
+      <keyword name="Pep8Dialog.__finish" id="Pep8Dialog.__finish" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.__finish" />
+      <keyword name="Pep8Dialog.__resort" id="Pep8Dialog.__resort" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.__resort" />
+      <keyword name="Pep8Dialog.on_buttonBox_clicked" id="Pep8Dialog.on_buttonBox_clicked" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_buttonBox_clicked" />
+      <keyword name="Pep8Dialog.on_excludeMessagesSelectButton_clicked" id="Pep8Dialog.on_excludeMessagesSelectButton_clicked" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_excludeMessagesSelectButton_clicked" />
+      <keyword name="Pep8Dialog.on_includeMessagesSelectButton_clicked" id="Pep8Dialog.on_includeMessagesSelectButton_clicked" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_includeMessagesSelectButton_clicked" />
+      <keyword name="Pep8Dialog.on_loadDefaultButton_clicked" id="Pep8Dialog.on_loadDefaultButton_clicked" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_loadDefaultButton_clicked" />
+      <keyword name="Pep8Dialog.on_resultList_itemActivated" id="Pep8Dialog.on_resultList_itemActivated" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_resultList_itemActivated" />
+      <keyword name="Pep8Dialog.on_showButton_clicked" id="Pep8Dialog.on_showButton_clicked" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_showButton_clicked" />
+      <keyword name="Pep8Dialog.on_startButton_clicked" id="Pep8Dialog.on_startButton_clicked" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_startButton_clicked" />
+      <keyword name="Pep8Dialog.on_storeDefaultButton_clicked" id="Pep8Dialog.on_storeDefaultButton_clicked" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.on_storeDefaultButton_clicked" />
+      <keyword name="Pep8Dialog.prepare" id="Pep8Dialog.prepare" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.prepare" />
+      <keyword name="Pep8Dialog.start" id="Pep8Dialog.start" ref="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html#Pep8Dialog.start" />
       <keyword name="Tabnanny (Package)" id="Tabnanny (Package)" ref="index-eric5.Plugins.CheckerPlugins.Tabnanny.html" />
       <keyword name="TabnannyDialog (Module)" id="TabnannyDialog (Module)" ref="eric5.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html" />
       <keyword name="TabnannyDialog" id="TabnannyDialog" ref="eric5.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog" />
@@ -10241,6 +10345,10 @@
       <file>eric5.PluginManager.PluginRepositoryDialog.html</file>
       <file>eric5.PluginManager.PluginUninstallDialog.html</file>
       <file>eric5.Plugins.AboutPlugin.AboutDialog.html</file>
+      <file>eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html</file>
+      <file>eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html</file>
+      <file>eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html</file>
+      <file>eric5.Plugins.CheckerPlugins.Pep8.pep8.html</file>
       <file>eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html</file>
       <file>eric5.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html</file>
       <file>eric5.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html</file>
@@ -10251,6 +10359,7 @@
       <file>eric5.Plugins.PluginAbout.html</file>
       <file>eric5.Plugins.PluginEricapi.html</file>
       <file>eric5.Plugins.PluginEricdoc.html</file>
+      <file>eric5.Plugins.PluginPep8Checker.html</file>
       <file>eric5.Plugins.PluginSyntaxChecker.html</file>
       <file>eric5.Plugins.PluginTabnanny.html</file>
       <file>eric5.Plugins.PluginVcsMercurial.html</file>
@@ -10631,6 +10740,7 @@
       <file>index-eric5.MultiProject.html</file>
       <file>index-eric5.PluginManager.html</file>
       <file>index-eric5.Plugins.AboutPlugin.html</file>
+      <file>index-eric5.Plugins.CheckerPlugins.Pep8.html</file>
       <file>index-eric5.Plugins.CheckerPlugins.SyntaxChecker.html</file>
       <file>index-eric5.Plugins.CheckerPlugins.Tabnanny.html</file>
       <file>index-eric5.Plugins.CheckerPlugins.html</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker</title>
+<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.Plugins.CheckerPlugins.Pep8.Pep8Checker</h1>
+<p>
+Module implementing the PEP 8 checker.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Pep8Checker">Pep8Checker</a></td>
+<td>Class implementing the PEP 8 checker.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="Pep8Checker" ID="Pep8Checker"></a>
+<h2>Pep8Checker</h2>
+<p>
+    Class implementing the PEP 8 checker.
+</p>
+<h3>Derived from</h3>
+pep8.Checker
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Pep8Checker.__init__">Pep8Checker</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Pep8Checker.__ignore_code">__ignore_code</a></td>
+<td>Private method to check, if the message for the given code should be ignored.</td>
+</tr><tr>
+<td><a href="#Pep8Checker.report_error_args">report_error_args</a></td>
+<td>Public method to collect the error messages.</td>
+</tr>
+</table>
+<a NAME="Pep8Checker.__init__" ID="Pep8Checker.__init__"></a>
+<h4>Pep8Checker (Constructor)</h4>
+<b>Pep8Checker</b>(<i>filename, lines, repeat=False, select="", ignore=""</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>filename</i></dt>
+<dd>
+name of the file to check (string)
+</dd><dt><i>lines</i></dt>
+<dd>
+source of the file (list of strings)
+</dd><dt><i>repeat=</i></dt>
+<dd>
+flag indicating to repeat message categories (boolean)
+</dd><dt><i>select=</i></dt>
+<dd>
+list of message IDs to check for
+            (comma separated string)
+</dd><dt><i>ignore=</i></dt>
+<dd>
+list of message IDs to ignore
+            (comma separated string)
+</dd>
+</dl><a NAME="Pep8Checker.__ignore_code" ID="Pep8Checker.__ignore_code"></a>
+<h4>Pep8Checker.__ignore_code</h4>
+<b>__ignore_code</b>(<i>code</i>)
+<p>
+        Private method to check, if the message for the given code should
+        be ignored.
+</p><p>
+        If codes are selected and the code has a selected prefix and does not
+        have an ignored prefix, it is not ignored. If codes are selected and
+        the code does not have a selected prefix, it is ignored. If no codes
+        are selected, the code is ignored, if it has a prefix, that is
+        contained in the ignored codes.
+</p><dl>
+<dt><i>code</i></dt>
+<dd>
+code to be checked (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating, that the code should be ignored (boolean)
+</dd>
+</dl><a NAME="Pep8Checker.report_error_args" ID="Pep8Checker.report_error_args"></a>
+<h4>Pep8Checker.report_error_args</h4>
+<b>report_error_args</b>(<i>line_number, offset, code, check, *args</i>)
+<p>
+        Public method to collect the error messages.
+</p><dl>
+<dt><i>line_number</i></dt>
+<dd>
+line number of the issue (integer)
+</dd><dt><i>offset</i></dt>
+<dd>
+position within line of the issue (integer)
+</dd><dt><i>code</i></dt>
+<dd>
+message code (string)
+</dd><dt><i>check</i></dt>
+<dd>
+reference to the checker function (function)
+</dd><dt><i>args</i></dt>
+<dd>
+arguments for the message (list)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog</title>
+<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.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog</h1>
+<p>
+Module implementing a dialog to select PEP 8 message codes.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Pep8CodeSelectionDialog">Pep8CodeSelectionDialog</a></td>
+<td>Class implementing a dialog to select PEP 8 message codes.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="Pep8CodeSelectionDialog" ID="Pep8CodeSelectionDialog"></a>
+<h2>Pep8CodeSelectionDialog</h2>
+<p>
+    Class implementing a dialog to select PEP 8 message codes.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_Pep8CodeSelectionDialog
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Pep8CodeSelectionDialog.__init__">Pep8CodeSelectionDialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Pep8CodeSelectionDialog.getSelectedCodes">getSelectedCodes</a></td>
+<td>Public method to get a comma separated list of codes selected.</td>
+</tr>
+</table>
+<a NAME="Pep8CodeSelectionDialog.__init__" ID="Pep8CodeSelectionDialog.__init__"></a>
+<h4>Pep8CodeSelectionDialog (Constructor)</h4>
+<b>Pep8CodeSelectionDialog</b>(<i>codes, parent = None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>codes</i></dt>
+<dd>
+comma separated list of selected codes (string)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="Pep8CodeSelectionDialog.getSelectedCodes" ID="Pep8CodeSelectionDialog.getSelectedCodes"></a>
+<h4>Pep8CodeSelectionDialog.getSelectedCodes</h4>
+<b>getSelectedCodes</b>(<i></i>)
+<p>
+        Public method to get a comma separated list of codes selected.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+comma separated list of selected codes (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog</title>
+<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.Plugins.CheckerPlugins.Pep8.Pep8Dialog</h1>
+<p>
+Module implementing a dialog to show the results of the PEP 8 check.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Pep8Dialog">Pep8Dialog</a></td>
+<td>Class implementing a dialog to show the results of the PEP 8 check.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="Pep8Dialog" ID="Pep8Dialog"></a>
+<h2>Pep8Dialog</h2>
+<p>
+    Class implementing a dialog to show the results of the PEP 8 check.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_Pep8Dialog
+<h3>Class Attributes</h3>
+<table>
+<tr><td>filenameRole</td></tr><tr><td>lineRole</td></tr><tr><td>messageRole</td></tr><tr><td>positionRole</td></tr><tr><td>settingsKey</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Pep8Dialog.__init__">Pep8Dialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.__clearErrors">__clearErrors</a></td>
+<td>Private method to clear all warning markers of open editors.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.__createResultItem">__createResultItem</a></td>
+<td>Private method to create an entry in the result list.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.__finish">__finish</a></td>
+<td>Private slot called when the PEP 8 check finished or the user pressed the cancel button.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.__resort">__resort</a></td>
+<td>Private method to resort the tree.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
+<td>Private slot called by a button of the button box clicked.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_excludeMessagesSelectButton_clicked">on_excludeMessagesSelectButton_clicked</a></td>
+<td>Private slot to select the message codes to be excluded via a selection dialog.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_includeMessagesSelectButton_clicked">on_includeMessagesSelectButton_clicked</a></td>
+<td>Private slot to select the message codes to be included via a selection dialog.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_loadDefaultButton_clicked">on_loadDefaultButton_clicked</a></td>
+<td>Private slot to load the default configuration values.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_resultList_itemActivated">on_resultList_itemActivated</a></td>
+<td>Private slot to handle the activation of an item.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_showButton_clicked">on_showButton_clicked</a></td>
+<td>Private slot to handle the "Show" button press.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_startButton_clicked">on_startButton_clicked</a></td>
+<td>Private slot to start a PEP 8 check run.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.on_storeDefaultButton_clicked">on_storeDefaultButton_clicked</a></td>
+<td>Private slot to store the current configuration values as default values.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.prepare">prepare</a></td>
+<td>Public method to prepare the dialog with a list of filenames.</td>
+</tr><tr>
+<td><a href="#Pep8Dialog.start">start</a></td>
+<td>Public slot to start the PEP 8 check.</td>
+</tr>
+</table>
+<a NAME="Pep8Dialog.__init__" ID="Pep8Dialog.__init__"></a>
+<h4>Pep8Dialog (Constructor)</h4>
+<b>Pep8Dialog</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="Pep8Dialog.__clearErrors" ID="Pep8Dialog.__clearErrors"></a>
+<h4>Pep8Dialog.__clearErrors</h4>
+<b>__clearErrors</b>(<i></i>)
+<p>
+        Private method to clear all warning markers of open editors.
+</p><a NAME="Pep8Dialog.__createResultItem" ID="Pep8Dialog.__createResultItem"></a>
+<h4>Pep8Dialog.__createResultItem</h4>
+<b>__createResultItem</b>(<i>file, line, pos, message</i>)
+<p>
+        Private method to create an entry in the result list.
+</p><dl>
+<dt><i>file</i></dt>
+<dd>
+file name of the file (string)
+</dd><dt><i>line</i></dt>
+<dd>
+line number of issue (integer or string)
+</dd><dt><i>pos</i></dt>
+<dd>
+character position of issue (integer or string)
+</dd><dt><i>message</i></dt>
+<dd>
+message text (string)
+</dd>
+</dl><a NAME="Pep8Dialog.__finish" ID="Pep8Dialog.__finish"></a>
+<h4>Pep8Dialog.__finish</h4>
+<b>__finish</b>(<i></i>)
+<p>
+        Private slot called when the PEP 8 check finished or the user
+        pressed the cancel button.
+</p><a NAME="Pep8Dialog.__resort" ID="Pep8Dialog.__resort"></a>
+<h4>Pep8Dialog.__resort</h4>
+<b>__resort</b>(<i></i>)
+<p>
+        Private method to resort the tree.
+</p><a NAME="Pep8Dialog.on_buttonBox_clicked" ID="Pep8Dialog.on_buttonBox_clicked"></a>
+<h4>Pep8Dialog.on_buttonBox_clicked</h4>
+<b>on_buttonBox_clicked</b>(<i>button</i>)
+<p>
+        Private slot called by a button of the button box clicked.
+</p><dl>
+<dt><i>button</i></dt>
+<dd>
+button that was clicked (QAbstractButton)
+</dd>
+</dl><a NAME="Pep8Dialog.on_excludeMessagesSelectButton_clicked" ID="Pep8Dialog.on_excludeMessagesSelectButton_clicked"></a>
+<h4>Pep8Dialog.on_excludeMessagesSelectButton_clicked</h4>
+<b>on_excludeMessagesSelectButton_clicked</b>(<i></i>)
+<p>
+        Private slot to select the message codes to be excluded via a
+        selection dialog.
+</p><a NAME="Pep8Dialog.on_includeMessagesSelectButton_clicked" ID="Pep8Dialog.on_includeMessagesSelectButton_clicked"></a>
+<h4>Pep8Dialog.on_includeMessagesSelectButton_clicked</h4>
+<b>on_includeMessagesSelectButton_clicked</b>(<i></i>)
+<p>
+        Private slot to select the message codes to be included via a
+        selection dialog.
+</p><a NAME="Pep8Dialog.on_loadDefaultButton_clicked" ID="Pep8Dialog.on_loadDefaultButton_clicked"></a>
+<h4>Pep8Dialog.on_loadDefaultButton_clicked</h4>
+<b>on_loadDefaultButton_clicked</b>(<i></i>)
+<p>
+        Private slot to load the default configuration values.
+</p><a NAME="Pep8Dialog.on_resultList_itemActivated" ID="Pep8Dialog.on_resultList_itemActivated"></a>
+<h4>Pep8Dialog.on_resultList_itemActivated</h4>
+<b>on_resultList_itemActivated</b>(<i>item, column</i>)
+<p>
+        Private slot to handle the activation of an item. 
+</p><dl>
+<dt><i>item</i></dt>
+<dd>
+reference to the activated item (QTreeWidgetItem)
+</dd><dt><i>column</i></dt>
+<dd>
+column the item was activated in (integer)
+</dd>
+</dl><a NAME="Pep8Dialog.on_showButton_clicked" ID="Pep8Dialog.on_showButton_clicked"></a>
+<h4>Pep8Dialog.on_showButton_clicked</h4>
+<b>on_showButton_clicked</b>(<i></i>)
+<p>
+        Private slot to handle the "Show" button press.
+</p><a NAME="Pep8Dialog.on_startButton_clicked" ID="Pep8Dialog.on_startButton_clicked"></a>
+<h4>Pep8Dialog.on_startButton_clicked</h4>
+<b>on_startButton_clicked</b>(<i></i>)
+<p>
+        Private slot to start a PEP 8 check run.
+</p><a NAME="Pep8Dialog.on_storeDefaultButton_clicked" ID="Pep8Dialog.on_storeDefaultButton_clicked"></a>
+<h4>Pep8Dialog.on_storeDefaultButton_clicked</h4>
+<b>on_storeDefaultButton_clicked</b>(<i></i>)
+<p>
+        Private slot to store the current configuration values as
+        default values.
+</p><a NAME="Pep8Dialog.prepare" ID="Pep8Dialog.prepare"></a>
+<h4>Pep8Dialog.prepare</h4>
+<b>prepare</b>(<i>fileList, project</i>)
+<p>
+        Public method to prepare the dialog with a list of filenames.
+</p><dl>
+<dt><i>fileList</i></dt>
+<dd>
+list of filenames (list of strings)
+</dd><dt><i>project</i></dt>
+<dd>
+reference to the project object (Project)
+</dd>
+</dl><a NAME="Pep8Dialog.start" ID="Pep8Dialog.start"></a>
+<h4>Pep8Dialog.start</h4>
+<b>start</b>(<i>fn, codestring = "", save = False, repeat = None</i>)
+<p>
+        Public slot to start the PEP 8 check.
+</p><dl>
+<dt><i>fn</i></dt>
+<dd>
+file or list of files or directory to be checked
+                (string or list of strings)
+</dd><dt><i>codestring=</i></dt>
+<dd>
+string containing the code to be checked (string).
+            If this is given, file must be a single file name.
+</dd><dt><i>save=</i></dt>
+<dd>
+flag indicating to save the given
+            file/file list/directory (boolean)
+</dd><dt><i>repeat=</i></dt>
+<dd>
+state of the repeat check box if it is not None
+            (None or boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.CheckerPlugins.Pep8.pep8.html	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,753 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Plugins.CheckerPlugins.Pep8.pep8</title>
+<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.Plugins.CheckerPlugins.Pep8.pep8</h1>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>BENCHMARK_KEYS</td></tr><tr><td>BINARY_OPERATORS</td></tr><tr><td>DEFAULT_EXCLUDE</td></tr><tr><td>DEFAULT_IGNORE</td></tr><tr><td>DOCSTRING_REGEX</td></tr><tr><td>E225NOT_KEYWORDS</td></tr><tr><td>ERRORCODE_REGEX</td></tr><tr><td>EXTRANEOUS_WHITESPACE_REGEX</td></tr><tr><td>INDENT_REGEX</td></tr><tr><td>MAX_LINE_LENGTH</td></tr><tr><td>OPERATORS</td></tr><tr><td>RAISE_COMMA_REGEX</td></tr><tr><td>SELFTEST_REGEX</td></tr><tr><td>SKIP_TOKENS</td></tr><tr><td>UNARY_OPERATORS</td></tr><tr><td>WHITESPACE</td></tr><tr><td>WHITESPACE_AROUND_NAMED_PARAMETER_REGEX</td></tr><tr><td>WHITESPACE_AROUND_OPERATOR_REGEX</td></tr><tr><td>__version__</td></tr><tr><td>args</td></tr><tr><td>options</td></tr><tr><td>pep8_messages</td></tr><tr><td>pep8_messages_sample_args</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Checker">Checker</a></td>
+<td>Load a Python source file, tokenize it, check coding style.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#_main">_main</a></td>
+<td>Parse options and run checks on Python source.</td>
+</tr><tr>
+<td><a href="#blank_lines">blank_lines</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#compound_statements">compound_statements</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#excluded">excluded</a></td>
+<td>Check if options.exclude contains a pattern that matches filename.</td>
+</tr><tr>
+<td><a href="#expand_indent">expand_indent</a></td>
+<td>Return the amount of indentation.</td>
+</tr><tr>
+<td><a href="#extraneous_whitespace">extraneous_whitespace</a></td>
+<td>Avoid extraneous whitespace in the following situations:</td>
+</tr><tr>
+<td><a href="#filename_match">filename_match</a></td>
+<td>Check if options.filename contains a pattern that matches filename.</td>
+</tr><tr>
+<td><a href="#find_checks">find_checks</a></td>
+<td>Find all globally visible functions where the first argument name starts with argument_name.</td>
+</tr><tr>
+<td><a href="#getMessage">getMessage</a></td>
+<td>Function to get a translated and formatted message for a given code.</td>
+</tr><tr>
+<td><a href="#get_count">get_count</a></td>
+<td>Return the total count of errors and warnings.</td>
+</tr><tr>
+<td><a href="#get_error_statistics">get_error_statistics</a></td>
+<td>Get error statistics.</td>
+</tr><tr>
+<td><a href="#get_statistics">get_statistics</a></td>
+<td>Get statistics for message codes that start with the prefix.</td>
+</tr><tr>
+<td><a href="#get_warning_statistics">get_warning_statistics</a></td>
+<td>Get warning statistics.</td>
+</tr><tr>
+<td><a href="#ignore_code">ignore_code</a></td>
+<td>Check if options.ignore contains a prefix of the error code.</td>
+</tr><tr>
+<td><a href="#imports_on_separate_lines">imports_on_separate_lines</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#indentation">indentation</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#input_dir">input_dir</a></td>
+<td>Check all Python source files in this directory and all subdirectories.</td>
+</tr><tr>
+<td><a href="#input_file">input_file</a></td>
+<td>Run all checks on a Python source file.</td>
+</tr><tr>
+<td><a href="#maximum_line_length">maximum_line_length</a></td>
+<td>Limit all lines to a maximum of 79 characters.</td>
+</tr><tr>
+<td><a href="#message">message</a></td>
+<td>Print a message.</td>
+</tr><tr>
+<td><a href="#missing_newline">missing_newline</a></td>
+<td>JCR: The last line should have a newline.</td>
+</tr><tr>
+<td><a href="#missing_whitespace">missing_whitespace</a></td>
+<td>JCR: Each comma, semicolon or colon should be followed by whitespace.</td>
+</tr><tr>
+<td><a href="#missing_whitespace_around_operator">missing_whitespace_around_operator</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#mute_string">mute_string</a></td>
+<td>Replace contents with 'xxx' to prevent syntax matching.</td>
+</tr><tr>
+<td><a href="#print_benchmark">print_benchmark</a></td>
+<td>Print benchmark numbers.</td>
+</tr><tr>
+<td><a href="#print_statistics">print_statistics</a></td>
+<td>Print overall statistics (number of errors and warnings).</td>
+</tr><tr>
+<td><a href="#process_options">process_options</a></td>
+<td>Process options passed either via arglist or via command line args.</td>
+</tr><tr>
+<td><a href="#python_3000_backticks">python_3000_backticks</a></td>
+<td>Backticks are removed in Python 3000.</td>
+</tr><tr>
+<td><a href="#python_3000_has_key">python_3000_has_key</a></td>
+<td>The {}.has_key() method will be removed in the future version of Python.</td>
+</tr><tr>
+<td><a href="#python_3000_not_equal">python_3000_not_equal</a></td>
+<td>!= can also be written <>, but this is an obsolete usage kept for backwards compatibility only.</td>
+</tr><tr>
+<td><a href="#python_3000_raise_comma">python_3000_raise_comma</a></td>
+<td>When raising an exception, use "raise ValueError('message')" instead of the older form "raise ValueError, 'message'".</td>
+</tr><tr>
+<td><a href="#readlines">readlines</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#readlines_1">readlines</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#reset_counters">reset_counters</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#run_tests">run_tests</a></td>
+<td>Run all the tests from a file.</td>
+</tr><tr>
+<td><a href="#selftest">selftest</a></td>
+<td>Test all check functions with test cases in docstrings.</td>
+</tr><tr>
+<td><a href="#tabs_obsolete">tabs_obsolete</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#tabs_or_spaces">tabs_or_spaces</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#trailing_blank_lines">trailing_blank_lines</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#trailing_whitespace">trailing_whitespace</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#whitespace_around_comma">whitespace_around_comma</a></td>
+<td>Avoid extraneous whitespace in the following situations:</td>
+</tr><tr>
+<td><a href="#whitespace_around_named_parameter_equals">whitespace_around_named_parameter_equals</a></td>
+<td>Don't use spaces around the '=' sign when used to indicate a keyword argument or a default parameter value.</td>
+</tr><tr>
+<td><a href="#whitespace_around_operator">whitespace_around_operator</a></td>
+<td>Avoid extraneous whitespace in the following situations:</td>
+</tr><tr>
+<td><a href="#whitespace_before_inline_comment">whitespace_before_inline_comment</a></td>
+<td>Separate inline comments by at least two spaces.</td>
+</tr><tr>
+<td><a href="#whitespace_before_parameters">whitespace_before_parameters</a></td>
+<td>Avoid extraneous whitespace in the following situations:</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="Checker" ID="Checker"></a>
+<h2>Checker</h2>
+<p>
+    Load a Python source file, tokenize it, check coding style.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Checker.__init__">Checker</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#Checker.build_tokens_line">build_tokens_line</a></td>
+<td>Build a logical line from tokens.</td>
+</tr><tr>
+<td><a href="#Checker.check_all">check_all</a></td>
+<td>Run all checks on the input file.</td>
+</tr><tr>
+<td><a href="#Checker.check_logical">check_logical</a></td>
+<td>Build a line from tokens and run all logical checks on it.</td>
+</tr><tr>
+<td><a href="#Checker.check_physical">check_physical</a></td>
+<td>Run all physical checks on a raw input line.</td>
+</tr><tr>
+<td><a href="#Checker.readline">readline</a></td>
+<td>Get the next line from the input buffer.</td>
+</tr><tr>
+<td><a href="#Checker.readline_check_physical">readline_check_physical</a></td>
+<td>Check and return the next physical line.</td>
+</tr><tr>
+<td><a href="#Checker.report_error">report_error</a></td>
+<td>Report an error, according to options.</td>
+</tr><tr>
+<td><a href="#Checker.run_check">run_check</a></td>
+<td>Run a check plugin.</td>
+</tr>
+</table>
+<a NAME="Checker.__init__" ID="Checker.__init__"></a>
+<h4>Checker (Constructor)</h4>
+<b>Checker</b>(<i>filename, lines=None</i>)
+<a NAME="Checker.build_tokens_line" ID="Checker.build_tokens_line"></a>
+<h4>Checker.build_tokens_line</h4>
+<b>build_tokens_line</b>(<i></i>)
+<p>
+        Build a logical line from tokens.
+</p><a NAME="Checker.check_all" ID="Checker.check_all"></a>
+<h4>Checker.check_all</h4>
+<b>check_all</b>(<i>expected=None, line_offset=0</i>)
+<p>
+        Run all checks on the input file.
+</p><a NAME="Checker.check_logical" ID="Checker.check_logical"></a>
+<h4>Checker.check_logical</h4>
+<b>check_logical</b>(<i></i>)
+<p>
+        Build a line from tokens and run all logical checks on it.
+</p><a NAME="Checker.check_physical" ID="Checker.check_physical"></a>
+<h4>Checker.check_physical</h4>
+<b>check_physical</b>(<i>line</i>)
+<p>
+        Run all physical checks on a raw input line.
+</p><a NAME="Checker.readline" ID="Checker.readline"></a>
+<h4>Checker.readline</h4>
+<b>readline</b>(<i></i>)
+<p>
+        Get the next line from the input buffer.
+</p><a NAME="Checker.readline_check_physical" ID="Checker.readline_check_physical"></a>
+<h4>Checker.readline_check_physical</h4>
+<b>readline_check_physical</b>(<i></i>)
+<p>
+        Check and return the next physical line. This method can be
+        used to feed tokenize.generate_tokens.
+</p><a NAME="Checker.report_error" ID="Checker.report_error"></a>
+<h4>Checker.report_error</h4>
+<b>report_error</b>(<i>line_number, offset, text, check</i>)
+<p>
+        Report an error, according to options.
+</p><a NAME="Checker.run_check" ID="Checker.run_check"></a>
+<h4>Checker.run_check</h4>
+<b>run_check</b>(<i>check, argument_names</i>)
+<p>
+        Run a check plugin.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_main" ID="_main"></a>
+<h2>_main</h2>
+<b>_main</b>(<i></i>)
+<p>
+    Parse options and run checks on Python source.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="blank_lines" ID="blank_lines"></a>
+<h2>blank_lines</h2>
+<b>blank_lines</b>(<i>logical_line, blank_lines, indent_level, line_number, previous_logical, previous_indent_level, blank_lines_before_comment</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="compound_statements" ID="compound_statements"></a>
+<h2>compound_statements</h2>
+<b>compound_statements</b>(<i>logical_line</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="excluded" ID="excluded"></a>
+<h2>excluded</h2>
+<b>excluded</b>(<i>filename</i>)
+<p>
+    Check if options.exclude contains a pattern that matches filename.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="expand_indent" ID="expand_indent"></a>
+<h2>expand_indent</h2>
+<b>expand_indent</b>(<i>line</i>)
+<p>
+    Return the amount of indentation.
+    Tabs are expanded to the next multiple of 8.
+</p><p>
+    >>> expand_indent('    ')
+    4
+    >>> expand_indent('\\t')
+    8
+    >>> expand_indent('    \\t')
+    8
+    >>> expand_indent('       \\t')
+    8
+    >>> expand_indent('        \\t')
+    16
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="extraneous_whitespace" ID="extraneous_whitespace"></a>
+<h2>extraneous_whitespace</h2>
+<b>extraneous_whitespace</b>(<i>logical_line</i>)
+<p>
+    Avoid extraneous whitespace in the following situations:
+</p><p>
+    - Immediately inside parentheses, brackets or braces.
+</p><p>
+    - Immediately before a comma, semicolon, or colon.
+</p><p>
+    Okay: spam(ham[1], {eggs: 2})
+    E201: spam( ham[1], {eggs: 2})
+    E201: spam(ham[ 1], {eggs: 2})
+    E201: spam(ham[1], { eggs: 2})
+    E202: spam(ham[1], {eggs: 2} )
+    E202: spam(ham[1 ], {eggs: 2})
+    E202: spam(ham[1], {eggs: 2 })
+</p><p>
+    E203: if x == 4: print x, y; x, y = y , x
+    E203: if x == 4: print x, y ; x, y = y, x
+    E203: if x == 4 : print x, y; x, y = y, x
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="filename_match" ID="filename_match"></a>
+<h2>filename_match</h2>
+<b>filename_match</b>(<i>filename</i>)
+<p>
+    Check if options.filename contains a pattern that matches filename.
+    If options.filename is unspecified, this always returns True.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="find_checks" ID="find_checks"></a>
+<h2>find_checks</h2>
+<b>find_checks</b>(<i>argument_name</i>)
+<p>
+    Find all globally visible functions where the first argument name
+    starts with argument_name.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getMessage" ID="getMessage"></a>
+<h2>getMessage</h2>
+<b>getMessage</b>(<i>code, *args</i>)
+<p>
+    Function to get a translated and formatted message for a given code.
+</p><dl>
+<dt><i>code</i></dt>
+<dd>
+message code (string)
+</dd><dt><i>args</i></dt>
+<dd>
+arguments for a formatted message (list)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+translated and formatted message (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="get_count" ID="get_count"></a>
+<h2>get_count</h2>
+<b>get_count</b>(<i>prefix=''</i>)
+<p>
+Return the total count of errors and warnings.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="get_error_statistics" ID="get_error_statistics"></a>
+<h2>get_error_statistics</h2>
+<b>get_error_statistics</b>(<i></i>)
+<p>
+Get error statistics.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="get_statistics" ID="get_statistics"></a>
+<h2>get_statistics</h2>
+<b>get_statistics</b>(<i>prefix=''</i>)
+<p>
+    Get statistics for message codes that start with the prefix.
+</p><p>
+    prefix='' matches all errors and warnings
+    prefix='E' matches all errors
+    prefix='W' matches all warnings
+    prefix='E4' matches all errors that have to do with imports
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="get_warning_statistics" ID="get_warning_statistics"></a>
+<h2>get_warning_statistics</h2>
+<b>get_warning_statistics</b>(<i></i>)
+<p>
+Get warning statistics.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="ignore_code" ID="ignore_code"></a>
+<h2>ignore_code</h2>
+<b>ignore_code</b>(<i>code</i>)
+<p>
+    Check if options.ignore contains a prefix of the error code.
+    If options.select contains a prefix of the error code, do not ignore it.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="imports_on_separate_lines" ID="imports_on_separate_lines"></a>
+<h2>imports_on_separate_lines</h2>
+<b>imports_on_separate_lines</b>(<i>logical_line</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="indentation" ID="indentation"></a>
+<h2>indentation</h2>
+<b>indentation</b>(<i>logical_line, previous_logical, indent_char, indent_level, previous_indent_level</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="input_dir" ID="input_dir"></a>
+<h2>input_dir</h2>
+<b>input_dir</b>(<i>dirname, runner=None</i>)
+<p>
+    Check all Python source files in this directory and all subdirectories.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="input_file" ID="input_file"></a>
+<h2>input_file</h2>
+<b>input_file</b>(<i>filename</i>)
+<p>
+    Run all checks on a Python source file.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="maximum_line_length" ID="maximum_line_length"></a>
+<h2>maximum_line_length</h2>
+<b>maximum_line_length</b>(<i>physical_line</i>)
+<p>
+    Limit all lines to a maximum of 79 characters.
+</p><p>
+    There are still many devices around that are limited to 80 character
+    lines; plus, limiting windows to 80 characters makes it possible to have
+    several windows side-by-side.  The default wrapping on such devices looks
+    ugly.  Therefore, please limit all lines to a maximum of 79 characters.
+    For flowing long blocks of text (docstrings or comments), limiting the
+    length to 72 characters is recommended.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="message" ID="message"></a>
+<h2>message</h2>
+<b>message</b>(<i>text</i>)
+<p>
+Print a message.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="missing_newline" ID="missing_newline"></a>
+<h2>missing_newline</h2>
+<b>missing_newline</b>(<i>physical_line</i>)
+<p>
+    JCR: The last line should have a newline.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="missing_whitespace" ID="missing_whitespace"></a>
+<h2>missing_whitespace</h2>
+<b>missing_whitespace</b>(<i>logical_line</i>)
+<p>
+    JCR: Each comma, semicolon or colon should be followed by whitespace.
+</p><p>
+    Okay: [a, b]
+    Okay: (3,)
+    Okay: a[1:4]
+    Okay: a[:4]
+    Okay: a[1:]
+    Okay: a[1:4:2]
+    E231: ['a','b']
+    E231: foo(bar,baz)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="missing_whitespace_around_operator" ID="missing_whitespace_around_operator"></a>
+<h2>missing_whitespace_around_operator</h2>
+<b>missing_whitespace_around_operator</b>(<i>logical_line, tokens</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="mute_string" ID="mute_string"></a>
+<h2>mute_string</h2>
+<b>mute_string</b>(<i>text</i>)
+<p>
+    Replace contents with 'xxx' to prevent syntax matching.
+</p><p>
+    >>> mute_string('"abc"')
+    '"xxx"'
+    >>> mute_string("'''abc'''")
+    "'''xxx'''"
+    >>> mute_string("r'abc'")
+    "r'xxx'"
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="print_benchmark" ID="print_benchmark"></a>
+<h2>print_benchmark</h2>
+<b>print_benchmark</b>(<i>elapsed</i>)
+<p>
+    Print benchmark numbers.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="print_statistics" ID="print_statistics"></a>
+<h2>print_statistics</h2>
+<b>print_statistics</b>(<i>prefix=''</i>)
+<p>
+Print overall statistics (number of errors and warnings).
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="process_options" ID="process_options"></a>
+<h2>process_options</h2>
+<b>process_options</b>(<i>arglist=None</i>)
+<p>
+    Process options passed either via arglist or via command line args.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_backticks" ID="python_3000_backticks"></a>
+<h2>python_3000_backticks</h2>
+<b>python_3000_backticks</b>(<i>logical_line</i>)
+<p>
+    Backticks are removed in Python 3000.
+    Use repr() instead.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_has_key" ID="python_3000_has_key"></a>
+<h2>python_3000_has_key</h2>
+<b>python_3000_has_key</b>(<i>logical_line</i>)
+<p>
+    The {}.has_key() method will be removed in the future version of
+    Python. Use the 'in' operation instead, like:
+    d = {"a": 1, "b": 2}
+    if "b" in d:
+        print d["b"]
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_not_equal" ID="python_3000_not_equal"></a>
+<h2>python_3000_not_equal</h2>
+<b>python_3000_not_equal</b>(<i>logical_line</i>)
+<p>
+    != can also be written <>, but this is an obsolete usage kept for
+    backwards compatibility only. New code should always use !=.
+    The older syntax is removed in Python 3000.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_raise_comma" ID="python_3000_raise_comma"></a>
+<h2>python_3000_raise_comma</h2>
+<b>python_3000_raise_comma</b>(<i>logical_line</i>)
+<p>
+    When raising an exception, use "raise ValueError('message')"
+    instead of the older form "raise ValueError, 'message'".
+</p><p>
+    The paren-using form is preferred because when the exception arguments
+    are long or include string formatting, you don't need to use line
+    continuation characters thanks to the containing parentheses.  The older
+    form will be removed in Python 3000.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="readlines" ID="readlines"></a>
+<h2>readlines</h2>
+<b>readlines</b>(<i>filename</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="readlines_1" ID="readlines_1"></a>
+<h2>readlines</h2>
+<b>readlines</b>(<i>filename</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="reset_counters" ID="reset_counters"></a>
+<h2>reset_counters</h2>
+<b>reset_counters</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="run_tests" ID="run_tests"></a>
+<h2>run_tests</h2>
+<b>run_tests</b>(<i>filename</i>)
+<p>
+    Run all the tests from a file.
+</p><p>
+    A test file can provide many tests.  Each test starts with a declaration.
+    This declaration is a single line starting with '#:'.
+    It declares codes of expected failures, separated by spaces or 'Okay'
+    if no failure is expected.
+    If the file does not contain such declaration, it should pass all tests.
+    If the declaration is empty, following lines are not checked, until next
+    declaration.
+</p><p>
+    Examples:
+</p><p>
+     * Only E224 and W701 are expected:         #: E224 W701
+     * Following example is conform:            #: Okay
+     * Don't check these lines:                 #:
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="selftest" ID="selftest"></a>
+<h2>selftest</h2>
+<b>selftest</b>(<i></i>)
+<p>
+    Test all check functions with test cases in docstrings.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="tabs_obsolete" ID="tabs_obsolete"></a>
+<h2>tabs_obsolete</h2>
+<b>tabs_obsolete</b>(<i>physical_line</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="tabs_or_spaces" ID="tabs_or_spaces"></a>
+<h2>tabs_or_spaces</h2>
+<b>tabs_or_spaces</b>(<i>physical_line, indent_char</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="trailing_blank_lines" ID="trailing_blank_lines"></a>
+<h2>trailing_blank_lines</h2>
+<b>trailing_blank_lines</b>(<i>physical_line, lines, line_number</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="trailing_whitespace" ID="trailing_whitespace"></a>
+<h2>trailing_whitespace</h2>
+<b>trailing_whitespace</b>(<i>physical_line</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_around_comma" ID="whitespace_around_comma"></a>
+<h2>whitespace_around_comma</h2>
+<b>whitespace_around_comma</b>(<i>logical_line</i>)
+<p>
+    Avoid extraneous whitespace in the following situations:
+</p><p>
+    - More than one space around an assignment (or other) operator to
+      align it with another.
+</p><p>
+    JCR: This should also be applied around comma etc.
+    Note: these checks are disabled by default
+</p><p>
+    Okay: a = (1, 2)
+    E241: a = (1,  2)
+    E242: a = (1,\t2)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_around_named_parameter_equals" ID="whitespace_around_named_parameter_equals"></a>
+<h2>whitespace_around_named_parameter_equals</h2>
+<b>whitespace_around_named_parameter_equals</b>(<i>logical_line</i>)
+<p>
+    Don't use spaces around the '=' sign when used to indicate a
+    keyword argument or a default parameter value.
+</p><p>
+    Okay: def complex(real, imag=0.0):
+    Okay: return magic(r=real, i=imag)
+    Okay: boolean(a == b)
+    Okay: boolean(a != b)
+    Okay: boolean(a <= b)
+    Okay: boolean(a >= b)
+</p><p>
+    E251: def complex(real, imag = 0.0):
+    E251: return magic(r = real, i = imag)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_around_operator" ID="whitespace_around_operator"></a>
+<h2>whitespace_around_operator</h2>
+<b>whitespace_around_operator</b>(<i>logical_line</i>)
+<p>
+    Avoid extraneous whitespace in the following situations:
+</p><p>
+    - More than one space around an assignment (or other) operator to
+      align it with another.
+</p><p>
+    Okay: a = 12 + 3
+    E221: a = 4  + 5
+    E222: a = 4 +  5
+    E223: a = 4\t+ 5
+    E224: a = 4 +\t5
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_before_inline_comment" ID="whitespace_before_inline_comment"></a>
+<h2>whitespace_before_inline_comment</h2>
+<b>whitespace_before_inline_comment</b>(<i>logical_line, tokens</i>)
+<p>
+    Separate inline comments by at least two spaces.
+</p><p>
+    An inline comment is a comment on the same line as a statement.  Inline
+    comments should be separated by at least two spaces from the statement.
+    They should start with a # and a single space.
+</p><p>
+    Okay: x = x + 1  # Increment x
+    Okay: x = x + 1    # Increment x
+    E261: x = x + 1 # Increment x
+    E262: x = x + 1  #Increment x
+    E262: x = x + 1  #  Increment x
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_before_parameters" ID="whitespace_before_parameters"></a>
+<h2>whitespace_before_parameters</h2>
+<b>whitespace_before_parameters</b>(<i>logical_line, tokens</i>)
+<p>
+    Avoid extraneous whitespace in the following situations:
+</p><p>
+    - Immediately before the open parenthesis that starts the argument
+      list of a function call.
+</p><p>
+    - Immediately before the open parenthesis that starts an indexing or
+      slicing.
+</p><p>
+    Okay: spam(1)
+    E211: spam (1)
+</p><p>
+    Okay: dict['key'] = list[index]
+    E211: dict ['key'] = list[index]
+    E211: dict['key'] = list [index]
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html	Sun Jan 09 14:25:16 2011 +0100
+++ b/Documentation/Source/eric5.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html	Sun Jan 09 18:16:46 2011 +0100
@@ -79,7 +79,7 @@
 <td>Private slot to handle the "Show" button press.</td>
 </tr><tr>
 <td><a href="#SyntaxCheckerDialog.on_startButton_clicked">on_startButton_clicked</a></td>
-<td>Private slot to start a code metrics run.</td>
+<td>Private slot to start a syntax check run.</td>
 </tr><tr>
 <td><a href="#SyntaxCheckerDialog.prepare">prepare</a></td>
 <td>Public method to prepare the dialog with a list of filenames.</td>
@@ -129,7 +129,8 @@
 <h4>SyntaxCheckerDialog.__finish</h4>
 <b>__finish</b>(<i></i>)
 <p>
-        Private slot called when the syntax check finished or the user pressed the button.
+        Private slot called when the syntax check finished or the user
+        pressed the button.
 </p><a NAME="SyntaxCheckerDialog.__resort" ID="SyntaxCheckerDialog.__resort"></a>
 <h4>SyntaxCheckerDialog.__resort</h4>
 <b>__resort</b>(<i></i>)
@@ -167,7 +168,7 @@
 <h4>SyntaxCheckerDialog.on_startButton_clicked</h4>
 <b>on_startButton_clicked</b>(<i></i>)
 <p>
-        Private slot to start a code metrics run.
+        Private slot to start a syntax check run.
 </p><a NAME="SyntaxCheckerDialog.prepare" ID="SyntaxCheckerDialog.prepare"></a>
 <h4>SyntaxCheckerDialog.prepare</h4>
 <b>prepare</b>(<i>fileList, project</i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.PluginPep8Checker.html	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Plugins.PluginPep8Checker</title>
+<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.Plugins.PluginPep8Checker</h1>
+<p>
+Module implementing the PEP 8 Checker plugin.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>author</td></tr><tr><td>autoactivate</td></tr><tr><td>className</td></tr><tr><td>deactivateable</td></tr><tr><td>error</td></tr><tr><td>longDescription</td></tr><tr><td>name</td></tr><tr><td>packageName</td></tr><tr><td>pyqtApi</td></tr><tr><td>shortDescription</td></tr><tr><td>version</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Pep8CheckerPlugin">Pep8CheckerPlugin</a></td>
+<td>Class implementing the PEP 8 Checker plugin.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="Pep8CheckerPlugin" ID="Pep8CheckerPlugin"></a>
+<h2>Pep8CheckerPlugin</h2>
+<p>
+    Class implementing the PEP 8 Checker plugin.
+</p>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Pep8CheckerPlugin.__init__">Pep8CheckerPlugin</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__editorClosed">__editorClosed</a></td>
+<td>Private slot called, when an editor was closed.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__editorOpened">__editorOpened</a></td>
+<td>Private slot called, when a new editor was opened.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__editorPep8Check">__editorPep8Check</a></td>
+<td>Private slot to handle the PEP 8 check context menu action of the editors.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__editorShowMenu">__editorShowMenu</a></td>
+<td>Private slot called, when the the editor context menu or a submenu is about to be shown.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__initialize">__initialize</a></td>
+<td>Private slot to (re)initialize the plugin.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__projectBrowserPep8Check">__projectBrowserPep8Check</a></td>
+<td>Private method to handle the PEP 8 check context menu action of the project sources browser.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__projectBrowserShowMenu">__projectBrowserShowMenu</a></td>
+<td>Private slot called, when the the project browser menu or a submenu is about to be shown.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__projectPep8Check">__projectPep8Check</a></td>
+<td>Public slot used to check the project files for PEP 8 compliance.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.__projectShowMenu">__projectShowMenu</a></td>
+<td>Private slot called, when the the project menu or a submenu is about to be shown.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.activate">activate</a></td>
+<td>Public method to activate this plugin.</td>
+</tr><tr>
+<td><a href="#Pep8CheckerPlugin.deactivate">deactivate</a></td>
+<td>Public method to deactivate this plugin.</td>
+</tr>
+</table>
+<a NAME="Pep8CheckerPlugin.__init__" ID="Pep8CheckerPlugin.__init__"></a>
+<h4>Pep8CheckerPlugin (Constructor)</h4>
+<b>Pep8CheckerPlugin</b>(<i>ui</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>ui</i></dt>
+<dd>
+reference to the user interface object (UI.UserInterface)
+</dd>
+</dl><a NAME="Pep8CheckerPlugin.__editorClosed" ID="Pep8CheckerPlugin.__editorClosed"></a>
+<h4>Pep8CheckerPlugin.__editorClosed</h4>
+<b>__editorClosed</b>(<i>editor</i>)
+<p>
+        Private slot called, when an editor was closed.
+</p><dl>
+<dt><i>editor</i></dt>
+<dd>
+reference to the editor (QScintilla.Editor)
+</dd>
+</dl><a NAME="Pep8CheckerPlugin.__editorOpened" ID="Pep8CheckerPlugin.__editorOpened"></a>
+<h4>Pep8CheckerPlugin.__editorOpened</h4>
+<b>__editorOpened</b>(<i>editor</i>)
+<p>
+        Private slot called, when a new editor was opened.
+</p><dl>
+<dt><i>editor</i></dt>
+<dd>
+reference to the new editor (QScintilla.Editor)
+</dd>
+</dl><a NAME="Pep8CheckerPlugin.__editorPep8Check" ID="Pep8CheckerPlugin.__editorPep8Check"></a>
+<h4>Pep8CheckerPlugin.__editorPep8Check</h4>
+<b>__editorPep8Check</b>(<i></i>)
+<p>
+        Private slot to handle the PEP 8 check context menu action
+        of the editors.
+</p><a NAME="Pep8CheckerPlugin.__editorShowMenu" ID="Pep8CheckerPlugin.__editorShowMenu"></a>
+<h4>Pep8CheckerPlugin.__editorShowMenu</h4>
+<b>__editorShowMenu</b>(<i>menuName, menu, editor</i>)
+<p>
+        Private slot called, when the the editor context menu or a submenu is 
+        about to be shown.
+</p><dl>
+<dt><i>menuName</i></dt>
+<dd>
+name of the menu to be shown (string)
+</dd><dt><i>menu</i></dt>
+<dd>
+reference to the menu (QMenu)
+</dd><dt><i>editor</i></dt>
+<dd>
+reference to the editor
+</dd>
+</dl><a NAME="Pep8CheckerPlugin.__initialize" ID="Pep8CheckerPlugin.__initialize"></a>
+<h4>Pep8CheckerPlugin.__initialize</h4>
+<b>__initialize</b>(<i></i>)
+<p>
+        Private slot to (re)initialize the plugin.
+</p><a NAME="Pep8CheckerPlugin.__projectBrowserPep8Check" ID="Pep8CheckerPlugin.__projectBrowserPep8Check"></a>
+<h4>Pep8CheckerPlugin.__projectBrowserPep8Check</h4>
+<b>__projectBrowserPep8Check</b>(<i></i>)
+<p>
+        Private method to handle the PEP 8 check context menu action of
+        the project sources browser.
+</p><a NAME="Pep8CheckerPlugin.__projectBrowserShowMenu" ID="Pep8CheckerPlugin.__projectBrowserShowMenu"></a>
+<h4>Pep8CheckerPlugin.__projectBrowserShowMenu</h4>
+<b>__projectBrowserShowMenu</b>(<i>menuName, menu</i>)
+<p>
+        Private slot called, when the the project browser menu or a submenu is 
+        about to be shown.
+</p><dl>
+<dt><i>menuName</i></dt>
+<dd>
+name of the menu to be shown (string)
+</dd><dt><i>menu</i></dt>
+<dd>
+reference to the menu (QMenu)
+</dd>
+</dl><a NAME="Pep8CheckerPlugin.__projectPep8Check" ID="Pep8CheckerPlugin.__projectPep8Check"></a>
+<h4>Pep8CheckerPlugin.__projectPep8Check</h4>
+<b>__projectPep8Check</b>(<i></i>)
+<p>
+        Public slot used to check the project files for PEP 8 compliance.
+</p><a NAME="Pep8CheckerPlugin.__projectShowMenu" ID="Pep8CheckerPlugin.__projectShowMenu"></a>
+<h4>Pep8CheckerPlugin.__projectShowMenu</h4>
+<b>__projectShowMenu</b>(<i>menuName, menu</i>)
+<p>
+        Private slot called, when the the project menu or a submenu is 
+        about to be shown.
+</p><dl>
+<dt><i>menuName</i></dt>
+<dd>
+name of the menu to be shown (string)
+</dd><dt><i>menu</i></dt>
+<dd>
+reference to the menu (QMenu)
+</dd>
+</dl><a NAME="Pep8CheckerPlugin.activate" ID="Pep8CheckerPlugin.activate"></a>
+<h4>Pep8CheckerPlugin.activate</h4>
+<b>activate</b>(<i></i>)
+<p>
+        Public method to activate this plugin.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of None and activation status (boolean)
+</dd>
+</dl><a NAME="Pep8CheckerPlugin.deactivate" ID="Pep8CheckerPlugin.deactivate"></a>
+<h4>Pep8CheckerPlugin.deactivate</h4>
+<b>deactivate</b>(<i></i>)
+<p>
+        Public method to deactivate this plugin.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Plugins.PluginSyntaxChecker.html	Sun Jan 09 14:25:16 2011 +0100
+++ b/Documentation/Source/eric5.Plugins.PluginSyntaxChecker.html	Sun Jan 09 18:16:46 2011 +0100
@@ -22,7 +22,7 @@
 <body><a NAME="top" ID="top"></a>
 <h1>eric5.Plugins.PluginSyntaxChecker</h1>
 <p>
-Module implementing the Tabnanny plugin.
+Module implementing the Syntax Checker plugin.
 </p>
 <h3>Global Attributes</h3>
 <table>
@@ -82,7 +82,7 @@
 <td>Private slot called, when the the project menu or a submenu is about to be shown.</td>
 </tr><tr>
 <td><a href="#SyntaxCheckerPlugin.__projectSyntaxCheck">__projectSyntaxCheck</a></td>
-<td>Public slot used to check the project files for bad indentations.</td>
+<td>Public slot used to check the project files for syntax errors.</td>
 </tr><tr>
 <td><a href="#SyntaxCheckerPlugin.activate">activate</a></td>
 <td>Public method to activate this plugin.</td>
@@ -186,7 +186,7 @@
 <h4>SyntaxCheckerPlugin.__projectSyntaxCheck</h4>
 <b>__projectSyntaxCheck</b>(<i></i>)
 <p>
-        Public slot used to check the project files for bad indentations.
+        Public slot used to check the project files for syntax errors.
 </p><a NAME="SyntaxCheckerPlugin.activate" ID="SyntaxCheckerPlugin.activate"></a>
 <h4>SyntaxCheckerPlugin.activate</h4>
 <b>activate</b>(<i></i>)
--- a/Documentation/Source/eric5.QScintilla.Editor.html	Sun Jan 09 14:25:16 2011 +0100
+++ b/Documentation/Source/eric5.QScintilla.Editor.html	Sun Jan 09 18:16:46 2011 +0100
@@ -2602,13 +2602,16 @@
 </dd>
 </dl><a NAME="Editor.gotoLine" ID="Editor.gotoLine"></a>
 <h4>Editor.gotoLine</h4>
-<b>gotoLine</b>(<i>line</i>)
+<b>gotoLine</b>(<i>line, pos = 1</i>)
 <p>
         Public slot to jump to the beginning of a line.
 </p><dl>
 <dt><i>line</i></dt>
 <dd>
 line number to go to (integer)
+</dd><dt><i>pos=</i></dt>
+<dd>
+position in line to go to (integer)
 </dd>
 </dl><a NAME="Editor.gotoSyntaxError" ID="Editor.gotoSyntaxError"></a>
 <h4>Editor.gotoSyntaxError</h4>
@@ -3211,11 +3214,13 @@
 <b>toggleFlakesWarning</b>(<i>line, warning, msg = ""</i>)
 <p>
         Public method to toggle a flakes warning indicator.
+</p><p>
+        Note: This method is used to set PEP 8 warnings as well.
 </p><dl>
 <dt><i>line</i></dt>
 <dd>
 line number of the flakes warning
-</dd><dt><i>erwarningror</i></dt>
+</dd><dt><i>warning</i></dt>
 <dd>
 flag indicating if the warning marker should be
             set or deleted (boolean)
--- a/Documentation/Source/eric5.ViewManager.ViewManager.html	Sun Jan 09 14:25:16 2011 +0100
+++ b/Documentation/Source/eric5.ViewManager.ViewManager.html	Sun Jan 09 18:16:46 2011 +0100
@@ -2242,7 +2242,7 @@
 </dd>
 </dl><a NAME="ViewManager.openSourceFile" ID="ViewManager.openSourceFile"></a>
 <h4>ViewManager.openSourceFile</h4>
-<b>openSourceFile</b>(<i>fn, lineno = None, filetype = "", selStart = 0, selEnd = 0</i>)
+<b>openSourceFile</b>(<i>fn, lineno = None, filetype = "", selStart = 0, selEnd = 0, pos = 0</i>)
 <p>
         Public slot to display a file in an editor.
 </p><dl>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/index-eric5.Plugins.CheckerPlugins.Pep8.html	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Plugins.CheckerPlugins.Pep8</title>
+<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.Plugins.CheckerPlugins.Pep8</h1>
+<p>
+Package containing the PEP 8 plugin.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric5.Plugins.CheckerPlugins.Pep8.Pep8Checker.html">Pep8Checker</a></td>
+<td>Module implementing the PEP 8 checker.</td>
+</tr><tr>
+<td><a href="eric5.Plugins.CheckerPlugins.Pep8.Pep8CodeSelectionDialog.html">Pep8CodeSelectionDialog</a></td>
+<td>Module implementing a dialog to select PEP 8 message codes.</td>
+</tr><tr>
+<td><a href="eric5.Plugins.CheckerPlugins.Pep8.Pep8Dialog.html">Pep8Dialog</a></td>
+<td>Module implementing a dialog to show the results of the PEP 8 check.</td>
+</tr><tr>
+<td><a href="eric5.Plugins.CheckerPlugins.Pep8.pep8.html">pep8</a></td>
+<td></td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric5.Plugins.CheckerPlugins.html	Sun Jan 09 14:25:16 2011 +0100
+++ b/Documentation/Source/index-eric5.Plugins.CheckerPlugins.html	Sun Jan 09 18:16:46 2011 +0100
@@ -28,6 +28,9 @@
 <h3>Packages</h3>
 <table>
 <tr>
+<td><a href="index-eric5.Plugins.CheckerPlugins.Pep8.html">Pep8</a></td>
+<td>Package containing the PEP 8 plugin.</td>
+</tr><tr>
 <td><a href="index-eric5.Plugins.CheckerPlugins.SyntaxChecker.html">SyntaxChecker</a></td>
 <td>Package containing the Syntax Checker plugin.</td>
 </tr><tr>
--- a/Documentation/Source/index-eric5.Plugins.html	Sun Jan 09 14:25:16 2011 +0100
+++ b/Documentation/Source/index-eric5.Plugins.html	Sun Jan 09 18:16:46 2011 +0100
@@ -60,8 +60,11 @@
 <td><a href="eric5.Plugins.PluginEricdoc.html">PluginEricdoc</a></td>
 <td>Module implementing the Ericdoc plugin.</td>
 </tr><tr>
+<td><a href="eric5.Plugins.PluginPep8Checker.html">PluginPep8Checker</a></td>
+<td>Module implementing the PEP 8 Checker plugin.</td>
+</tr><tr>
 <td><a href="eric5.Plugins.PluginSyntaxChecker.html">PluginSyntaxChecker</a></td>
-<td>Module implementing the Tabnanny plugin.</td>
+<td>Module implementing the Syntax Checker plugin.</td>
 </tr><tr>
 <td><a href="eric5.Plugins.PluginTabnanny.html">PluginTabnanny</a></td>
 <td>Module implementing the Tabnanny plugin.</td>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/Pep8/Pep8Checker.py	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the PEP 8 checker.
+"""
+
+import optparse
+
+from . import pep8
+
+
+class Pep8Checker(pep8.Checker):
+    """
+    Class implementing the PEP 8 checker.
+    """
+    def __init__(self, filename, lines, repeat=False,
+                 select="", ignore=""):
+        """
+        Constructor
+        
+        @param filename name of the file to check (string)
+        @param lines source of the file (list of strings)
+        @keyparam repeat flag indicating to repeat message categories (boolean)
+        @keyparam select list of message IDs to check for
+            (comma separated string)
+        @keyparam ignore list of message IDs to ignore
+            (comma separated string)
+        """
+        pep8.options = optparse.Values()
+        
+        pep8.options.verbose = 0
+        
+        pep8.options.repeat = repeat
+        if select:
+            pep8.options.select = [s.strip() for s in select.split(',')
+                                   if s.strip()]
+        else:
+            pep8.options.select = []
+        if ignore:
+            pep8.options.ignore = [i.strip() for i in ignore.split(',')
+                                   if i.strip()]
+        else:
+            pep8.options.ignore = []
+        pep8.options.physical_checks = pep8.find_checks('physical_line')
+        pep8.options.logical_checks = pep8.find_checks('logical_line')
+        pep8.options.counters = dict.fromkeys(pep8.BENCHMARK_KEYS, 0)
+        pep8.options.messages = {}
+        
+        pep8.Checker.__init__(self, filename, lines)
+        
+        self.messages = []
+    
+    def __ignore_code(self, code):
+        """
+        Private method to check, if the message for the given code should
+        be ignored.
+        
+        If codes are selected and the code has a selected prefix and does not
+        have an ignored prefix, it is not ignored. If codes are selected and
+        the code does not have a selected prefix, it is ignored. If no codes
+        are selected, the code is ignored, if it has a prefix, that is
+        contained in the ignored codes.
+        
+        @param code code to be checked (string)
+        @return flag indicating, that the code should be ignored (boolean)
+        """
+        if pep8.options.select:
+            if code.startswith(tuple(pep8.options.select)):
+                if code.startswith(tuple(pep8.options.ignore)):
+                    return True
+                else:
+                    return False
+            else:
+                return True
+        else:
+            if code.startswith(tuple(pep8.options.ignore)):
+                return True
+            else:
+                return False
+    
+    def report_error_args(self, line_number, offset, code, check, *args):
+        """
+        Public method to collect the error messages.
+        
+        @param line_number line number of the issue (integer)
+        @param offset position within line of the issue (integer)
+        @param code message code (string)
+        @param check reference to the checker function (function)
+        @param args arguments for the message (list)
+        """
+        if self.__ignore_code(code):
+            return
+        
+        text = pep8.getMessage(code, *args)
+        if code in pep8.options.counters:
+            pep8.options.counters[code] += 1
+        else:
+            pep8.options.counters[code] = 1
+            pep8.options.messages[code] = text[5:]
+        self.file_errors += 1
+        if pep8.options.counters[code] == 1 or pep8.options.repeat:
+            self.messages.append(
+                (self.filename, self.line_offset + line_number,
+                 offset + 1, text)
+            )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.py	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to select PEP 8 message codes.
+"""
+
+from PyQt4.QtCore import QCoreApplication
+from PyQt4.QtGui import QDialog, QTreeWidgetItem
+
+from . import pep8
+
+from .Ui_Pep8CodeSelectionDialog import Ui_Pep8CodeSelectionDialog
+
+class Pep8CodeSelectionDialog(QDialog, Ui_Pep8CodeSelectionDialog):
+    """
+    Class implementing a dialog to select PEP 8 message codes.
+    """
+    def __init__(self, codes, parent = None):
+        """
+        Constructor
+        
+        @param codes comma separated list of selected codes (string)
+        @param parent reference to the parent widget (QWidget)
+        """
+        QDialog.__init__(self, parent)
+        self.setupUi(self)
+        
+        codeList = [code.strip() for code in codes.split(",") if code.strip()]
+        
+        for code in sorted(pep8.pep8_messages.keys(), key=lambda a: a[1:]):
+            if code in pep8.pep8_messages_sample_args:
+                message = QCoreApplication.translate("pep8", 
+                    pep8.pep8_messages[code]).format(
+                        *pep8.pep8_messages_sample_args[code])
+            else:
+                message = QCoreApplication.translate("pep8", 
+                    pep8.pep8_messages[code])
+            itm = QTreeWidgetItem(self.codeTable, [code, message])
+            if code in codeList:
+                itm.setSelected(True)
+                codeList.remove(code)
+        
+        self.__extraCodes = codeList[:]
+    
+    def getSelectedCodes(self):
+        """
+        Public method to get a comma separated list of codes selected.
+        
+        @return comma separated list of selected codes (string)
+        """
+        selectedCodes = []
+        
+        for itm in self.codeTable.selectedItems():
+            selectedCodes.append(itm.text(0))
+        
+        return ", ".join(self.__extraCodes + selectedCodes)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Pep8CodeSelectionDialog</class>
+ <widget class="QDialog" name="Pep8CodeSelectionDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>450</width>
+    <height>350</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>PEP 8 Message Codes</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Select the message codes from the list:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTreeWidget" name="codeTable">
+     <property name="toolTip">
+      <string>Select the message codes from this table</string>
+     </property>
+     <property name="editTriggers">
+      <set>QAbstractItemView::NoEditTriggers</set>
+     </property>
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::ExtendedSelection</enum>
+     </property>
+     <property name="selectionBehavior">
+      <enum>QAbstractItemView::SelectRows</enum>
+     </property>
+     <property name="rootIsDecorated">
+      <bool>false</bool>
+     </property>
+     <property name="allColumnsShowFocus">
+      <bool>true</bool>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+     <column>
+      <property name="text">
+       <string>Code</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Message</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>codeTable</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>Pep8CodeSelectionDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>227</x>
+     <y>279</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>Pep8CodeSelectionDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>295</x>
+     <y>285</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/Pep8/Pep8Dialog.py	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,449 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to show the results of the PEP 8 check.
+"""
+
+import os
+import fnmatch
+
+from PyQt4.QtCore import pyqtSlot, Qt
+from PyQt4.QtGui import QDialog, QTreeWidgetItem, QAbstractButton, \
+    QDialogButtonBox, QApplication, QHeaderView
+
+from . import pep8
+
+from E5Gui.E5Application import e5App
+
+from .Pep8Checker import Pep8Checker
+from .Pep8CodeSelectionDialog import Pep8CodeSelectionDialog
+
+from .Ui_Pep8Dialog import Ui_Pep8Dialog
+
+import UI.PixmapCache
+import Preferences
+import Utilities
+
+class Pep8Dialog(QDialog, Ui_Pep8Dialog):
+    """
+    Class implementing a dialog to show the results of the PEP 8 check.
+    """
+    filenameRole = Qt.UserRole + 1
+    lineRole     = Qt.UserRole + 2
+    positionRole = Qt.UserRole + 3
+    messageRole  = Qt.UserRole + 4
+    
+    settingsKey = "PEP8/"
+    
+    def __init__(self, parent = None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        QDialog.__init__(self, parent)
+        self.setupUi(self)
+        
+        self.showButton = self.buttonBox.addButton(
+            self.trUtf8("Show"), QDialogButtonBox.ActionRole)
+        self.showButton.setToolTip(
+            self.trUtf8("Press to show all files containing an issue"))
+        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
+        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
+        
+        self.resultList.headerItem().setText(self.resultList.columnCount(), "")
+        self.resultList.header().setSortIndicator(0, Qt.AscendingOrder)
+        
+        self.noResults = True
+        self.cancelled = False
+        self.__lastFileItem = None
+        
+        self.__fileOrFileList = ""
+        self.__project = None
+        self.__forProject = False
+        self.__data = {}
+        
+        self.clearButton.setIcon(
+            UI.PixmapCache.getIcon("clearLeft.png"))
+        self.clearButtonExcludeMessages.setIcon(
+            UI.PixmapCache.getIcon("clearLeft.png"))
+        self.clearButtonIncludeMessages.setIcon(
+            UI.PixmapCache.getIcon("clearLeft.png"))
+        self.on_loadDefaultButton_clicked()
+    
+    def __resort(self):
+        """
+        Private method to resort the tree.
+        """
+        self.resultList.sortItems(self.resultList.sortColumn(), 
+                                  self.resultList.header().sortIndicatorOrder()
+                                 )
+    
+    def __createResultItem(self, file, line, pos, message):
+        """
+        Private method to create an entry in the result list.
+        
+        @param file file name of the file (string)
+        @param line line number of issue (integer or string)
+        @param pos character position of issue (integer or string)
+        @param message message text (string)
+        """
+        if self.__lastFileItem is None:
+            # It's a new file
+            self.__lastFileItem = QTreeWidgetItem(self.resultList, [file])
+            self.__lastFileItem.setFirstColumnSpanned(True)
+            self.__lastFileItem.setExpanded(True)
+            self.__lastFileItem.setData(0, self.filenameRole, file)
+        
+        code, message = message.split(None, 1)
+        itm = QTreeWidgetItem(self.__lastFileItem, 
+            ["{0:6}".format(line), code, message])
+        if code.startswith("W"):
+            itm.setIcon(0, UI.PixmapCache.getIcon("warning.png"))
+        else:
+            itm.setIcon(0, UI.PixmapCache.getIcon("syntaxError.png"))
+        itm.setData(0, self.filenameRole, file)
+        itm.setData(0, self.lineRole, int(line))
+        itm.setData(0, self.positionRole, int(pos))
+        itm.setData(0, self.messageRole, message)
+    
+    def prepare(self, fileList, project):
+        """
+        Public method to prepare the dialog with a list of filenames.
+        
+        @param fileList list of filenames (list of strings)
+        @param project reference to the project object (Project)
+        """
+        self.__fileOrFileList = fileList[:]
+        self.__project = project
+        self.__forProject = True
+        
+        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
+        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
+        self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
+        
+        self.__data = self.__project.getData("CHECKERSPARMS", "Pep8Checker")
+        if self.__data is None or "ExcludeFiles" not in self.__data:
+            # initialize the data structure
+            self.__data = {
+                "ExcludeFiles" : "", 
+                "ExcludeMessages" : pep8.DEFAULT_IGNORE, 
+                "IncludeMessages" : "", 
+                "RepeatMessages" : False, 
+            }
+        self.excludeFilesEdit.setText(self.__data["ExcludeFiles"])
+        self.excludeMessagesEdit.setText(self.__data["ExcludeMessages"])
+        self.includeMessagesEdit.setText(self.__data["IncludeMessages"])
+        self.repeatCheckBox.setChecked(self.__data["RepeatMessages"])
+    
+    def start(self, fn, codestring = "", save = False, repeat = None):
+        """
+        Public slot to start the PEP 8 check.
+        
+        @param fn file or list of files or directory to be checked
+                (string or list of strings)
+        @keyparam codestring string containing the code to be checked (string).
+            If this is given, file must be a single file name.
+        @keyparam save flag indicating to save the given 
+            file/file list/directory (boolean)
+        @keyparam repeat state of the repeat check box if it is not None
+            (None or boolean)
+        """
+        if self.__project is None:
+            self.__project = e5App().getObject("Project")
+        
+        self.cancelled = False
+        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
+        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True)
+        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
+        if repeat is not None:
+            self.repeatCheckBox.setChecked(repeat)
+        QApplication.processEvents()
+        
+        if save:
+            self.__fileOrFileList = fn
+        
+        if isinstance(fn, list):
+            files = fn[:]
+        elif os.path.isdir(fn):
+            files = []
+            for ext in Preferences.getPython("Python3Extensions"):
+                files.extend(
+                    Utilities.direntries(fn, 1, '*{0}'.format(ext), 0))
+##            for ext in Preferences.getPython("PythonExtensions"):
+##                files.extend(
+##                    Utilities.direntries(fn, 1, '*{0}'.format(ext), 0))
+        else:
+            files = [fn]
+        
+        # filter the list depending on the filter string
+        if files:
+            filterString = self.excludeFilesEdit.text()
+            filterList = [f.strip() for f in filterString.split(",") 
+                          if f.strip()]
+            for filter in filterList:
+                files = \
+                    [f for f in files 
+                     if not fnmatch.fnmatch(f, filter.strip())]
+        
+        py3files = [f for f in files \
+                    if f.endswith(
+                        tuple(Preferences.getPython("Python3Extensions")))]
+        py2files = []
+##        py2files = [f for f in files \
+##                    if f.endswith(
+##                        tuple(Preferences.getPython("PythonExtensions")))]
+        
+        if (codestring and len(py3files) == 1) or \
+           (codestring and len(py2files) == 1) or \
+           (not codestring and len(py3files) + len(py2files) > 0):
+            self.checkProgress.setMaximum(len(py3files) + len(py2files))
+            QApplication.processEvents()
+            
+            # extract the configuration values
+            excludeMessages = self.excludeMessagesEdit.text()
+            includeMessages = self.includeMessagesEdit.text()
+            repeatMessages = self.repeatCheckBox.isChecked()
+            
+            # now go through all the files
+            progress = 0
+            for file in py3files + py2files:
+                self.checkProgress.setValue(progress)
+                QApplication.processEvents()
+                self.__resort()
+                
+                if self.cancelled:
+                    return
+                
+                self.__lastFileItem = None
+                
+                if codestring:
+                    source = codestring.splitlines(True)
+                else:
+                    try:
+                        source = Utilities.readEncodedFile(file)[0]
+                        # convert eols
+                        source = Utilities.convertLineEnds(source, "\n")
+                        source = source.splitlines(True)
+                    except (UnicodeError, IOError) as msg:
+                        self.noResults = False
+                        self.__createResultItem(file, "1", "1", 
+                            self.trUtf8("Error: {0}").format(str(msg))\
+                                .rstrip()[1:-1])
+                        progress += 1
+                        continue
+                
+                flags = Utilities.extractFlags(source)
+                ext = os.path.splitext(file)[1]
+                if ("FileType" in flags and 
+                    flags["FileType"] in ["Python", "Python2"]) or \
+                   file in py2files or \
+                   (ext in [".py", ".pyw"] and \
+                    Preferences.getProject("DeterminePyFromProject") and \
+                    self.__project.isOpen() and \
+                    self.__project.isProjectFile(file) and \
+                    self.__project.getProjectLanguage() in ["Python", 
+                                                            "Python2"]):
+                    # TODO: include PEP 8 check for python 2
+                    pass
+                else:
+                    checker = Pep8Checker(file, source, 
+                        repeat = repeatMessages, 
+                        select = includeMessages,
+                        ignore = excludeMessages)
+                    checker.check_all()
+                    checker.messages.sort(key = lambda a: a[1])
+                    for message in checker.messages:
+                        fname, lineno, position, text = message
+                        if not source[lineno - 1].strip()\
+                           .endswith("__IGNORE_WARNING__"):
+                            self.noResults = False
+                            self.__createResultItem(
+                                fname, lineno, position, text)
+                progress += 1
+            self.checkProgress.setValue(progress)
+            QApplication.processEvents()
+            self.__resort()
+        else:
+            self.checkProgress.setMaximum(1)
+            self.checkProgress.setValue(1)
+        self.__finish()
+    
+    def __finish(self):
+        """
+        Private slot called when the PEP 8 check finished or the user
+        pressed the cancel button.
+        """
+        self.cancelled = True
+        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
+        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
+        self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
+        
+        if self.noResults:
+            QTreeWidgetItem(self.resultList, [self.trUtf8('No issues found.')])
+            QApplication.processEvents()
+            self.showButton.setEnabled(False)
+            self.__clearErrors()
+        else:
+            self.showButton.setEnabled(True)
+        self.resultList.header().resizeSections(QHeaderView.ResizeToContents)
+        self.resultList.header().setStretchLastSection(True)
+    
+    @pyqtSlot()
+    def on_startButton_clicked(self):
+        """
+        Private slot to start a PEP 8 check run.
+        """
+        if self.__forProject:
+            data = {
+                "ExcludeFiles" : self.excludeFilesEdit.text(), 
+                "ExcludeMessages" : self.excludeMessagesEdit.text(), 
+                "IncludeMessages" : self.includeMessagesEdit.text(), 
+                "RepeatMessages" : self.repeatCheckBox.isChecked(),
+            }
+            if data != self.__data:
+                self.__data = data
+                self.__project.setData("CHECKERSPARMS", "Pep8Checker", 
+                                       self.__data)
+        
+        self.resultList.clear()
+        self.noResults = True
+        self.cancelled = False
+        self.start(self.__fileOrFileList)
+    
+    @pyqtSlot()
+    def on_excludeMessagesSelectButton_clicked(self):
+        """
+        Private slot to select the message codes to be excluded via a
+        selection dialog.
+        """
+        dlg = Pep8CodeSelectionDialog(self.excludeMessagesEdit.text(), self)
+        if dlg.exec_() == QDialog.Accepted:
+            self.excludeMessagesEdit.setText(dlg.getSelectedCodes())
+    
+    @pyqtSlot()
+    def on_includeMessagesSelectButton_clicked(self):
+        """
+        Private slot to select the message codes to be included via a
+        selection dialog.
+        """
+        dlg = Pep8CodeSelectionDialog(self.includeMessagesEdit.text(), self)
+        if dlg.exec_() == QDialog.Accepted:
+            self.includeMessagesEdit.setText(dlg.getSelectedCodes())
+    
+    @pyqtSlot(QTreeWidgetItem, int)
+    def on_resultList_itemActivated(self, item, column):
+        """
+        Private slot to handle the activation of an item. 
+        
+        @param item reference to the activated item (QTreeWidgetItem)
+        @param column column the item was activated in (integer)
+        """
+        if self.noResults:
+            return
+        
+        if item.parent():
+            fn = Utilities.normabspath(item.data(0, self.filenameRole))
+            lineno = item.data(0, self.lineRole)
+            position = item.data(0, self.positionRole)
+            message = item.data(0, self.messageRole)
+            
+            vm = e5App().getObject("ViewManager")
+            vm.openSourceFile(fn, lineno = lineno, pos = position)
+            editor = vm.getOpenEditor(fn)
+            
+            editor.toggleFlakesWarning(lineno, True, message)
+    
+    @pyqtSlot()
+    def on_showButton_clicked(self):
+        """
+        Private slot to handle the "Show" button press.
+        """
+        vm = e5App().getObject("ViewManager")
+        
+        selectedIndexes = []
+        for index in range(self.resultList.topLevelItemCount()):
+            if self.resultList.topLevelItem(index).isSelected():
+                selectedIndexes.append(index)
+        if len(selectedIndexes) == 0:
+            selectedIndexes = list(range(self.resultList.topLevelItemCount()))
+        for index in selectedIndexes:
+            itm = self.resultList.topLevelItem(index)
+            fn = Utilities.normabspath(itm.data(0, self.filenameRole))
+            vm.openSourceFile(fn, 1)
+            editor = vm.getOpenEditor(fn)
+            editor.clearFlakesWarnings()
+            for cindex in range(itm.childCount()):
+                citm = itm.child(cindex)
+                lineno = citm.data(0, self.lineRole)
+                message = citm.data(0, self.messageRole)
+                editor.toggleFlakesWarning(lineno, True, message)
+        
+        # go through the list again to clear warning markers for files,
+        # that are ok
+        openFiles = vm.getOpenFilenames()
+        errorFiles = []
+        for index in range(self.resultList.topLevelItemCount()):
+            itm = self.resultList.topLevelItem(index)
+            errorFiles.append(
+                Utilities.normabspath(itm.data(0, self.filenameRole)))
+        for file in openFiles:
+            if not file in errorFiles:
+                editor = vm.getOpenEditor(file)
+                editor.clearFlakesWarnings()
+    
+    @pyqtSlot()
+    def on_loadDefaultButton_clicked(self):
+        """
+        Private slot to load the default configuration values.
+        """
+        self.excludeFilesEdit.setText(Preferences.Prefs.settings.value(
+            "PEP8/ExcludeFilePatterns"))
+        self.excludeMessagesEdit.setText(Preferences.Prefs.settings.value(
+            "PEP8/ExcludeMessages", pep8.DEFAULT_IGNORE))
+        self.includeMessagesEdit.setText(Preferences.Prefs.settings.value(
+            "PEP8/IncludeMessages"))
+##        self.repeatCheckBox.setChecked(Preferences.toBool(
+##            Preferences.Prefs.settings.value("PEP8/RepeatMessages")))
+    
+    @pyqtSlot()
+    def on_storeDefaultButton_clicked(self):
+        """
+        Private slot to store the current configuration values as
+        default values.
+        """
+        Preferences.Prefs.settings.setValue("PEP8/ExcludeFilePatterns",
+            self.excludeFilesEdit.text())
+        Preferences.Prefs.settings.setValue("PEP8/ExcludeMessages",
+            self.excludeMessagesEdit.text())
+        Preferences.Prefs.settings.setValue("PEP8/IncludeMessages",
+            self.includeMessagesEdit.text())
+##        Preferences.Prefs.settings.setValue("PEP8/RepeatMessages",
+##            self.repeatCheckBox.isChecked())
+    
+    @pyqtSlot(QAbstractButton)
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot called by a button of the button box clicked.
+        
+        @param button button that was clicked (QAbstractButton)
+        """
+        if button == self.buttonBox.button(QDialogButtonBox.Close):
+            self.close()
+        elif button == self.buttonBox.button(QDialogButtonBox.Cancel):
+            self.__finish()
+        elif button == self.showButton:
+            self.on_showButton_clicked()
+    
+    def __clearErrors(self):
+        """
+        Private method to clear all warning markers of open editors.
+        """
+        vm = e5App().getObject("ViewManager")
+        openFiles = vm.getOpenFilenames()
+        for file in openFiles:
+            editor = vm.getOpenEditor(file)
+            editor.clearFlakesWarnings()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Pep8Dialog</class>
+ <widget class="QDialog" name="Pep8Dialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>650</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>PEP 8 Check Result</string>
+  </property>
+  <property name="whatsThis">
+   <string>&lt;b&gt;PEP 8 Check Results&lt;/b&gt;
+&lt;p&gt;This dialog shows the results of the PEP 8 check. Double clicking an
+entry will open an editor window and position the cursor at the respective line and position.&lt;/p&gt;</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QFrame" name="filterFrame">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Exclude Files:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="excludeFilesEdit">
+        <property name="toolTip">
+         <string>Enter filename patterns of files to be excluded separated by a comma</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QToolButton" name="clearButton">
+        <property name="toolTip">
+         <string>Press to clear the filter edit</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="4" rowspan="4">
+       <widget class="Line" name="line">
+        <property name="lineWidth">
+         <number>2</number>
+        </property>
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="5" colspan="2">
+       <widget class="QPushButton" name="startButton">
+        <property name="toolTip">
+         <string>Press to start the PEP 8 check run</string>
+        </property>
+        <property name="text">
+         <string>Start</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Exclude Messages:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="excludeMessagesEdit">
+        <property name="toolTip">
+         <string>Enter message codes or categories to be excluded separated by a comma</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QToolButton" name="clearButtonExcludeMessages">
+        <property name="toolTip">
+         <string>Press to clear the exclude messages edit</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QToolButton" name="excludeMessagesSelectButton">
+        <property name="toolTip">
+         <string>Press to select the messages from a list</string>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="6" rowspan="3">
+       <spacer name="verticalSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>80</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Included Messages:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QLineEdit" name="includeMessagesEdit">
+        <property name="toolTip">
+         <string>Enter message codes or categories to be included separated by a comma</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <widget class="QToolButton" name="clearButtonIncludeMessages">
+        <property name="toolTip">
+         <string>Press to clear the include messages edit</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3">
+       <widget class="QToolButton" name="includeMessagesSelectButton">
+        <property name="toolTip">
+         <string>Press to select the messages from a list</string>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0" colspan="4">
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QCheckBox" name="repeatCheckBox">
+          <property name="toolTip">
+           <string>Select to repeat each message type</string>
+          </property>
+          <property name="text">
+           <string>Repeat messages</string>
+          </property>
+         </widget>
+        </item>
+        <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>
+         <widget class="QPushButton" name="loadDefaultButton">
+          <property name="toolTip">
+           <string>Press to load the default values</string>
+          </property>
+          <property name="text">
+           <string>Load Defaults</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QPushButton" name="storeDefaultButton">
+          <property name="toolTip">
+           <string>Press to store the current values as defaults</string>
+          </property>
+          <property name="text">
+           <string>Store Defaults</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTreeWidget" name="resultList">
+     <property name="whatsThis">
+      <string>&lt;b&gt;Result List&lt;/b&gt;
+&lt;p&gt;This list shows the results of the PEP 8 check. Double clicking
+an entry will open this entry in an editor window and position the cursor at
+the respective line and position.&lt;/p&gt;</string>
+     </property>
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::ExtendedSelection</enum>
+     </property>
+     <property name="sortingEnabled">
+      <bool>true</bool>
+     </property>
+     <column>
+      <property name="text">
+       <string>File/Line</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Code</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Message</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item>
+    <widget class="QProgressBar" name="checkProgress">
+     <property name="toolTip">
+      <string>Shows the progress of the PEP 8 check action</string>
+     </property>
+     <property name="value">
+      <number>0</number>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="6"/>
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>startButton</tabstop>
+  <tabstop>excludeFilesEdit</tabstop>
+  <tabstop>clearButton</tabstop>
+  <tabstop>excludeMessagesEdit</tabstop>
+  <tabstop>clearButtonExcludeMessages</tabstop>
+  <tabstop>excludeMessagesSelectButton</tabstop>
+  <tabstop>includeMessagesEdit</tabstop>
+  <tabstop>clearButtonIncludeMessages</tabstop>
+  <tabstop>includeMessagesSelectButton</tabstop>
+  <tabstop>repeatCheckBox</tabstop>
+  <tabstop>loadDefaultButton</tabstop>
+  <tabstop>storeDefaultButton</tabstop>
+  <tabstop>resultList</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>clearButton</sender>
+   <signal>clicked()</signal>
+   <receiver>excludeFilesEdit</receiver>
+   <slot>clear()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>505</x>
+     <y>40</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>472</x>
+     <y>39</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>clearButtonExcludeMessages</sender>
+   <signal>clicked()</signal>
+   <receiver>excludeMessagesEdit</receiver>
+   <slot>clear()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>491</x>
+     <y>66</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>444</x>
+     <y>63</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>clearButtonIncludeMessages</sender>
+   <signal>clicked()</signal>
+   <receiver>includeMessagesEdit</receiver>
+   <slot>clear()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>494</x>
+     <y>100</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>458</x>
+     <y>95</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/Pep8/__init__.py	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package containing the PEP 8 plugin.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/Pep8/pep8.py	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,1480 @@
+# -*- coding: utf-8 -*-
+
+#
+# pep8.py - Check Python source code formatting, according to PEP 8
+# Copyright (C) 2006 Johann C. Rocholl <johann@rocholl.net>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+"""
+Check Python source code formatting, according to PEP 8:
+http://www.python.org/dev/peps/pep-0008/
+
+For usage and a list of options, try this:
+$ python pep8.py -h
+
+This program and its regression test suite live here:
+http://github.com/jcrocholl/pep8
+
+Groups of errors and warnings:
+E errors
+W warnings
+100 indentation
+200 whitespace
+300 blank lines
+400 imports
+500 line length
+600 deprecation
+700 statements
+
+You can add checks to this program by writing plugins. Each plugin is
+a simple function that is called for each line of source code, either
+physical or logical.
+
+Physical line:
+- Raw line of text from the input file.
+
+Logical line:
+- Multi-line statements converted to a single line.
+- Stripped left and right.
+- Contents of strings replaced with 'xxx' of same length.
+- Comments removed.
+
+The check function requests physical or logical lines by the name of
+the first argument:
+
+def maximum_line_length(physical_line)
+def extraneous_whitespace(logical_line)
+def blank_lines(logical_line, blank_lines, indent_level, line_number)
+
+The last example above demonstrates how check plugins can request
+additional information with extra arguments. All attributes of the
+Checker object are available. Some examples:
+
+lines: a list of the raw lines from the input file
+tokens: the tokens that contribute to this logical line
+line_number: line number in the input file
+blank_lines: blank lines before this one
+indent_char: first indentation character in this file (' ' or '\t')
+indent_level: indentation (with tabs expanded to multiples of 8)
+previous_indent_level: indentation on previous line
+previous_logical: previous logical line
+
+The docstring of each check function shall be the relevant part of
+text from PEP 8. It is printed if the user enables --show-pep8.
+Several docstrings contain examples directly from the PEP 8 document.
+
+Okay: spam(ham[1], {eggs: 2})
+E201: spam( ham[1], {eggs: 2})
+
+These examples are verified automatically when pep8.py is run with the
+--doctest option. You can add examples for your own check functions.
+The format is simple: "Okay" or error/warning code followed by colon
+and space, the rest of the line is example source code. If you put 'r'
+before the docstring, you can use \n for newline, \t for tab and \s
+for space.
+
+"""
+
+#
+# This is a modified version to make the original tabnanny better suitable
+# for being called from within the eric5 IDE. The modifications are as
+# follows:
+#
+# - made messages translatable via Qt
+#
+# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+__version__ = '0.6.1'
+
+import os
+import sys
+import re
+import time
+import inspect
+import keyword
+import tokenize
+from optparse import OptionParser
+from fnmatch import fnmatch
+try:
+    frozenset
+except NameError:
+    from sets import ImmutableSet as frozenset
+
+from PyQt4.QtCore import QCoreApplication, QT_TRANSLATE_NOOP
+
+DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git'
+DEFAULT_IGNORE = 'E24'
+MAX_LINE_LENGTH = 79
+
+INDENT_REGEX = re.compile(r'([ \t]*)')
+RAISE_COMMA_REGEX = re.compile(r'raise\s+\w+\s*(,)')
+SELFTEST_REGEX = re.compile(r'(Okay|[EW]\d{3}):\s(.*)')
+ERRORCODE_REGEX = re.compile(r'[EW]\d{3}')
+DOCSTRING_REGEX = re.compile(r'u?r?["\']')
+WHITESPACE_AROUND_OPERATOR_REGEX = \
+    re.compile('([^\w\s]*)\s*(\t|  )\s*([^\w\s]*)')
+EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[[({] | []}),;:]')
+WHITESPACE_AROUND_NAMED_PARAMETER_REGEX = \
+    re.compile(r'[()]|\s=[^=]|[^=!<>]=\s')
+
+
+WHITESPACE = ' \t'
+
+BINARY_OPERATORS = frozenset(['**=', '*=', '+=', '-=', '!=', '<>',
+    '%=', '^=', '&=', '|=', '==', '/=', '//=', '<=', '>=', '<<=', '>>=',
+    '%',  '^',  '&',  '|',  '=',  '/',  '//',  '<',  '>',  '<<'])
+UNARY_OPERATORS = frozenset(['>>', '**', '*', '+', '-'])
+OPERATORS = BINARY_OPERATORS | UNARY_OPERATORS
+SKIP_TOKENS = frozenset([tokenize.COMMENT, tokenize.NL, tokenize.INDENT,
+                         tokenize.DEDENT, tokenize.NEWLINE])
+E225NOT_KEYWORDS = (frozenset(keyword.kwlist + ['print']) -
+                    frozenset(['False', 'None', 'True']))
+BENCHMARK_KEYS = ('directories', 'files', 'logical lines', 'physical lines')
+
+options = None
+args = None
+
+
+##############################################################################
+# Helper functions for translated and formatted messages
+##############################################################################
+
+
+pep8_messages = {
+    "E101" : QT_TRANSLATE_NOOP("pep8",
+        "indentation contains mixed spaces and tabs"),
+    "E111" : QT_TRANSLATE_NOOP("pep8",
+        "indentation is not a multiple of four"),
+    "E112" : QT_TRANSLATE_NOOP("pep8",
+        "expected an indented block"),
+    "E113" : QT_TRANSLATE_NOOP("pep8",
+        "unexpected indentation"),
+    "W191" : QT_TRANSLATE_NOOP("pep8",
+        "indentation contains tabs"),
+    "E201" : QT_TRANSLATE_NOOP("pep8",
+        "whitespace after '{0}'"),
+    "E202" : QT_TRANSLATE_NOOP("pep8",
+        "whitespace before '{0}'"),
+    "E203" : QT_TRANSLATE_NOOP("pep8",
+        "whitespace before '{0}'"),
+    "E211" : QT_TRANSLATE_NOOP("pep8",
+        "whitespace before '{0}'"),
+    "E221" : QT_TRANSLATE_NOOP("pep8",
+        "multiple spaces before operator"),
+    "E222" : QT_TRANSLATE_NOOP("pep8",
+        "multiple spaces after operator"),
+    "E223" : QT_TRANSLATE_NOOP("pep8",
+        "tab before operator"),
+    "E224" : QT_TRANSLATE_NOOP("pep8",
+        "tab after operator"),
+    "E225" : QT_TRANSLATE_NOOP("pep8",
+        "missing whitespace around operator"),
+    "E231" : QT_TRANSLATE_NOOP("pep8",
+        "missing whitespace after '{0}'"),
+    "E241" : QT_TRANSLATE_NOOP("pep8",
+        "multiple spaces after '{0}'"),
+    "E242" : QT_TRANSLATE_NOOP("pep8",
+        "tab after '{0}'"),
+    "E251" : QT_TRANSLATE_NOOP("pep8",
+        "no spaces around keyword / parameter equals"),
+    "E261" : QT_TRANSLATE_NOOP("pep8",
+        "at least two spaces before inline comment"),
+    "E262" : QT_TRANSLATE_NOOP("pep8",
+        "inline comment should start with '# '"),
+    "W291" : QT_TRANSLATE_NOOP("pep8",
+        "trailing whitespace"),
+    "W292" : QT_TRANSLATE_NOOP("pep8",
+        "no newline at end of file"),
+    "W293" : QT_TRANSLATE_NOOP("pep8",
+        "blank line contains whitespace"),
+    "E301" : QT_TRANSLATE_NOOP("pep8",
+        "expected 1 blank line, found 0"),
+    "E302" : QT_TRANSLATE_NOOP("pep8",
+        "expected 2 blank lines, found {0}"),
+    "E303" : QT_TRANSLATE_NOOP("pep8",
+        "too many blank lines ({0})"),
+    "E304" : QT_TRANSLATE_NOOP("pep8",
+        "blank lines found after function decorator"),
+    "W391" : QT_TRANSLATE_NOOP("pep8",
+        "blank line at end of file"),
+    "E401" : QT_TRANSLATE_NOOP("pep8",
+        "multiple imports on one line"),
+    "E501" : QT_TRANSLATE_NOOP("pep8",
+        "line too long ({0} characters)"),
+    "W601" : QT_TRANSLATE_NOOP("pep8",
+        ".has_key() is deprecated, use 'in'"),
+    "W602" : QT_TRANSLATE_NOOP("pep8",
+        "deprecated form of raising exception"),
+    "W603" : QT_TRANSLATE_NOOP("pep8",
+        "'<>' is deprecated, use '!='"),
+    "W604" : QT_TRANSLATE_NOOP("pep8",
+        "backticks are deprecated, use 'repr()'"),
+    "E701" : QT_TRANSLATE_NOOP("pep8",
+        "multiple statements on one line (colon)"),
+    "E702" : QT_TRANSLATE_NOOP("pep8",
+        "multiple statements on one line (semicolon)"),
+}
+
+pep8_messages_sample_args = {
+    "E201" : ["("],
+    "E202" : [")"],
+    "E203" : [":"],
+    "E211" : ["["],
+    "E231" : [","],
+    "E241" : [","],
+    "E242" : [","],
+    "E302" : [1],
+    "E303" : [3],
+    "E501" : [85],
+}
+
+
+def getMessage(code, *args):
+    """
+    Function to get a translated and formatted message for a given code.
+    
+    @param code message code (string)
+    @param args arguments for a formatted message (list)
+    @return translated and formatted message (string)
+    """
+    if code in pep8_messages:
+        return code + " " + QCoreApplication.translate("pep8",
+            pep8_messages[code]).format(*args)
+    else:
+        return code + " " + QCoreApplication.translate("pep8",
+            "no message for this code defined")
+
+##############################################################################
+# Plugins (check functions) for physical lines
+##############################################################################
+
+
+def tabs_or_spaces(physical_line, indent_char):
+    r"""
+    Never mix tabs and spaces.
+
+    The most popular way of indenting Python is with spaces only.  The
+    second-most popular way is with tabs only.  Code indented with a mixture
+    of tabs and spaces should be converted to using spaces exclusively.  When
+    invoking the Python command line interpreter with the -t option, it issues
+    warnings about code that illegally mixes tabs and spaces.  When using -tt
+    these warnings become errors.  These options are highly recommended!
+
+    Okay: if a == 0:\n        a = 1\n        b = 1
+    E101: if a == 0:\n        a = 1\n\tb = 1
+    """
+    indent = INDENT_REGEX.match(physical_line).group(1)
+    for offset, char in enumerate(indent):
+        if char != indent_char:
+            return offset, "E101"
+
+
+def tabs_obsolete(physical_line):
+    r"""
+    For new projects, spaces-only are strongly recommended over tabs.  Most
+    editors have features that make this easy to do.
+
+    Okay: if True:\n    return
+    W191: if True:\n\treturn
+    """
+    indent = INDENT_REGEX.match(physical_line).group(1)
+    if indent.count('\t'):
+        return indent.index('\t'), "W191"
+
+
+def trailing_whitespace(physical_line):
+    r"""
+    JCR: Trailing whitespace is superfluous.
+    FBM: Except when it occurs as part of a blank line (i.e. the line is
+         nothing but whitespace). According to Python docs[1] a line with only
+         whitespace is considered a blank line, and is to be ignored. However,
+         matching a blank line to its indentation level avoids mistakenly
+         terminating a multi-line statement (e.g. class declaration) when
+         pasting code into the standard Python interpreter.
+
+         [1] http://docs.python.org/reference/lexical_analysis.html#blank-lines
+
+    The warning returned varies on whether the line itself is blank, for easier
+    filtering for those who want to indent their blank lines.
+
+    Okay: spam(1)
+    W291: spam(1)\s
+    W293: class Foo(object):\n    \n    bang = 12
+    """
+    physical_line = physical_line.rstrip('\n')    # chr(10), newline
+    physical_line = physical_line.rstrip('\r')    # chr(13), carriage return
+    physical_line = physical_line.rstrip('\x0c')  # chr(12), form feed, ^L
+    stripped = physical_line.rstrip()
+    if physical_line != stripped:
+        if stripped:
+            return len(stripped), "W291"
+        else:
+            return 0, "W293"
+
+
+def trailing_blank_lines(physical_line, lines, line_number):
+    r"""
+    JCR: Trailing blank lines are superfluous.
+
+    Okay: spam(1)
+    W391: spam(1)\n
+    """
+    if physical_line.strip() == '' and line_number == len(lines):
+        return 0, "W391"
+
+
+def missing_newline(physical_line):
+    """
+    JCR: The last line should have a newline.
+    """
+    if physical_line.rstrip() == physical_line:
+        return len(physical_line), "W292"
+
+
+def maximum_line_length(physical_line):
+    """
+    Limit all lines to a maximum of 79 characters.
+
+    There are still many devices around that are limited to 80 character
+    lines; plus, limiting windows to 80 characters makes it possible to have
+    several windows side-by-side.  The default wrapping on such devices looks
+    ugly.  Therefore, please limit all lines to a maximum of 79 characters.
+    For flowing long blocks of text (docstrings or comments), limiting the
+    length to 72 characters is recommended.
+    """
+    line = physical_line.rstrip()
+    length = len(line)
+    if length > MAX_LINE_LENGTH:
+        try:
+            # The line could contain multi-byte characters
+            if not hasattr(line, 'decode'):   # Python 3
+                line = line.encode('latin-1')
+            length = len(line.decode('utf-8'))
+        except UnicodeDecodeError:
+            pass
+    if length > MAX_LINE_LENGTH:
+        return MAX_LINE_LENGTH, "E501", length
+
+
+##############################################################################
+# Plugins (check functions) for logical lines
+##############################################################################
+
+
+def blank_lines(logical_line, blank_lines, indent_level, line_number,
+                previous_logical, previous_indent_level,
+                blank_lines_before_comment):
+    r"""
+    Separate top-level function and class definitions with two blank lines.
+
+    Method definitions inside a class are separated by a single blank line.
+
+    Extra blank lines may be used (sparingly) to separate groups of related
+    functions.  Blank lines may be omitted between a bunch of related
+    one-liners (e.g. a set of dummy implementations).
+
+    Use blank lines in functions, sparingly, to indicate logical sections.
+
+    Okay: def a():\n    pass\n\n\ndef b():\n    pass
+    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
+
+    E301: class Foo:\n    b = 0\n    def bar():\n        pass
+    E302: def a():\n    pass\n\ndef b(n):\n    pass
+    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
+    E303: def a():\n\n\n\n    pass
+    E304: @decorator\n\ndef a():\n    pass
+    """
+    if line_number == 1:
+        return  # Don't expect blank lines before the first line
+    max_blank_lines = max(blank_lines, blank_lines_before_comment)
+    if previous_logical.startswith('@'):
+        if max_blank_lines:
+            return 0, "E304"
+    elif max_blank_lines > 2 or (indent_level and max_blank_lines == 2):
+        return 0, "E303", max_blank_lines
+    elif (logical_line.startswith('def ') or
+          logical_line.startswith('class ') or
+          logical_line.startswith('@')):
+        if indent_level:
+            if not (max_blank_lines or previous_indent_level < indent_level or
+                    DOCSTRING_REGEX.match(previous_logical)):
+                return 0, "E301"
+        elif max_blank_lines != 2:
+            return 0, "E302", max_blank_lines
+
+
+def extraneous_whitespace(logical_line):
+    """
+    Avoid extraneous whitespace in the following situations:
+
+    - Immediately inside parentheses, brackets or braces.
+
+    - Immediately before a comma, semicolon, or colon.
+
+    Okay: spam(ham[1], {eggs: 2})
+    E201: spam( ham[1], {eggs: 2})
+    E201: spam(ham[ 1], {eggs: 2})
+    E201: spam(ham[1], { eggs: 2})
+    E202: spam(ham[1], {eggs: 2} )
+    E202: spam(ham[1 ], {eggs: 2})
+    E202: spam(ham[1], {eggs: 2 })
+
+    E203: if x == 4: print x, y; x, y = y , x
+    E203: if x == 4: print x, y ; x, y = y, x
+    E203: if x == 4 : print x, y; x, y = y, x
+    """
+    line = logical_line
+    for match in EXTRANEOUS_WHITESPACE_REGEX.finditer(line):
+        text = match.group()
+        char = text.strip()
+        found = match.start()
+        if text == char + ' ' and char in '([{':
+            return found + 1, "E201", char
+        if text == ' ' + char and line[found - 1] != ',':
+            if char in '}])':
+                return found, "E202", char
+            if char in ',;:':
+                return found, "E203", char
+
+
+def missing_whitespace(logical_line):
+    """
+    JCR: Each comma, semicolon or colon should be followed by whitespace.
+
+    Okay: [a, b]
+    Okay: (3,)
+    Okay: a[1:4]
+    Okay: a[:4]
+    Okay: a[1:]
+    Okay: a[1:4:2]
+    E231: ['a','b']
+    E231: foo(bar,baz)
+    """
+    line = logical_line
+    for index in range(len(line) - 1):
+        char = line[index]
+        if char in ',;:' and line[index + 1] not in WHITESPACE:
+            before = line[:index]
+            if char == ':' and before.count('[') > before.count(']'):
+                continue  # Slice syntax, no space required
+            if char == ',' and line[index + 1] == ')':
+                continue  # Allow tuple with only one element: (3,)
+            return index, "E231", char
+
+
+def indentation(logical_line, previous_logical, indent_char,
+                indent_level, previous_indent_level):
+    r"""
+    Use 4 spaces per indentation level.
+
+    For really old code that you don't want to mess up, you can continue to
+    use 8-space tabs.
+
+    Okay: a = 1
+    Okay: if a == 0:\n    a = 1
+    E111:   a = 1
+
+    Okay: for item in items:\n    pass
+    E112: for item in items:\npass
+
+    Okay: a = 1\nb = 2
+    E113: a = 1\n    b = 2
+    """
+    if indent_char == ' ' and indent_level % 4:
+        return 0, "E111"
+    indent_expect = previous_logical.endswith(':')
+    if indent_expect and indent_level <= previous_indent_level:
+        return 0, "E112"
+    if indent_level > previous_indent_level and not indent_expect:
+        return 0, "E113"
+
+
+def whitespace_before_parameters(logical_line, tokens):
+    """
+    Avoid extraneous whitespace in the following situations:
+
+    - Immediately before the open parenthesis that starts the argument
+      list of a function call.
+
+    - Immediately before the open parenthesis that starts an indexing or
+      slicing.
+
+    Okay: spam(1)
+    E211: spam (1)
+
+    Okay: dict['key'] = list[index]
+    E211: dict ['key'] = list[index]
+    E211: dict['key'] = list [index]
+    """
+    prev_type = tokens[0][0]
+    prev_text = tokens[0][1]
+    prev_end = tokens[0][3]
+    for index in range(1, len(tokens)):
+        token_type, text, start, end, line = tokens[index]
+        if (token_type == tokenize.OP and
+            text in '([' and
+            start != prev_end and
+            (prev_type == tokenize.NAME or prev_text in '}])') and
+            # Syntax "class A (B):" is allowed, but avoid it
+            (index < 2 or tokens[index - 2][1] != 'class') and
+            # Allow "return (a.foo for a in range(5))"
+            (not keyword.iskeyword(prev_text))):
+            return prev_end, "E211", text
+        prev_type = token_type
+        prev_text = text
+        prev_end = end
+
+
+def whitespace_around_operator(logical_line):
+    """
+    Avoid extraneous whitespace in the following situations:
+
+    - More than one space around an assignment (or other) operator to
+      align it with another.
+
+    Okay: a = 12 + 3
+    E221: a = 4  + 5
+    E222: a = 4 +  5
+    E223: a = 4\t+ 5
+    E224: a = 4 +\t5
+    """
+    for match in WHITESPACE_AROUND_OPERATOR_REGEX.finditer(logical_line):
+        before, whitespace, after = match.groups()
+        tab = whitespace == '\t'
+        offset = match.start(2)
+        if before in OPERATORS:
+            return offset, (tab and "E224" or "E222")
+        elif after in OPERATORS:
+            return offset, (tab and "E223" or "E221")
+
+
+def missing_whitespace_around_operator(logical_line, tokens):
+    r"""
+    - Always surround these binary operators with a single space on
+      either side: assignment (=), augmented assignment (+=, -= etc.),
+      comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not),
+      Booleans (and, or, not).
+
+    - Use spaces around arithmetic operators.
+
+    Okay: i = i + 1
+    Okay: submitted += 1
+    Okay: x = x * 2 - 1
+    Okay: hypot2 = x * x + y * y
+    Okay: c = (a + b) * (a - b)
+    Okay: foo(bar, key='word', *args, **kwargs)
+    Okay: baz(**kwargs)
+    Okay: negative = -1
+    Okay: spam(-1)
+    Okay: alpha[:-i]
+    Okay: if not -5 < x < +5:\n    pass
+    Okay: lambda *args, **kw: (args, kw)
+
+    E225: i=i+1
+    E225: submitted +=1
+    E225: x = x*2 - 1
+    E225: hypot2 = x*x + y*y
+    E225: c = (a+b) * (a-b)
+    E225: c = alpha -4
+    E225: z = x **y
+    """
+    parens = 0
+    need_space = False
+    prev_type = tokenize.OP
+    prev_text = prev_end = None
+    for token_type, text, start, end, line in tokens:
+        if token_type in (tokenize.NL, tokenize.NEWLINE, tokenize.ERRORTOKEN):
+            # ERRORTOKEN is triggered by backticks in Python 3000
+            continue
+        if text in ('(', 'lambda'):
+            parens += 1
+        elif text == ')':
+            parens -= 1
+        if need_space:
+            if start != prev_end:
+                need_space = False
+            elif text == '>' and prev_text == '<':
+                # Tolerate the "<>" operator, even if running Python 3
+                pass
+            else:
+                return prev_end, "E225"
+        elif token_type == tokenize.OP and prev_end is not None:
+            if text == '=' and parens:
+                # Allow keyword args or defaults: foo(bar=None).
+                pass
+            elif text in BINARY_OPERATORS:
+                need_space = True
+            elif text in UNARY_OPERATORS:
+                # Allow unary operators: -123, -x, +1.
+                # Allow argument unpacking: foo(*args, **kwargs).
+                if prev_type == tokenize.OP:
+                    if prev_text in '}])':
+                        need_space = True
+                elif prev_type == tokenize.NAME:
+                    if prev_text not in E225NOT_KEYWORDS:
+                        need_space = True
+                else:
+                    need_space = True
+            if need_space and start == prev_end:
+                return prev_end, "E225"
+        prev_type = token_type
+        prev_text = text
+        prev_end = end
+
+
+def whitespace_around_comma(logical_line):
+    """
+    Avoid extraneous whitespace in the following situations:
+
+    - More than one space around an assignment (or other) operator to
+      align it with another.
+
+    JCR: This should also be applied around comma etc.
+    Note: these checks are disabled by default
+
+    Okay: a = (1, 2)
+    E241: a = (1,  2)
+    E242: a = (1,\t2)
+    """
+    line = logical_line
+    for separator in ',;:':
+        found = line.find(separator + '  ')
+        if found > -1:
+            return found + 1, "E241", separator
+        found = line.find(separator + '\t')
+        if found > -1:
+            return found + 1, "E242", separator
+
+
+def whitespace_around_named_parameter_equals(logical_line):
+    """
+    Don't use spaces around the '=' sign when used to indicate a
+    keyword argument or a default parameter value.
+
+    Okay: def complex(real, imag=0.0):
+    Okay: return magic(r=real, i=imag)
+    Okay: boolean(a == b)
+    Okay: boolean(a != b)
+    Okay: boolean(a <= b)
+    Okay: boolean(a >= b)
+
+    E251: def complex(real, imag = 0.0):
+    E251: return magic(r = real, i = imag)
+    """
+    parens = 0
+    for match in WHITESPACE_AROUND_NAMED_PARAMETER_REGEX.finditer(
+            logical_line):
+        text = match.group()
+        if parens and len(text) == 3:
+            issue = "E251"
+            return match.start(), issue
+        if text == '(':
+            parens += 1
+        elif text == ')':
+            parens -= 1
+
+
+def whitespace_before_inline_comment(logical_line, tokens):
+    """
+    Separate inline comments by at least two spaces.
+
+    An inline comment is a comment on the same line as a statement.  Inline
+    comments should be separated by at least two spaces from the statement.
+    They should start with a # and a single space.
+
+    Okay: x = x + 1  # Increment x
+    Okay: x = x + 1    # Increment x
+    E261: x = x + 1 # Increment x
+    E262: x = x + 1  #Increment x
+    E262: x = x + 1  #  Increment x
+    """
+    prev_end = (0, 0)
+    for token_type, text, start, end, line in tokens:
+        if token_type == tokenize.NL:
+            continue
+        if token_type == tokenize.COMMENT:
+            if not line[:start[1]].strip():
+                continue
+            if prev_end[0] == start[0] and start[1] < prev_end[1] + 2:
+                return (prev_end, "E261")
+            if (len(text) > 1 and text.startswith('#  ')
+                           or not text.startswith('# ')):
+                return start, "E262"
+        else:
+            prev_end = end
+
+
+def imports_on_separate_lines(logical_line):
+    r"""
+    Imports should usually be on separate lines.
+
+    Okay: import os\nimport sys
+    E401: import sys, os
+
+    Okay: from subprocess import Popen, PIPE
+    Okay: from myclas import MyClass
+    Okay: from foo.bar.yourclass import YourClass
+    Okay: import myclass
+    Okay: import foo.bar.yourclass
+    """
+    line = logical_line
+    if line.startswith('import '):
+        found = line.find(',')
+        if found > -1:
+            return found, "E401"
+
+
+def compound_statements(logical_line):
+    r"""
+    Compound statements (multiple statements on the same line) are
+    generally discouraged.
+
+    While sometimes it's okay to put an if/for/while with a small body
+    on the same line, never do this for multi-clause statements. Also
+    avoid folding such long lines!
+
+    Okay: if foo == 'blah':\n    do_blah_thing()
+    Okay: do_one()
+    Okay: do_two()
+    Okay: do_three()
+
+    E701: if foo == 'blah': do_blah_thing()
+    E701: for x in lst: total += x
+    E701: while t < 10: t = delay()
+    E701: if foo == 'blah': do_blah_thing()
+    E701: else: do_non_blah_thing()
+    E701: try: something()
+    E701: finally: cleanup()
+    E701: if foo == 'blah': one(); two(); three()
+
+    E702: do_one(); do_two(); do_three()
+    """
+    line = logical_line
+    found = line.find(':')
+    if -1 < found < len(line) - 1:
+        before = line[:found]
+        if (before.count('{') <= before.count('}') and  # {'a': 1} (dict)
+            before.count('[') <= before.count(']') and  # [1:2] (slice)
+            not re.search(r'\blambda\b', before)):      # lambda x: x
+            return found, "E701"
+    found = line.find(';')
+    if -1 < found:
+        return found, "E702"
+
+
+def python_3000_has_key(logical_line):
+    """
+    The {}.has_key() method will be removed in the future version of
+    Python. Use the 'in' operation instead, like:
+    d = {"a": 1, "b": 2}
+    if "b" in d:
+        print d["b"]
+    """
+    pos = logical_line.find('.has_key(')
+    if pos > -1:
+        return pos, "W601"
+
+
+def python_3000_raise_comma(logical_line):
+    """
+    When raising an exception, use "raise ValueError('message')"
+    instead of the older form "raise ValueError, 'message'".
+
+    The paren-using form is preferred because when the exception arguments
+    are long or include string formatting, you don't need to use line
+    continuation characters thanks to the containing parentheses.  The older
+    form will be removed in Python 3000.
+    """
+    match = RAISE_COMMA_REGEX.match(logical_line)
+    if match:
+        return match.start(1), "W602"
+
+
+def python_3000_not_equal(logical_line):
+    """
+    != can also be written <>, but this is an obsolete usage kept for
+    backwards compatibility only. New code should always use !=.
+    The older syntax is removed in Python 3000.
+    """
+    pos = logical_line.find('<>')
+    if pos > -1:
+        return pos, "W603"
+
+
+def python_3000_backticks(logical_line):
+    """
+    Backticks are removed in Python 3000.
+    Use repr() instead.
+    """
+    pos = logical_line.find('`')
+    if pos > -1:
+        return pos, "W604"
+
+
+##############################################################################
+# Helper functions
+##############################################################################
+
+
+if '' == ''.encode():
+    # Python 2: implicit encoding.
+    def readlines(filename):
+        return open(filename).readlines()
+else:
+    # Python 3: decode to latin-1.
+    # This function is lazy, it does not read the encoding declaration.
+    # XXX: use tokenize.detect_encoding()
+    def readlines(filename):    # __IGNORE_WARNING__
+        return open(filename, encoding='latin-1').readlines()
+
+
+def expand_indent(line):
+    """
+    Return the amount of indentation.
+    Tabs are expanded to the next multiple of 8.
+
+    >>> expand_indent('    ')
+    4
+    >>> expand_indent('\\t')
+    8
+    >>> expand_indent('    \\t')
+    8
+    >>> expand_indent('       \\t')
+    8
+    >>> expand_indent('        \\t')
+    16
+    """
+    result = 0
+    for char in line:
+        if char == '\t':
+            result = result // 8 * 8 + 8
+        elif char == ' ':
+            result += 1
+        else:
+            break
+    return result
+
+
+def mute_string(text):
+    """
+    Replace contents with 'xxx' to prevent syntax matching.
+
+    >>> mute_string('"abc"')
+    '"xxx"'
+    >>> mute_string("'''abc'''")
+    "'''xxx'''"
+    >>> mute_string("r'abc'")
+    "r'xxx'"
+    """
+    start = 1
+    end = len(text) - 1
+    # String modifiers (e.g. u or r)
+    if text.endswith('"'):
+        start += text.index('"')
+    elif text.endswith("'"):
+        start += text.index("'")
+    # Triple quotes
+    if text.endswith('"""') or text.endswith("'''"):
+        start += 2
+        end -= 2
+    return text[:start] + 'x' * (end - start) + text[end:]
+
+
+def message(text):
+    """Print a message."""
+    # print >> sys.stderr, options.prog + ': ' + text
+    # print >> sys.stderr, text
+    print(text)
+
+
+##############################################################################
+# Framework to run all checks
+##############################################################################
+
+
+def find_checks(argument_name):
+    """
+    Find all globally visible functions where the first argument name
+    starts with argument_name.
+    """
+    checks = []
+    for name, function in globals().items():
+        if not inspect.isfunction(function):
+            continue
+        args = inspect.getargspec(function)[0]
+        if args and args[0].startswith(argument_name):
+            codes = ERRORCODE_REGEX.findall(inspect.getdoc(function) or '')
+            for code in codes or ['']:
+                if not code or not ignore_code(code):
+                    checks.append((name, function, args))
+                    break
+    checks.sort()
+    return checks
+
+
+class Checker(object):
+    """
+    Load a Python source file, tokenize it, check coding style.
+    """
+
+    def __init__(self, filename, lines=None):
+        self.filename = filename
+        if filename is None:
+            self.filename = 'stdin'
+            self.lines = lines or []
+        elif lines is None:
+            self.lines = readlines(filename)
+        else:
+            self.lines = lines
+        options.counters['physical lines'] += len(self.lines)
+
+    def readline(self):
+        """
+        Get the next line from the input buffer.
+        """
+        self.line_number += 1
+        if self.line_number > len(self.lines):
+            return ''
+        return self.lines[self.line_number - 1]
+
+    def readline_check_physical(self):
+        """
+        Check and return the next physical line. This method can be
+        used to feed tokenize.generate_tokens.
+        """
+        line = self.readline()
+        if line:
+            self.check_physical(line)
+        return line
+
+    def run_check(self, check, argument_names):
+        """
+        Run a check plugin.
+        """
+        arguments = []
+        for name in argument_names:
+            arguments.append(getattr(self, name))
+        return check(*arguments)
+
+    def check_physical(self, line):
+        """
+        Run all physical checks on a raw input line.
+        """
+        self.physical_line = line
+        if self.indent_char is None and len(line) and line[0] in ' \t':
+            self.indent_char = line[0]
+        for name, check, argument_names in options.physical_checks:
+            result = self.run_check(check, argument_names)
+            if result is not None:
+                offset, code, *args = result
+                self.report_error_args(self.line_number, offset, code, check, 
+                    *args)
+
+    def build_tokens_line(self):
+        """
+        Build a logical line from tokens.
+        """
+        self.mapping = []
+        logical = []
+        length = 0
+        previous = None
+        for token in self.tokens:
+            token_type, text = token[0:2]
+            if token_type in SKIP_TOKENS:
+                continue
+            if token_type == tokenize.STRING:
+                text = mute_string(text)
+            if previous:
+                end_line, end = previous[3]
+                start_line, start = token[2]
+                if end_line != start_line:  # different row
+                    prev_text = self.lines[end_line - 1][end - 1]
+                    if prev_text == ',' or (prev_text not in '{[('
+                                            and text not in '}])'):
+                        logical.append(' ')
+                        length += 1
+                elif end != start:  # different column
+                    fill = self.lines[end_line - 1][end:start]
+                    logical.append(fill)
+                    length += len(fill)
+            self.mapping.append((length, token))
+            logical.append(text)
+            length += len(text)
+            previous = token
+        self.logical_line = ''.join(logical)
+        assert self.logical_line.lstrip() == self.logical_line
+        assert self.logical_line.rstrip() == self.logical_line
+
+    def check_logical(self):
+        """
+        Build a line from tokens and run all logical checks on it.
+        """
+        options.counters['logical lines'] += 1
+        self.build_tokens_line()
+        first_line = self.lines[self.mapping[0][1][2][0] - 1]
+        indent = first_line[:self.mapping[0][1][2][1]]
+        self.previous_indent_level = self.indent_level
+        self.indent_level = expand_indent(indent)
+        if options.verbose >= 2:
+            print(self.logical_line[:80].rstrip())
+        for name, check, argument_names in options.logical_checks:
+            if options.verbose >= 4:
+                print('   ' + name)
+            result = self.run_check(check, argument_names)
+            if result is not None:
+                offset, code, *args = result
+                if isinstance(offset, tuple):
+                    original_number, original_offset = offset
+                else:
+                    for token_offset, token in self.mapping:
+                        if offset >= token_offset:
+                            original_number = token[2][0]
+                            original_offset = (token[2][1]
+                                               + offset - token_offset)
+                self.report_error_args(original_number, original_offset,
+                                       code, check, *args)
+        self.previous_logical = self.logical_line
+
+    def check_all(self, expected=None, line_offset=0):
+        """
+        Run all checks on the input file.
+        """
+        self.expected = expected or ()
+        self.line_offset = line_offset
+        self.line_number = 0
+        self.file_errors = 0
+        self.indent_char = None
+        self.indent_level = 0
+        self.previous_logical = ''
+        self.blank_lines = 0
+        self.blank_lines_before_comment = 0
+        self.tokens = []
+        parens = 0
+        for token in tokenize.generate_tokens(self.readline_check_physical):
+            if options.verbose >= 3:
+                if token[2][0] == token[3][0]:
+                    pos = '[%s:%s]' % (token[2][1] or '', token[3][1])
+                else:
+                    pos = 'l.%s' % token[3][0]
+                print('l.%s\t%s\t%s\t%r' %
+                    (token[2][0], pos, tokenize.tok_name[token[0]], token[1]))
+            self.tokens.append(token)
+            token_type, text = token[0:2]
+            if token_type == tokenize.OP and text in '([{':
+                parens += 1
+            if token_type == tokenize.OP and text in '}])':
+                parens -= 1
+            if token_type == tokenize.NEWLINE and not parens:
+                self.check_logical()
+                self.blank_lines = 0
+                self.blank_lines_before_comment = 0
+                self.tokens = []
+            if token_type == tokenize.NL and not parens:
+                if len(self.tokens) <= 1:
+                    # The physical line contains only this token.
+                    self.blank_lines += 1
+                self.tokens = []
+            if token_type == tokenize.COMMENT:
+                source_line = token[4]
+                token_start = token[2][1]
+                if source_line[:token_start].strip() == '':
+                    self.blank_lines_before_comment = max(self.blank_lines,
+                        self.blank_lines_before_comment)
+                    self.blank_lines = 0
+                if text.endswith('\n') and not parens:
+                    # The comment also ends a physical line.  This works around
+                    # Python < 2.6 behaviour, which does not generate NL after
+                    # a comment which is on a line by itself.
+                    self.tokens = []
+        return self.file_errors
+
+    def report_error(self, line_number, offset, text, check):
+        """
+        Report an error, according to options.
+        """
+        code = text[:4]
+        if ignore_code(code):
+            return
+        if options.quiet == 1 and not self.file_errors:
+            message(self.filename)
+        if code in options.counters:
+            options.counters[code] += 1
+        else:
+            options.counters[code] = 1
+            options.messages[code] = text[5:]
+        if options.quiet or code in self.expected:
+            # Don't care about expected errors or warnings
+            return
+        self.file_errors += 1
+        if options.counters[code] == 1 or options.repeat:
+            message("%s:%s:%d: %s" %
+                    (self.filename, self.line_offset + line_number,
+                     offset + 1, text))
+            if options.show_source:
+                line = self.lines[line_number - 1]
+                message(line.rstrip())
+                message(' ' * offset + '^')
+            if options.show_pep8:
+                message(check.__doc__.lstrip('\n').rstrip())
+
+
+def input_file(filename):
+    """
+    Run all checks on a Python source file.
+    """
+    if options.verbose:
+        message('checking ' + filename)
+    Checker(filename).check_all()
+
+
+def input_dir(dirname, runner=None):
+    """
+    Check all Python source files in this directory and all subdirectories.
+    """
+    dirname = dirname.rstrip('/')
+    if excluded(dirname):
+        return
+    if runner is None:
+        runner = input_file
+    for root, dirs, files in os.walk(dirname):
+        if options.verbose:
+            message('directory ' + root)
+        options.counters['directories'] += 1
+        dirs.sort()
+        for subdir in dirs:
+            if excluded(subdir):
+                dirs.remove(subdir)
+        files.sort()
+        for filename in files:
+            if filename_match(filename) and not excluded(filename):
+                options.counters['files'] += 1
+                runner(os.path.join(root, filename))
+
+
+def excluded(filename):
+    """
+    Check if options.exclude contains a pattern that matches filename.
+    """
+    basename = os.path.basename(filename)
+    for pattern in options.exclude:
+        if fnmatch(basename, pattern):
+            # print basename, 'excluded because it matches', pattern
+            return True
+
+
+def filename_match(filename):
+    """
+    Check if options.filename contains a pattern that matches filename.
+    If options.filename is unspecified, this always returns True.
+    """
+    if not options.filename:
+        return True
+    for pattern in options.filename:
+        if fnmatch(filename, pattern):
+            return True
+
+
+def ignore_code(code):
+    """
+    Check if options.ignore contains a prefix of the error code.
+    If options.select contains a prefix of the error code, do not ignore it.
+    """
+    for select in options.select:
+        if code.startswith(select):
+            return False
+    for ignore in options.ignore:
+        if code.startswith(ignore):
+            return True
+
+
+def reset_counters():
+    for key in list(options.counters.keys()):
+        if key not in BENCHMARK_KEYS:
+            del options.counters[key]
+    options.messages = {}
+
+
+def get_error_statistics():
+    """Get error statistics."""
+    return get_statistics("E")
+
+
+def get_warning_statistics():
+    """Get warning statistics."""
+    return get_statistics("W")
+
+
+def get_statistics(prefix=''):
+    """
+    Get statistics for message codes that start with the prefix.
+
+    prefix='' matches all errors and warnings
+    prefix='E' matches all errors
+    prefix='W' matches all warnings
+    prefix='E4' matches all errors that have to do with imports
+    """
+    stats = []
+    keys = list(options.messages.keys())
+    keys.sort()
+    for key in keys:
+        if key.startswith(prefix):
+            stats.append('%-7s %s %s' %
+                         (options.counters[key], key, options.messages[key]))
+    return stats
+
+
+def get_count(prefix=''):
+    """Return the total count of errors and warnings."""
+    keys = list(options.messages.keys())
+    count = 0
+    for key in keys:
+        if key.startswith(prefix):
+            count += options.counters[key]
+    return count
+
+
+def print_statistics(prefix=''):
+    """Print overall statistics (number of errors and warnings)."""
+    for line in get_statistics(prefix):
+        print(line)
+
+
+def print_benchmark(elapsed):
+    """
+    Print benchmark numbers.
+    """
+    print('%-7.2f %s' % (elapsed, 'seconds elapsed'))
+    for key in BENCHMARK_KEYS:
+        print('%-7d %s per second (%d total)' % (
+            options.counters[key] / elapsed, key,
+            options.counters[key]))
+
+
+def run_tests(filename):
+    """
+    Run all the tests from a file.
+
+    A test file can provide many tests.  Each test starts with a declaration.
+    This declaration is a single line starting with '#:'.
+    It declares codes of expected failures, separated by spaces or 'Okay'
+    if no failure is expected.
+    If the file does not contain such declaration, it should pass all tests.
+    If the declaration is empty, following lines are not checked, until next
+    declaration.
+
+    Examples:
+
+     * Only E224 and W701 are expected:         #: E224 W701
+     * Following example is conform:            #: Okay
+     * Don't check these lines:                 #:
+    """
+    lines = readlines(filename) + ['#:\n']
+    line_offset = 0
+    codes = ['Okay']
+    testcase = []
+    for index, line in enumerate(lines):
+        if not line.startswith('#:'):
+            if codes:
+                # Collect the lines of the test case
+                testcase.append(line)
+            continue
+        if codes and index > 0:
+            label = '%s:%s:1' % (filename, line_offset + 1)
+            codes = [c for c in codes if c != 'Okay']
+            # Run the checker
+            errors = Checker(filename, testcase).check_all(codes, line_offset)
+            # Check if the expected errors were found
+            for code in codes:
+                if not options.counters.get(code):
+                    errors += 1
+                    message('%s: error %s not found' % (label, code))
+            if options.verbose and not errors:
+                message('%s: passed (%s)' % (label, ' '.join(codes)))
+            # Keep showing errors for multiple tests
+            reset_counters()
+        # output the real line numbers
+        line_offset = index
+        # configure the expected errors
+        codes = line.split()[1:]
+        # empty the test case buffer
+        del testcase[:]
+
+
+def selftest():
+    """
+    Test all check functions with test cases in docstrings.
+    """
+    count_passed = 0
+    count_failed = 0
+    checks = options.physical_checks + options.logical_checks
+    for name, check, argument_names in checks:
+        for line in check.__doc__.splitlines():
+            line = line.lstrip()
+            match = SELFTEST_REGEX.match(line)
+            if match is None:
+                continue
+            code, source = match.groups()
+            checker = Checker(None)
+            for part in source.split(r'\n'):
+                part = part.replace(r'\t', '\t')
+                part = part.replace(r'\s', ' ')
+                checker.lines.append(part + '\n')
+            options.quiet = 2
+            checker.check_all()
+            error = None
+            if code == 'Okay':
+                if len(options.counters) > len(BENCHMARK_KEYS):
+                    codes = [key for key in options.counters.keys()
+                             if key not in BENCHMARK_KEYS]
+                    error = "incorrectly found %s" % ', '.join(codes)
+            elif not options.counters.get(code):
+                error = "failed to find %s" % code
+            # Reset the counters
+            reset_counters()
+            if not error:
+                count_passed += 1
+            else:
+                count_failed += 1
+                if len(checker.lines) == 1:
+                    print("pep8.py: %s: %s" %
+                          (error, checker.lines[0].rstrip()))
+                else:
+                    print("pep8.py: %s:" % error)
+                    for line in checker.lines:
+                        print(line.rstrip())
+    if options.verbose:
+        print("%d passed and %d failed." % (count_passed, count_failed))
+        if count_failed:
+            print("Test failed.")
+        else:
+            print("Test passed.")
+
+
+def process_options(arglist=None):
+    """
+    Process options passed either via arglist or via command line args.
+    """
+    global options, args
+    parser = OptionParser(version=__version__,
+                          usage="%prog [options] input ...")
+    parser.add_option('-v', '--verbose', default=0, action='count',
+                      help="print status messages, or debug with -vv")
+    parser.add_option('-q', '--quiet', default=0, action='count',
+                      help="report only file names, or nothing with -qq")
+    parser.add_option('-r', '--repeat', action='store_true',
+                      help="show all occurrences of the same error")
+    parser.add_option('--exclude', metavar='patterns', default=DEFAULT_EXCLUDE,
+                      help="exclude files or directories which match these "
+                        "comma separated patterns (default: %s)" %
+                        DEFAULT_EXCLUDE)
+    parser.add_option('--filename', metavar='patterns', default='*.py',
+                      help="when parsing directories, only check filenames "
+                        "matching these comma separated patterns (default: "
+                        "*.py)")
+    parser.add_option('--select', metavar='errors', default='',
+                      help="select errors and warnings (e.g. E,W6)")
+    parser.add_option('--ignore', metavar='errors', default='',
+                      help="skip errors and warnings (e.g. E4,W)")
+    parser.add_option('--show-source', action='store_true',
+                      help="show source code for each error")
+    parser.add_option('--show-pep8', action='store_true',
+                      help="show text of PEP 8 for each error")
+    parser.add_option('--statistics', action='store_true',
+                      help="count errors and warnings")
+    parser.add_option('--count', action='store_true',
+                      help="print total number of errors and warnings "
+                        "to standard error and set exit code to 1 if "
+                        "total is not null")
+    parser.add_option('--benchmark', action='store_true',
+                      help="measure processing speed")
+    parser.add_option('--testsuite', metavar='dir',
+                      help="run regression tests from dir")
+    parser.add_option('--doctest', action='store_true',
+                      help="run doctest on myself")
+    options, args = parser.parse_args(arglist)
+    if options.testsuite:
+        args.append(options.testsuite)
+    if not args and not options.doctest:
+        parser.error('input not specified')
+    options.prog = os.path.basename(sys.argv[0])
+    options.exclude = options.exclude.split(',')
+    for index in range(len(options.exclude)):
+        options.exclude[index] = options.exclude[index].rstrip('/')
+    if options.filename:
+        options.filename = options.filename.split(',')
+    if options.select:
+        options.select = options.select.split(',')
+    else:
+        options.select = []
+    if options.ignore:
+        options.ignore = options.ignore.split(',')
+    elif options.select:
+        # Ignore all checks which are not explicitly selected
+        options.ignore = ['']
+    elif options.testsuite or options.doctest:
+        # For doctest and testsuite, all checks are required
+        options.ignore = []
+    else:
+        # The default choice: ignore controversial checks
+        options.ignore = DEFAULT_IGNORE.split(',')
+    options.physical_checks = find_checks('physical_line')
+    options.logical_checks = find_checks('logical_line')
+    options.counters = dict.fromkeys(BENCHMARK_KEYS, 0)
+    options.messages = {}
+    return options, args
+
+
+def _main():
+    """
+    Parse options and run checks on Python source.
+    """
+    options, args = process_options()
+    if options.doctest:
+        import doctest
+        doctest.testmod(verbose=options.verbose)
+        selftest()
+    if options.testsuite:
+        runner = run_tests
+    else:
+        runner = input_file
+    start_time = time.time()
+    for path in args:
+        if os.path.isdir(path):
+            input_dir(path, runner=runner)
+        elif not excluded(path):
+            options.counters['files'] += 1
+            runner(path)
+    elapsed = time.time() - start_time
+    if options.statistics:
+        print_statistics()
+    if options.benchmark:
+        print_benchmark(elapsed)
+    count = get_count()
+    if count:
+        if options.count:
+            sys.stderr.write(str(count) + '\n')
+        sys.exit(1)
+
+
+if __name__ == '__main__':
+    _main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/PluginPep8Checker.py	Sun Jan 09 18:16:46 2011 +0100
@@ -0,0 +1,278 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the PEP 8 Checker plugin.
+"""
+
+import os
+
+from PyQt4.QtCore import QObject
+
+from E5Gui.E5Application import e5App
+
+from E5Gui.E5Action import E5Action
+
+from CheckerPlugins.Pep8.Pep8Dialog import Pep8Dialog
+
+import Preferences
+
+# Start-Of-Header
+name = "PEP 8 Checker Plugin"
+author = "Detlev Offenbach <detlev@die-offenbachs.de>"
+autoactivate = True
+deactivateable = True
+version = "5.1.0"
+className = "Pep8CheckerPlugin"
+packageName = "__core__"
+shortDescription = "Show the PEP 8 Checker dialog."
+longDescription = """This plugin implements the PEP 8 Checker dialog.""" \
+ """ PEP 8 Checker is used to check Python source files for compliance""" \
+ """ to the conventions given in PEP 8."""
+pyqtApi = 2
+# End-Of-Header
+
+error = ""
+
+class Pep8CheckerPlugin(QObject):
+    """
+    Class implementing the PEP 8 Checker plugin.
+    """
+    def __init__(self, ui):
+        """
+        Constructor
+        
+        @param ui reference to the user interface object (UI.UserInterface)
+        """
+        QObject.__init__(self, ui)
+        self.__ui = ui
+        self.__initialize()
+        
+    def __initialize(self):
+        """
+        Private slot to (re)initialize the plugin.
+        """
+        self.__projectAct = None
+        self.__projectPep8CheckerDialog = None
+        
+        self.__projectBrowserAct = None
+        self.__projectBrowserMenu = None
+        self.__projectBrowserPep8CheckerDialog = None
+        
+        self.__editors = []
+        self.__editorAct = None
+        self.__editorPep8CheckerDialog = None
+
+    def activate(self):
+        """
+        Public method to activate this plugin.
+        
+        @return tuple of None and activation status (boolean)
+        """
+        menu = e5App().getObject("Project").getMenu("Checks")
+        if menu:
+            self.__projectAct = E5Action(self.trUtf8('Check PEP 8 Compliance'),
+                    self.trUtf8('PEP &8 Compliance...'), 0, 0,
+                    self, 'project_check_pep8')
+            self.__projectAct.setStatusTip(
+                self.trUtf8('Check PEP 8 compliance.'))
+            self.__projectAct.setWhatsThis(self.trUtf8(
+                """<b>Check PEP 8 Compliance...</b>"""
+                """<p>This checks Python files for compliance to the"""
+                """ conventions given in PEP 8.</p>"""
+            ))
+            self.__projectAct.triggered[()].connect(self.__projectPep8Check)
+            e5App().getObject("Project").addE5Actions([self.__projectAct])
+            menu.addAction(self.__projectAct)
+        
+        self.__editorAct = E5Action(self.trUtf8('Check PEP 8 Compliance'),
+                self.trUtf8('PEP &8 Compliance...'), 0, 0,
+                self, "")
+        self.__editorAct.setWhatsThis(self.trUtf8(
+                """<b>Check PEP 8 Compliance...</b>"""
+                """<p>This checks Python files for compliance to the"""
+                """ conventions given in PEP 8.</p>"""
+        ))
+        self.__editorAct.triggered[()].connect(self.__editorPep8Check)
+        
+        e5App().getObject("Project").showMenu.connect(self.__projectShowMenu)
+        e5App().getObject("ProjectBrowser").getProjectBrowser("sources")\
+            .showMenu.connect(self.__projectBrowserShowMenu)
+        e5App().getObject("ViewManager").editorOpenedEd.connect(
+            self.__editorOpened)
+        e5App().getObject("ViewManager").editorClosedEd.connect(
+            self.__editorClosed)
+        
+        for editor in e5App().getObject("ViewManager").getOpenEditors():
+            self.__editorOpened(editor)
+        
+        return None, True
+
+    def deactivate(self):
+        """
+        Public method to deactivate this plugin.
+        """
+        e5App().getObject("Project").showMenu.disconnect(
+            self.__projectShowMenu)
+        e5App().getObject("ProjectBrowser").getProjectBrowser("sources")\
+            .showMenu.disconnect(self.__projectBrowserShowMenu)
+        e5App().getObject("ViewManager").editorOpenedEd.disconnect(
+            self.__editorOpened)
+        e5App().getObject("ViewManager").editorClosedEd.disconnect(
+            self.__editorClosed)
+        
+        menu = e5App().getObject("Project").getMenu("Checks")
+        if menu:
+            menu.removeAction(self.__projectAct)
+        
+        if self.__projectBrowserMenu:
+            if self.__projectBrowserAct:
+                self.__projectBrowserMenu.removeAction(
+                    self.__projectBrowserAct)
+        
+        for editor in self.__editors:
+            editor.showMenu.disconnect(self.__editorShowMenu)
+            menu = editor.getMenu("Checks")
+            if menu is not None:
+                menu.removeAction(self.__editorAct)
+        
+        self.__initialize()
+    
+    def __projectShowMenu(self, menuName, menu):
+        """
+        Private slot called, when the the project menu or a submenu is 
+        about to be shown.
+        
+        @param menuName name of the menu to be shown (string)
+        @param menu reference to the menu (QMenu)
+        """
+        if menuName == "Checks" and self.__projectAct is not None:
+            self.__projectAct.setEnabled(
+                e5App().getObject("Project").getProjectLanguage() in \
+                    ["Python3"])
+##                    ["Python3", "Python2", "Python"])
+    
+    def __projectBrowserShowMenu(self, menuName, menu):
+        """
+        Private slot called, when the the project browser menu or a submenu is 
+        about to be shown.
+        
+        @param menuName name of the menu to be shown (string)
+        @param menu reference to the menu (QMenu)
+        """
+        if menuName == "Checks" and \
+           e5App().getObject("Project").getProjectLanguage() in \
+                ["Python3"]:
+##                ["Python3", "Python2", "Python"]:
+            self.__projectBrowserMenu = menu
+            if self.__projectBrowserAct is None:
+                self.__projectBrowserAct = E5Action(
+                    self.trUtf8('Check PEP 8 Compliance'),
+                    self.trUtf8('PEP &8 Compliance...'), 0, 0,
+                    self, "")
+                self.__projectBrowserAct.setWhatsThis(self.trUtf8(
+                    """<b>Check PEP 8 Compliance...</b>"""
+                    """<p>This checks Python files for compliance to the"""
+                    """ conventions given in PEP 8.</p>"""
+                ))
+                self.__projectBrowserAct.triggered[()].connect(
+                    self.__projectBrowserPep8Check)
+            if not self.__projectBrowserAct in menu.actions():
+                menu.addAction(self.__projectBrowserAct)
+    
+    def __projectPep8Check(self):
+        """
+        Public slot used to check the project files for PEP 8 compliance.
+        """
+        project = e5App().getObject("Project")
+        project.saveAllScripts()
+        ppath = project.getProjectPath()
+        files = [os.path.join(ppath, file) \
+            for file in project.pdata["SOURCES"] \
+                if file.endswith(
+                    tuple(Preferences.getPython("Python3Extensions")))]
+##                    tuple(Preferences.getPython("Python3Extensions")) +
+##                    tuple(Preferences.getPython("PythonExtensions")))]
+        
+        self.__projectPep8CheckerDialog = Pep8Dialog()
+        self.__projectPep8CheckerDialog.show()
+        self.__projectPep8CheckerDialog.prepare(files, project)
+    
+    def __projectBrowserPep8Check(self):
+        """
+        Private method to handle the PEP 8 check context menu action of
+        the project sources browser.
+        """
+        browser = e5App().getObject("ProjectBrowser")\
+            .getProjectBrowser("sources")
+        itm = browser.model().item(browser.currentIndex())
+        try:
+            fn = itm.fileName()
+            isDir = False
+        except AttributeError:
+            fn = itm.dirName()
+            isDir = True
+        
+        self.__projectBrowserPep8CheckerDialog = Pep8Dialog()
+        self.__projectBrowserPep8CheckerDialog.show()
+        if isDir:
+            self.__projectBrowserPep8CheckerDialog.start(
+                fn, save = True)
+        else:
+            self.__projectBrowserPep8CheckerDialog.start(
+                fn, save = True, repeat = True)
+    
+    def __editorOpened(self, editor):
+        """
+        Private slot called, when a new editor was opened.
+        
+        @param editor reference to the new editor (QScintilla.Editor)
+        """
+        menu = editor.getMenu("Checks")
+        if menu is not None:
+            menu.addAction(self.__editorAct)
+            editor.showMenu.connect(self.__editorShowMenu)
+            self.__editors.append(editor)
+    
+    def __editorClosed(self, editor):
+        """
+        Private slot called, when an editor was closed.
+        
+        @param editor reference to the editor (QScintilla.Editor)
+        """
+        try:
+            self.__editors.remove(editor)
+        except ValueError:
+            pass
+    
+    def __editorShowMenu(self, menuName, menu, editor):
+        """
+        Private slot called, when the the editor context menu or a submenu is 
+        about to be shown.
+        
+        @param menuName name of the menu to be shown (string)
+        @param menu reference to the menu (QMenu)
+        @param editor reference to the editor
+        """
+        if menuName == "Checks":
+            if not self.__editorAct in menu.actions():
+                menu.addAction(self.__editorAct)
+            self.__editorAct.setEnabled(editor.isPy3File())
+##            self.__editorAct.setEnabled(editor.isPy3File() or editor.isPy2File())
+    
+    def __editorPep8Check(self):
+        """
+        Private slot to handle the PEP 8 check context menu action
+        of the editors.
+        """
+        editor = e5App().getObject("ViewManager").activeWindow()
+        if editor is not None:
+            self.__editorPep8CheckerDialog = Pep8Dialog()
+            self.__editorPep8CheckerDialog.show()
+            self.__editorPep8CheckerDialog.start(
+                editor.getFileName(), 
+                codestring = editor.text(), 
+                save = True, 
+                repeat = True)
--- a/QScintilla/Editor.py	Sun Jan 09 14:25:16 2011 +0100
+++ b/QScintilla/Editor.py	Sun Jan 09 18:16:46 2011 +0100
@@ -315,7 +315,7 @@
             self.addClone(editor)
             editor.addClone(self)
         
-        self.gotoLine(0)
+        self.gotoLine(1)
         
         # set the text display again
         self.__setTextDisplay()
@@ -3194,13 +3194,14 @@
             else:
                 self.__indentLine(True)
         
-    def gotoLine(self, line):
+    def gotoLine(self, line, pos = 1):
         """
         Public slot to jump to the beginning of a line.
         
         @param line line number to go to (integer)
-        """
-        self.setCursorPosition(line - 1, 0)
+        @keyparam pos position in line to go to (integer)
+        """
+        self.setCursorPosition(line - 1, pos - 1)
         self.ensureVisible(line)
     
     ############################################################################
@@ -4574,8 +4575,10 @@
         """
         Public method to toggle a flakes warning indicator.
         
+        Note: This method is used to set PEP 8 warnings as well.
+        
         @param line line number of the flakes warning
-        @param erwarningror flag indicating if the warning marker should be
+        @param warning flag indicating if the warning marker should be
             set or deleted (boolean)
         @param msg warning message (string)
         """
--- a/Utilities/__init__.py	Sun Jan 09 14:25:16 2011 +0100
+++ b/Utilities/__init__.py	Sun Jan 09 18:16:46 2011 +0100
@@ -453,7 +453,10 @@
     @return dictionary of string, boolean, complex, float and int
     """
     flags = {}
-    lines = text.splitlines()
+    if isinstance(text, str):
+        lines = text.splitlines()
+    else:
+        lines = text
     for line in reversed(lines):
         index = line.find("eflag:")
         if index == -1:
--- a/ViewManager/ViewManager.py	Sun Jan 09 14:25:16 2011 +0100
+++ b/ViewManager/ViewManager.py	Sun Jan 09 18:16:46 2011 +0100
@@ -3099,7 +3099,8 @@
             
         self.__setSbFile()
         
-    def openSourceFile(self, fn, lineno = None, filetype = "", selStart = 0, selEnd = 0):
+    def openSourceFile(self, fn, lineno = None, filetype = "", 
+                       selStart = 0, selEnd = 0, pos = 0):
         """
         Public slot to display a file in an editor.
         
@@ -3120,7 +3121,7 @@
         
         if lineno is not None and lineno >= 0:
             editor.ensureVisibleTop(lineno)
-            editor.gotoLine(lineno)
+            editor.gotoLine(lineno, pos)
         
         if selStart != selEnd:
             editor.setSelection(lineno - 1, selStart, lineno - 1, selEnd)
--- a/changelog	Sun Jan 09 14:25:16 2011 +0100
+++ b/changelog	Sun Jan 09 18:16:46 2011 +0100
@@ -4,6 +4,7 @@
 - bug fixes
 - made the toolbars of the initial layout more minimalistic
 - merged "Save to Project" into "Save" and "Save As...".
+- added a checker for PEP 8 compliance
 
 Version 5.1-snapshot-20110106:
 - bug fixes
@@ -40,7 +41,8 @@
 - bug fixes
 - converted all signal/slot code to use the new API
 - added action to copy the editor path to the clipboard to the tab context menu
-- added code to adjust the cursor flash time of the editor to the global settings
+- added code to adjust the cursor flash time of the editor to the global
+  settings
 - added code to show hidden files in the various browsers
 - added an editor action to join the current line with the next one
 - added code to cope with Linux distributor's usage of KDE wrapper dialogs
@@ -49,11 +51,12 @@
 - changed all calls to QMessageBox to some eric5 replacements and convenience
   functions
 - added a wizard for the eric5 message box (E5MessageBox)
-- added filename filters to the code metrics, syntax checker and tabnanny dialogs
+- added filename filters to the code metrics, syntax checker and tabnanny
+  dialogs
 - changed XML handling code to use QXmlStreamReader and QXmlStreamWriter
 - added use of compositing modes to the icon editor
-- modified install script such, that it allows an installation from source as well.
-  The situation will be determined automatically.
+- modified install script such, that it allows an installation from source as
+  well. The situation will be determined automatically.
 
 Version 5.1-snapshot-20100718:
 - bug fixes
@@ -81,13 +84,14 @@
 - added code to save the editor zoom factor in the session file
 - added code to configure the zoom factor a file is opened with
 - added code to update the file browser window (mostly) automatically
-- added code to update the Others tab of the project browser (mostly) automatically
+- added code to update the Others tab of the project browser (mostly)
+  automatically
 - added a menu to the highlighting styles config page to change individual
   aspects of a font only
 - changed code to improve development on multiple platforms
 - added code to show the keyboard shortcut to the tooltip of an action
-- changed the Find in Files dialog to remember the history of the search string,
-  replace string and the search directory
+- changed the Find in Files dialog to remember the history of the search
+  string, replace string and the search directory
 - added code to enhance the proxy configuration and removed the usage of QHttp
 
 Version 5.0-snapshot-20100508:
--- a/eric5.e4p	Sun Jan 09 14:25:16 2011 +0100
+++ b/eric5.e4p	Sun Jan 09 18:16:46 2011 +0100
@@ -843,6 +843,12 @@
     <Source>UtilitiesPython2/Tabnanny.py</Source>
     <Source>UtilitiesPython2/TabnannyChecker.py</Source>
     <Source>ThirdParty/Pygments/pygments/lexers/hdl.py</Source>
+    <Source>Plugins/CheckerPlugins/Pep8/__init__.py</Source>
+    <Source>Plugins/CheckerPlugins/Pep8/pep8.py</Source>
+    <Source>Plugins/CheckerPlugins/Pep8/Pep8Dialog.py</Source>
+    <Source>Plugins/CheckerPlugins/Pep8/Pep8Checker.py</Source>
+    <Source>Plugins/PluginPep8Checker.py</Source>
+    <Source>Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.py</Source>
   </Sources>
   <Forms>
     <Form>PyUnit/UnittestDialog.ui</Form>
@@ -1077,6 +1083,8 @@
     <Form>Helpviewer/Download/DownloadManager.ui</Form>
     <Form>Preferences/ConfigurationPages/TrayStarterPage.ui</Form>
     <Form>Helpviewer/SslCertificatesDialog.ui</Form>
+    <Form>Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui</Form>
+    <Form>Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui</Form>
   </Forms>
   <Translations>
     <Translation>i18n/eric5_cs.qm</Translation>
--- a/i18n/eric5_cs.ts	Sun Jan 09 14:25:16 2011 +0100
+++ b/i18n/eric5_cs.ts	Sun Jan 09 18:16:46 2011 +0100
@@ -6824,7 +6824,7 @@
         <translation>Editovat breakpoint...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4023"/>
+        <location filename="QScintilla/Editor.py" line="4024"/>
         <source>Enable breakpoint</source>
         <translation>Aktivovat breakpoint</translation>
     </message>
@@ -6914,202 +6914,202 @@
         <translation>Soubor je modifikován</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion</source>
         <translation>Autodoplňování</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Autodoplňování není dostupné protože zdrojová část autodoplňování nebyla nalezena.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4026"/>
+        <location filename="QScintilla/Editor.py" line="4027"/>
         <source>Disable breakpoint</source>
         <translation>Deaktivovat breakpoint</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor s pokrytím kódu</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Zobrazit poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4351"/>
+        <location filename="QScintilla/Editor.py" line="4352"/>
         <source>All lines have been covered.</source>
         <translation>Všechny řádky byly pokryty.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>There is no coverage file available.</source>
         <translation>Soubor s pokrytím není dostupný.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>Syntax Error</source>
         <translation>Chyba syntaxe</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>No syntax error message available.</source>
         <translation>Hlášení syntaktické chyby není dostupné.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Macro Name</source>
         <translation>Název makra</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Select a macro name:</source>
         <translation>Vyberte název makra:</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4815"/>
+        <location filename="QScintilla/Editor.py" line="4818"/>
         <source>Load macro file</source>
         <translation>Načíst soubor makra</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Macro files (*.macro)</source>
         <translation>Macro soubory (*.macro)</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>Error loading macro</source>
         <translation>Chyba při načítání makra</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Save macro file</source>
         <translation>Uložit soubor s makrem</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>Save macro</source>
         <translation>Uložit makro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>Error saving macro</source>
         <translation>Chyba při ukládání makra</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Start Macro Recording</source>
         <translation>Spustit záznam makra</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Macro recording is already active. Start new?</source>
         <translation>Nahrávání makra již probíhá. Spustit nové?</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Macro Recording</source>
         <translation>Záznam makra</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Enter name of the macro:</source>
         <translation>Vložte název makra:</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5041"/>
+        <location filename="QScintilla/Editor.py" line="5044"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will loose your changes upon reopening it.</source>
         <translation>&lt;br&gt;&lt;b&gt;Pozor:&lt;/b&gt; Ztratíte všechny změny pokud jej znovu otevřete.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5045"/>
+        <location filename="QScintilla/Editor.py" line="5048"/>
         <source>File changed</source>
         <translation>Soubor změněn</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5259"/>
+        <location filename="QScintilla/Editor.py" line="5262"/>
         <source>Resources</source>
         <translation>Zdroje</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5261"/>
+        <location filename="QScintilla/Editor.py" line="5264"/>
         <source>Add file...</source>
         <translation>Přidat soubor...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5263"/>
+        <location filename="QScintilla/Editor.py" line="5266"/>
         <source>Add files...</source>
         <translation>Přidat soubory...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5265"/>
+        <location filename="QScintilla/Editor.py" line="5268"/>
         <source>Add aliased file...</source>
         <translation>Přidat zástupce souboru...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5267"/>
-        <source>Add localized resource...</source>
-        <translation>Přidat lokalizované resource...</translation>
-    </message>
-    <message>
         <location filename="QScintilla/Editor.py" line="5270"/>
+        <source>Add localized resource...</source>
+        <translation>Přidat lokalizované resource...</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5273"/>
         <source>Add resource frame</source>
         <translation>Přidat resource frame</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5288"/>
+        <location filename="QScintilla/Editor.py" line="5291"/>
         <source>Add file resource</source>
         <translation>Přidat soubor resource</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5304"/>
+        <location filename="QScintilla/Editor.py" line="5307"/>
         <source>Add file resources</source>
         <translation>Přidat soubory resource</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
+        <location filename="QScintilla/Editor.py" line="5334"/>
         <source>Add aliased file resource</source>
         <translation>Přidat zástupce souboru resource</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
+        <location filename="QScintilla/Editor.py" line="5395"/>
         <source>Package Diagram</source>
         <translation>Diagram balíčku</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
+        <location filename="QScintilla/Editor.py" line="5395"/>
         <source>Include class attributes?</source>
         <translation>Včetně atributů třídy?</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
+        <location filename="QScintilla/Editor.py" line="5424"/>
         <source>Application Diagram</source>
         <translation>Diagram aplikace</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
+        <location filename="QScintilla/Editor.py" line="5424"/>
         <source>Include module names?</source>
         <translation>Včetně jmen modulů?</translation>
     </message>
@@ -7129,12 +7129,12 @@
         <translation>Nebyl zadán forám exportu. Zrušeno....</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Imports Diagram</source>
         <translation>Importovat diagram</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Include imports from external modules?</source>
         <translation>Zahrnout importy z externích modulů?</translation>
     </message>
@@ -7209,7 +7209,7 @@
         <translation>Použít Pygments lexer.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5653"/>
+        <location filename="QScintilla/Editor.py" line="5656"/>
         <source>Check spelling...</source>
         <translation>Zatrhnout kontrolu...</translation>
     </message>
@@ -7219,12 +7219,12 @@
         <translation>Zatrhnout výběr kontroly...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5655"/>
+        <location filename="QScintilla/Editor.py" line="5658"/>
         <source>Add to dictionary</source>
         <translation>Přidat do slovníku</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5657"/>
+        <location filename="QScintilla/Editor.py" line="5660"/>
         <source>Ignore All</source>
         <translation>Ignorovat vše</translation>
     </message>
@@ -7269,12 +7269,12 @@
         <translation type="obsolete">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4829"/>
+        <location filename="QScintilla/Editor.py" line="4832"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; je poškozen.&lt;/p&gt;</translation>
     </message>
@@ -7284,27 +7284,27 @@
         <translation type="obsolete">&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;So souboru s makrem &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5036"/>
+        <location filename="QScintilla/Editor.py" line="5039"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric5. Reread it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; byl změněn po té co již byl načten do eric5. Znovu načíst?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5124"/>
+        <location filename="QScintilla/Editor.py" line="5127"/>
         <source>{0} (ro)</source>
         <translation>{0} (ro)</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
+        <location filename="QScintilla/Editor.py" line="5334"/>
         <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
         <translation>Zástupce pro soubor &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
@@ -7329,12 +7329,12 @@
         <translation>Vyčistit varování</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>py3flakes Warning</source>
         <translation>py3flakes varování</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>No py3flakes warning message available.</source>
         <translation>Varování py3flakes není dostupné.</translation>
     </message>
@@ -7344,17 +7344,17 @@
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4732"/>
+        <location filename="QScintilla/Editor.py" line="4735"/>
         <source>Warning: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4738"/>
+        <location filename="QScintilla/Editor.py" line="4741"/>
         <source>Error: {0}</source>
         <translation type="unfinished">Chyby: {0}</translation>
     </message>
@@ -23256,6 +23256,215 @@
     </message>
 </context>
 <context>
+    <name>Pep8CheckerPlugin</name>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>Check PEP 8 Compliance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>PEP &amp;8 Compliance...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="79"/>
+        <source>Check PEP 8 compliance.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="175"/>
+        <source>&lt;b&gt;Check PEP 8 Compliance...&lt;/b&gt;&lt;p&gt;This checks Python files for compliance to the conventions given in PEP 8.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Pep8CodeSelectionDialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="14"/>
+        <source>PEP 8 Message Codes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="23"/>
+        <source>Select the message codes from the list:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="30"/>
+        <source>Select the message codes from this table</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="55"/>
+        <source>Code</source>
+        <translation type="unfinished">Kód</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="60"/>
+        <source>Message</source>
+        <translation type="unfinished">Zpráva</translation>
+    </message>
+</context>
+<context>
+    <name>Pep8Dialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="14"/>
+        <source>PEP 8 Check Result</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="17"/>
+        <source>&lt;b&gt;PEP 8 Check Results&lt;/b&gt;
+&lt;p&gt;This dialog shows the results of the PEP 8 check. Double clicking an
+entry will open an editor window and position the cursor at the respective line and position.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="34"/>
+        <source>Exclude Files:</source>
+        <translation type="unfinished">Nevkládat soubory:</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="41"/>
+        <source>Enter filename patterns of files to be excluded separated by a comma</source>
+        <translation type="unfinished">Zadejte patterny jmen souborů oddělené čárkami, které se nemají vkládat</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="48"/>
+        <source>Press to clear the filter edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="68"/>
+        <source>Press to start the PEP 8 check run</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="71"/>
+        <source>Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="78"/>
+        <source>Exclude Messages:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="92"/>
+        <source>Press to clear the exclude messages edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="149"/>
+        <source>Press to select the messages from a list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="152"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="139"/>
+        <source>Press to clear the include messages edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="161"/>
+        <source>Select to repeat each message type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="164"/>
+        <source>Repeat messages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="209"/>
+        <source>&lt;b&gt;Result List&lt;/b&gt;
+&lt;p&gt;This list shows the results of the PEP 8 check. Double clicking
+an entry will open this entry in an editor window and position the cursor at
+the respective line and position.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="225"/>
+        <source>File/Line</source>
+        <translation type="unfinished">Soubor/Řádek</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="230"/>
+        <source>Code</source>
+        <translation type="unfinished">Kód</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="235"/>
+        <source>Message</source>
+        <translation type="unfinished">Zpráva</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="243"/>
+        <source>Shows the progress of the PEP 8 check action</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="50"/>
+        <source>Show</source>
+        <translation type="unfinished">Zobrazit</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="52"/>
+        <source>Press to show all files containing an issue</source>
+        <translation type="unfinished">Stisknout pro zobrazení všech souborů, které obsahují problém</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="233"/>
+        <source>Error: {0}</source>
+        <translation type="unfinished">Chyby: {0}</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="286"/>
+        <source>No issues found.</source>
+        <translation type="unfinished">Žádné problémy nenalezeny.</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="85"/>
+        <source>Enter message codes or categories to be excluded separated by a comma</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="132"/>
+        <source>Enter message codes or categories to be included separated by a comma</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="184"/>
+        <source>Press to load the default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="187"/>
+        <source>Load Defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="194"/>
+        <source>Press to store the current values as defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="197"/>
+        <source>Store Defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="125"/>
+        <source>Included Messages:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PixmapDiagram</name>
     <message>
         <location filename="Graphics/PixmapDiagram.py" line="159"/>
@@ -23973,17 +24182,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="Preferences/__init__.py" line="896"/>
+        <location filename="Preferences/__init__.py" line="895"/>
         <source>Export Preferences</source>
         <translation>Předvolby exportu</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Import Preferences</source>
         <translation>Předvolby importu</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -29215,7 +29424,7 @@
         <translation>Č.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
@@ -29292,7 +29501,7 @@
         <translation>Shell jazyk &quot;{0}&quot; není podporován.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
@@ -35533,7 +35742,7 @@
         <translation>Stisknout pro zobrazení všech souborů, které obsahují problém</translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="253"/>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269"/>
         <source>No issues found.</source>
         <translation>Žádné problémy nenalezeny.</translation>
     </message>
@@ -35562,6 +35771,11 @@
         <source>Start</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="188"/>
+        <source>Error: {0}</source>
+        <translation type="unfinished">Chyby: {0}</translation>
+    </message>
 </context>
 <context>
     <name>SyntaxCheckerPlugin</name>
@@ -35999,12 +36213,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="255"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="256"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="280"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="281"/>
         <source>Python2 interpreter did not finish within 15s.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -40706,17 +40920,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="956"/>
+        <location filename="Utilities/__init__.py" line="959"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Můžete použít %-kódy a rezervovaná místa ve stringu. Podporované kódy jsou:&lt;table&gt;&lt;tr&gt;    &lt;td&gt;%C&lt;/td&gt;    &lt;td&gt;sloupec kurzoru v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%D&lt;/td&gt;    &lt;td&gt;adresář v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%F&lt;/td&gt;    &lt;td&gt;jméno souboru v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%H&lt;/td&gt;    &lt;td&gt;home adresář aktuálního uživatele&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%L&lt;/td&gt;    &lt;td&gt;řádek s kurzorem v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%P&lt;/td&gt;    &lt;td&gt;cesta aktuálního projektu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%S&lt;/td&gt;    &lt;td&gt;vybraný text v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%U&lt;/td&gt;    &lt;td&gt;uživatelské jméno aktuálního uživatele&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%%&lt;/td&gt;    &lt;td&gt;znak procenta&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1128"/>
+        <location filename="Utilities/__init__.py" line="1131"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1173"/>
+        <location filename="Utilities/__init__.py" line="1176"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43704,17 +43918,17 @@
         <translation>Soubor změněn</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3605"/>
+        <location filename="ViewManager/ViewManager.py" line="3606"/>
         <source>&amp;Clear</source>
         <translation>&amp;Vyčistit</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3601"/>
+        <location filename="ViewManager/ViewManager.py" line="3602"/>
         <source>&amp;Add</source>
         <translation>Přid&amp;at</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3603"/>
+        <location filename="ViewManager/ViewManager.py" line="3604"/>
         <source>&amp;Edit...</source>
         <translation>&amp;Edit...</translation>
     </message>
@@ -43938,17 +44152,17 @@
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; obsahuje neuložené změny.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3260"/>
+        <location filename="ViewManager/ViewManager.py" line="3261"/>
         <source>File: {0}</source>
         <translation>Soubor: {0}</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3264"/>
+        <location filename="ViewManager/ViewManager.py" line="3265"/>
         <source>Line: {0:5}</source>
         <translation>Řádek: {0:5}</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3269"/>
+        <location filename="ViewManager/ViewManager.py" line="3270"/>
         <source>Pos: {0:5}</source>
         <translation>Poz: {0:5}</translation>
     </message>
@@ -44686,6 +44900,184 @@
     </message>
 </context>
 <context>
+    <name>pep8</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="164"/>
+        <source>indentation contains mixed spaces and tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="166"/>
+        <source>indentation is not a multiple of four</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="168"/>
+        <source>expected an indented block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="170"/>
+        <source>unexpected indentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="172"/>
+        <source>indentation contains tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="174"/>
+        <source>whitespace after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="180"/>
+        <source>whitespace before &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="182"/>
+        <source>multiple spaces before operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="184"/>
+        <source>multiple spaces after operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="186"/>
+        <source>tab before operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="188"/>
+        <source>tab after operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="190"/>
+        <source>missing whitespace around operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="192"/>
+        <source>missing whitespace after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="194"/>
+        <source>multiple spaces after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="196"/>
+        <source>tab after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="198"/>
+        <source>no spaces around keyword / parameter equals</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="200"/>
+        <source>at least two spaces before inline comment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="202"/>
+        <source>inline comment should start with &apos;# &apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="204"/>
+        <source>trailing whitespace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="206"/>
+        <source>no newline at end of file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="208"/>
+        <source>blank line contains whitespace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="210"/>
+        <source>expected 1 blank line, found 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="212"/>
+        <source>expected 2 blank lines, found {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="214"/>
+        <source>too many blank lines ({0})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="216"/>
+        <source>blank lines found after function decorator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="218"/>
+        <source>blank line at end of file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="220"/>
+        <source>multiple imports on one line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="222"/>
+        <source>line too long ({0} characters)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="224"/>
+        <source>.has_key() is deprecated, use &apos;in&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="226"/>
+        <source>deprecated form of raising exception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="228"/>
+        <source>&apos;&lt;&gt;&apos; is deprecated, use &apos;!=&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="230"/>
+        <source>backticks are deprecated, use &apos;repr()&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="232"/>
+        <source>multiple statements on one line (colon)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="234"/>
+        <source>multiple statements on one line (semicolon)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="264"/>
+        <source>no message for this code defined</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>py3Flakes</name>
     <message>
         <location filename="Utilities/py3flakes/messages.py" line="51"/>
Binary file i18n/eric5_de.qm has changed
--- a/i18n/eric5_de.ts	Sun Jan 09 14:25:16 2011 +0100
+++ b/i18n/eric5_de.ts	Sun Jan 09 18:16:46 2011 +0100
@@ -6567,12 +6567,12 @@
         <translation>Drucken abgebrochen</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5045"/>
+        <location filename="QScintilla/Editor.py" line="5048"/>
         <source>File changed</source>
         <translation>Datei geändert</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5041"/>
+        <location filename="QScintilla/Editor.py" line="5044"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will loose your changes upon reopening it.</source>
         <translation>&lt;br&gt;&lt;b&gt;Warnung:&lt;/b&gt; Vorgenommenen Änderungen gehen beim neu einlesen verloren.</translation>
     </message>
@@ -6637,57 +6637,57 @@
         <translation>Zurück zum letzten gesichert Zustand</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Macro Name</source>
         <translation>Makro Name</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Select a macro name:</source>
         <translation>Wähle einen Makro Namen:</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Macro files (*.macro)</source>
         <translation>Makro Dateien (*.macro)</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4815"/>
+        <location filename="QScintilla/Editor.py" line="4818"/>
         <source>Load macro file</source>
         <translation>Lade Makro Datei</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>Error loading macro</source>
         <translation>Fehler beim Makro Laden</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Save macro file</source>
         <translation>Makro Datei schreiben</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>Save macro</source>
         <translation>Makro speichern</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>Error saving macro</source>
         <translation>Fehler beim Makro speichern</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Start Macro Recording</source>
         <translation>Makroaufzeichnung starten</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Macro Recording</source>
         <translation>Makroaufzeichnung</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Enter name of the macro:</source>
         <translation>Gib einen Namen für das Makro ein:</translation>
     </message>
@@ -6747,32 +6747,32 @@
         <translation>Haltepunkt bearbeiten...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4023"/>
+        <location filename="QScintilla/Editor.py" line="4024"/>
         <source>Enable breakpoint</source>
         <translation>Haltepunkt aktivieren</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4026"/>
+        <location filename="QScintilla/Editor.py" line="4027"/>
         <source>Disable breakpoint</source>
         <translation>Haltepunkt deaktivieren</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Code Coverage</source>
         <translation>Quelltext Abdeckung</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Please select a coverage file</source>
         <translation>Bitte wählen sie eine Datei mit Abdeckungsdaten</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Profile Data</source>
         <translation>Profildaten</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Please select a profile file</source>
         <translation>Bitte wählen sie eine Datei mit Profildaten</translation>
     </message>
@@ -6782,12 +6782,12 @@
         <translation>Autom. Vervollständigung aktiv</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion</source>
         <translation>Autom. Vervollständigung</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Die automatische Vervollständigung ist nicht verfügbar, da keine Quelle gesetzt ist.</translation>
     </message>
@@ -6822,7 +6822,7 @@
         <translation>Autom. Speicherung aktiv</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>Drop Error</source>
         <translation>Drop Fehler</translation>
     </message>
@@ -6832,12 +6832,12 @@
         <translation>Zeige Syntaxfehlermeldung</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>Syntax Error</source>
         <translation>Syntaxfehler</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>No syntax error message available.</source>
         <translation>Keine Syntaxfehlermeldung verfügbar.</translation>
     </message>
@@ -6867,17 +6867,17 @@
         <translation>Vorige nichtabgedeckte Zeile</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Zeilen ohne Abdeckung Markieren</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4351"/>
+        <location filename="QScintilla/Editor.py" line="4352"/>
         <source>All lines have been covered.</source>
         <translation>Alle Zeilen sind abgedeckt.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>There is no coverage file available.</source>
         <translation>Es gibt keine Datei mit Abdeckungsinformationen.</translation>
     </message>
@@ -6887,22 +6887,22 @@
         <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; enthält ungesicherte Änderungen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4829"/>
+        <location filename="QScintilla/Editor.py" line="4832"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Makro Datei &lt;b&gt;{0}&lt;/b&gt; kann nicht gelesen werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Makro Datei &lt;b&gt;{0}&lt;/b&gt; ist zerstört.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Makro Datei &lt;b&gt;{0}&lt;/b&gt; kann nicht geschrieben werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; ist keine Datei.&lt;/p&gt;</translation>
     </message>
@@ -6947,82 +6947,82 @@
         <translation>Keine Sprache</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5124"/>
+        <location filename="QScintilla/Editor.py" line="5127"/>
         <source>{0} (ro)</source>
         <translation>{0} (ro)</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5259"/>
+        <location filename="QScintilla/Editor.py" line="5262"/>
         <source>Resources</source>
         <translation>Resourcen</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5261"/>
+        <location filename="QScintilla/Editor.py" line="5264"/>
         <source>Add file...</source>
         <translation>Datei hinzufügen...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5263"/>
+        <location filename="QScintilla/Editor.py" line="5266"/>
         <source>Add files...</source>
         <translation>Dateien hinzufügen...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5265"/>
+        <location filename="QScintilla/Editor.py" line="5268"/>
         <source>Add aliased file...</source>
         <translation>Aliased Datei hinzufügen...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5267"/>
-        <source>Add localized resource...</source>
-        <translation>Lokalisierte Resource hinzufügen...</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5288"/>
-        <source>Add file resource</source>
-        <translation>Dateiresource hinzufügen</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5304"/>
-        <source>Add file resources</source>
-        <translation>Dateiresourcen hinzufügen</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
-        <source>Add aliased file resource</source>
-        <translation>Aliased Dateiresourcen hinzufügen</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
-        <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
-        <translation>Alias für Datei &lt;b&gt;{0}&lt;/b&gt;:</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
-        <source>Package Diagram</source>
-        <translation>Package-Diagramm</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
-        <source>Include class attributes?</source>
-        <translation>Klassenattribute anzeigen?</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
-        <source>Application Diagram</source>
-        <translation>Applikations-Diagramm</translation>
-    </message>
-    <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
-        <source>Include module names?</source>
-        <translation>Modulnamen anzeigen?</translation>
-    </message>
-    <message>
         <location filename="QScintilla/Editor.py" line="5270"/>
+        <source>Add localized resource...</source>
+        <translation>Lokalisierte Resource hinzufügen...</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5291"/>
+        <source>Add file resource</source>
+        <translation>Dateiresource hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5307"/>
+        <source>Add file resources</source>
+        <translation>Dateiresourcen hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5334"/>
+        <source>Add aliased file resource</source>
+        <translation>Aliased Dateiresourcen hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5334"/>
+        <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
+        <translation>Alias für Datei &lt;b&gt;{0}&lt;/b&gt;:</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5395"/>
+        <source>Package Diagram</source>
+        <translation>Package-Diagramm</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5395"/>
+        <source>Include class attributes?</source>
+        <translation>Klassenattribute anzeigen?</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5424"/>
+        <source>Application Diagram</source>
+        <translation>Applikations-Diagramm</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5424"/>
+        <source>Include module names?</source>
+        <translation>Modulnamen anzeigen?</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5273"/>
         <source>Add resource frame</source>
         <translation>Resource Rahmen hinzufügen</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Macro recording is already active. Start new?</source>
         <translation>Eine Makroaufzeichnung ist bereits aktiv. Neu starten?</translation>
     </message>
@@ -7077,12 +7077,12 @@
         <translation>Kein Exportformat angegeben. Abbruch...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Imports Diagram</source>
         <translation>Imports Diagramm</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Include imports from external modules?</source>
         <translation>Imports externer Module anzeigen?</translation>
     </message>
@@ -7162,7 +7162,7 @@
         <translation>Wähle den anzuwendenden Pygments Lexer.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5653"/>
+        <location filename="QScintilla/Editor.py" line="5656"/>
         <source>Check spelling...</source>
         <translation>Rechtschreibprüfung...</translation>
     </message>
@@ -7172,12 +7172,12 @@
         <translation>Rechtschreibprüfung für Auswahl...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5655"/>
+        <location filename="QScintilla/Editor.py" line="5658"/>
         <source>Add to dictionary</source>
         <translation>Zum Wörterbuch hinzufügen</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5657"/>
+        <location filename="QScintilla/Editor.py" line="5660"/>
         <source>Ignore All</source>
         <translation>Alle ignorieren</translation>
     </message>
@@ -7197,7 +7197,7 @@
         <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gesichert werden.&lt;br/&gt;Grund: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5036"/>
+        <location filename="QScintilla/Editor.py" line="5039"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric5. Reread it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; wurde geändert, während sie in eric5 geöffnet war. Neu einlesen?&lt;/p&gt;</translation>
     </message>
@@ -7222,12 +7222,12 @@
         <translation>Warnungen löschen</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>py3flakes Warning</source>
         <translation>py3flakes Warnung</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>No py3flakes warning message available.</source>
         <translation>Keine Py3flakes Warnung verfügbar.</translation>
     </message>
@@ -7237,17 +7237,17 @@
         <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Makro Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4732"/>
+        <location filename="QScintilla/Editor.py" line="4735"/>
         <source>Warning: {0}</source>
         <translation>Warnung: {0}</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4738"/>
+        <location filename="QScintilla/Editor.py" line="4741"/>
         <source>Error: {0}</source>
         <translation>Fehler: {0}</translation>
     </message>
@@ -22909,6 +22909,221 @@
     </message>
 </context>
 <context>
+    <name>Pep8CheckerPlugin</name>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>Check PEP 8 Compliance</source>
+        <translation>Prüfe Einhaltung von PEP 8</translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>PEP &amp;8 Compliance...</source>
+        <translation>PEP &amp;8 Einhaltung...</translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="79"/>
+        <source>Check PEP 8 compliance.</source>
+        <translation>Prüfe Einhaltung von PEP 8.</translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="175"/>
+        <source>&lt;b&gt;Check PEP 8 Compliance...&lt;/b&gt;&lt;p&gt;This checks Python files for compliance to the conventions given in PEP 8.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Prüfe Einhaltung von PEP 8...&lt;/b&gt;&lt;p&gt;Dies überprüft Python Dateien auf Einhaltung der Konventionen aus PEP 8.&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>Pep8CodeSelectionDialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="14"/>
+        <source>PEP 8 Message Codes</source>
+        <translation>PEP 8 Nachrichtenschlüssel</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="23"/>
+        <source>Select the message codes from the list:</source>
+        <translation>Wähle die Nachrichtenschlüssel aus der Liste:</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="30"/>
+        <source>Select the message codes from this table</source>
+        <translation>Wähle die Nachrichtenschlüssel aus dieser Tabelle</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="55"/>
+        <source>Code</source>
+        <translation>Schlüssel</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="60"/>
+        <source>Message</source>
+        <translation>Nachricht</translation>
+    </message>
+</context>
+<context>
+    <name>Pep8Dialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="14"/>
+        <source>PEP 8 Check Result</source>
+        <translation>PEP 8 Prüfergebnisse</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="17"/>
+        <source>&lt;b&gt;PEP 8 Check Results&lt;/b&gt;
+&lt;p&gt;This dialog shows the results of the PEP 8 check. Double clicking an
+entry will open an editor window and position the cursor at the respective line and position.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;PEP 8 Prüfergebnisse&lt;/b&gt;
+&lt;p&gt;Dieser Dialog zeigt die Resultate der PEP 8 Prüfung. Ein Doppelklick auf
+einen Eintrag öffnet ein Editorfenster und positioniert den Cursor auf die entsprechende
+Zeile und Position.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="34"/>
+        <source>Exclude Files:</source>
+        <translation>Ignoriere Dateien:</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="41"/>
+        <source>Enter filename patterns of files to be excluded separated by a comma</source>
+        <translation>Gib Dateimuster getrennt durch Komma von Dateien ein, die ignoriert werden sollen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="48"/>
+        <source>Press to clear the filter edit</source>
+        <translation>Drücken, um den Filtertext zu löschen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="68"/>
+        <source>Press to start the PEP 8 check run</source>
+        <translation>Drücken, um die PEP 8 Prüfung zu starten</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="71"/>
+        <source>Start</source>
+        <translation>Starten</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="78"/>
+        <source>Exclude Messages:</source>
+        <translation>Ignorierte Nachrichten:</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="92"/>
+        <source>Press to clear the exclude messages edit</source>
+        <translation>Drücken, um die Liste ignorierter Nachrichten zu löschen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="149"/>
+        <source>Press to select the messages from a list</source>
+        <translation>Drücken, um die Nachrichten aus einer Liste zu wählen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="152"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="139"/>
+        <source>Press to clear the include messages edit</source>
+        <translation>Drücken, um die Liste ausgewählter Nachrichten zu löschen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="161"/>
+        <source>Select to repeat each message type</source>
+        <translation>Auswählen, um Wiederholungen eines Nachrichtentyps zuzulassen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="164"/>
+        <source>Repeat messages</source>
+        <translation>Nachrichten wiederholen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="209"/>
+        <source>&lt;b&gt;Result List&lt;/b&gt;
+&lt;p&gt;This list shows the results of the PEP 8 check. Double clicking
+an entry will open this entry in an editor window and position the cursor at
+the respective line and position.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Resultatliste&lt;/b&gt;
+&lt;p&gt;Diese Liste zeigt die Resultate der PEP 8 Prüfung. Ein Doppelklick auf
+einen Eintrag öffnet ein Editorfenster und positioniert den Cursor auf die entsprechende
+Zeile und Position.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="225"/>
+        <source>File/Line</source>
+        <translation>Datei/Zeile</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="230"/>
+        <source>Code</source>
+        <translation>Schlüssel</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="235"/>
+        <source>Message</source>
+        <translation>Nachricht</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="243"/>
+        <source>Shows the progress of the PEP 8 check action</source>
+        <translation>Zeigt den Fortschritt der PEP 8 Prüfung an</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="50"/>
+        <source>Show</source>
+        <translation>Zeige</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="52"/>
+        <source>Press to show all files containing an issue</source>
+        <translation>Drücken, um alle Dateien mit Problemen anzuzeigen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="233"/>
+        <source>Error: {0}</source>
+        <translation>Fehler: {0}</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="286"/>
+        <source>No issues found.</source>
+        <translation>Keine Probleme gefunden.</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="85"/>
+        <source>Enter message codes or categories to be excluded separated by a comma</source>
+        <translation>Gib die Nachrichtenschlüssel oder -kategorien für auszuschließende Nachrichten durch Komma getrennt ein</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="132"/>
+        <source>Enter message codes or categories to be included separated by a comma</source>
+        <translation>Gib die Nachrichtenschlüssel oder -kategorien für ausgewählte Nachrichten durch Komma getrennt ein</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="184"/>
+        <source>Press to load the default values</source>
+        <translation>Drücken, um Standarwerte zu laden</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="187"/>
+        <source>Load Defaults</source>
+        <translation>Standards laden</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="194"/>
+        <source>Press to store the current values as defaults</source>
+        <translation>Drücken, um die aktuellen Werte als Standard zu speichern</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="197"/>
+        <source>Store Defaults</source>
+        <translation>Standards speichern</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="125"/>
+        <source>Included Messages:</source>
+        <translation>Ausgewählte Nachrichten:</translation>
+    </message>
+</context>
+<context>
     <name>PixmapDiagram</name>
     <message>
         <location filename="Graphics/PixmapDiagram.py" line="159"/>
@@ -23625,17 +23840,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="Preferences/__init__.py" line="896"/>
+        <location filename="Preferences/__init__.py" line="895"/>
         <source>Export Preferences</source>
         <translation>Konfiguration exportieren</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Import Preferences</source>
         <translation>Konfiguration importieren</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>Properties Dateien (*.ini);;Alle Dateien (*)</translation>
     </message>
@@ -28799,7 +29014,7 @@
         <translation>Zurücksetzen und Löschen</translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>Drop Error</source>
         <translation>Drop Fehler</translation>
     </message>
@@ -28809,7 +29024,7 @@
         <translation>Nr.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; ist keine Datei.&lt;/p&gt;</translation>
     </message>
@@ -35155,7 +35370,7 @@
         <translation>Drücken, um alle Dateien mit Problemen anzuzeigen</translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="253"/>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269"/>
         <source>No issues found.</source>
         <translation>Keine Probleme gefunden.</translation>
     </message>
@@ -35184,6 +35399,11 @@
         <source>Start</source>
         <translation>Starten</translation>
     </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="188"/>
+        <source>Error: {0}</source>
+        <translation>Fehler: {0}</translation>
+    </message>
 </context>
 <context>
     <name>SyntaxCheckerPlugin</name>
@@ -35620,12 +35840,12 @@
         <translation>Starten</translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="255"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="256"/>
         <source>Python2 interpreter not configured.</source>
         <translation>Kein Python2 Interpreter konfiguriert.</translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="280"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="281"/>
         <source>Python2 interpreter did not finish within 15s.</source>
         <translation>Python2 Interpreter wurde nicht innerhalb von 15s beendet.</translation>
     </message>
@@ -40290,17 +40510,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="956"/>
+        <location filename="Utilities/__init__.py" line="959"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sie können %-Codes als Platzhalter in der Eingabe verwenden. Unterstützte Codes sind:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;Spalte des Cursor des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;Verzeichnis des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;Dateiname des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;Home-Verzeichnis des aktullen Nutzers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;Zeile des Cursor des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;Pfad des aktuellen Projektes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selektierter Text des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;Nutzername des aktuellen Nutzers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;das Prozentzeichen&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1128"/>
+        <location filename="Utilities/__init__.py" line="1131"/>
         <source>Python2 interpreter not configured.</source>
         <translation>Kein Python2 Interpreter konfiguriert.</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1173"/>
+        <location filename="Utilities/__init__.py" line="1176"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation>Python2 Interpreter wurde nicht innerhalb von 30s beendet.</translation>
     </message>
@@ -41006,7 +41226,7 @@
 <context>
     <name>ViewManager</name>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3260"/>
+        <location filename="ViewManager/ViewManager.py" line="3261"/>
         <source>File: {0}</source>
         <translation>Datei: {0}</translation>
     </message>
@@ -42436,17 +42656,17 @@
         <translation>Ge&amp;merkte Dateien</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3605"/>
+        <location filename="ViewManager/ViewManager.py" line="3606"/>
         <source>&amp;Clear</source>
         <translation>&amp;Löschen</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3601"/>
+        <location filename="ViewManager/ViewManager.py" line="3602"/>
         <source>&amp;Add</source>
         <translation>&amp;Hinzufügen</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3603"/>
+        <location filename="ViewManager/ViewManager.py" line="3604"/>
         <source>&amp;Edit...</source>
         <translation>&amp;Bearbeiten...</translation>
     </message>
@@ -43469,12 +43689,12 @@
         <translation>Rechtschreibung</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3264"/>
+        <location filename="ViewManager/ViewManager.py" line="3265"/>
         <source>Line: {0:5}</source>
         <translation>Zeile: {0:5}</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3269"/>
+        <location filename="ViewManager/ViewManager.py" line="3270"/>
         <source>Pos: {0:5}</source>
         <translation>Pos: {0:5}</translation>
     </message>
@@ -44182,6 +44402,184 @@
     </message>
 </context>
 <context>
+    <name>pep8</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="164"/>
+        <source>indentation contains mixed spaces and tabs</source>
+        <translation>Einrückung enthält einen Mix aus Leerzeichen und Tabulatoren</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="166"/>
+        <source>indentation is not a multiple of four</source>
+        <translation>Einrückung ist kein Mehrfaches von Vier</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="168"/>
+        <source>expected an indented block</source>
+        <translation>ein eingerückter Block wurde erwartet</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="170"/>
+        <source>unexpected indentation</source>
+        <translation>unerwartete Einrückung</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="172"/>
+        <source>indentation contains tabs</source>
+        <translation>Einrückung enthält Tabulatoren</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="174"/>
+        <source>whitespace after &apos;{0}&apos;</source>
+        <translation>Leerzeichen nach &apos;{0}&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="180"/>
+        <source>whitespace before &apos;{0}&apos;</source>
+        <translation>Leerzeichen vor &apos;{0}&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="182"/>
+        <source>multiple spaces before operator</source>
+        <translation>mehrfache Leerzeichen vor Operator</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="184"/>
+        <source>multiple spaces after operator</source>
+        <translation>mehrfache Leerzeichen nach Operator</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="186"/>
+        <source>tab before operator</source>
+        <translation>Tabulator vor Operator</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="188"/>
+        <source>tab after operator</source>
+        <translation>Tabulator nach Operator</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="190"/>
+        <source>missing whitespace around operator</source>
+        <translation>fehlende Leerzeichen um Operator</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="192"/>
+        <source>missing whitespace after &apos;{0}&apos;</source>
+        <translation>fehlende Leerzeichen nach &apos;{0}&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="194"/>
+        <source>multiple spaces after &apos;{0}&apos;</source>
+        <translation>mehrfache Leerzeichen nach &apos;{0}&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="196"/>
+        <source>tab after &apos;{0}&apos;</source>
+        <translation>Tabulator nach &apos;{0}&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="198"/>
+        <source>no spaces around keyword / parameter equals</source>
+        <translation>keine Leerzeichen um Schlüsselwort- / Parameter-Gleichheitszeichen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="200"/>
+        <source>at least two spaces before inline comment</source>
+        <translation>mindestens zwei Leerzeichen vor einem Inline-Kommentar</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="202"/>
+        <source>inline comment should start with &apos;# &apos;</source>
+        <translation>Inline-Kommentar sollte mit &apos;# &apos; beginnen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="204"/>
+        <source>trailing whitespace</source>
+        <translation>abschließende Leerzeichen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="206"/>
+        <source>no newline at end of file</source>
+        <translation>kein Zeilenumbruch am Dateiende</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="208"/>
+        <source>blank line contains whitespace</source>
+        <translation>leere Zeile enthält Leerzeichen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="210"/>
+        <source>expected 1 blank line, found 0</source>
+        <translation>erwartete 1 leere Zeile, 0 gefunden</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="212"/>
+        <source>expected 2 blank lines, found {0}</source>
+        <translation>erwartete 2 leere Zeilen, {0} gefunden</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="214"/>
+        <source>too many blank lines ({0})</source>
+        <translation>zu viele leere Zeilen ({0})</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="216"/>
+        <source>blank lines found after function decorator</source>
+        <translation>leere Zeilen nach Funktionen Dekorator gefunden</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="218"/>
+        <source>blank line at end of file</source>
+        <translation>leere Zeile am Dateiende</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="220"/>
+        <source>multiple imports on one line</source>
+        <translation>mehrfache Importe in einer Zeile</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="222"/>
+        <source>line too long ({0} characters)</source>
+        <translation>Zeile zu lang ({0} Zeichen)</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="224"/>
+        <source>.has_key() is deprecated, use &apos;in&apos;</source>
+        <translation>.has_key() ist ungültig, verwende &apos;in&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="226"/>
+        <source>deprecated form of raising exception</source>
+        <translation>ungültige Art Ausnahmen zu werfen</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="228"/>
+        <source>&apos;&lt;&gt;&apos; is deprecated, use &apos;!=&apos;</source>
+        <translation>&apos;&lt;&gt;&apos; is ungültig, verwende &apos;!=&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="230"/>
+        <source>backticks are deprecated, use &apos;repr()&apos;</source>
+        <translation>Backticks sind ungültig, verwende &apos;repr()&apos;</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="232"/>
+        <source>multiple statements on one line (colon)</source>
+        <translation>mehrere Anweisungen in einer Teile (Doppelpunkt)</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="234"/>
+        <source>multiple statements on one line (semicolon)</source>
+        <translation>mehrere Anweisungen in einer Teile (Semikolon)</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="264"/>
+        <source>no message for this code defined</source>
+        <translation>kein Schlüssel für diesen Code definiert</translation>
+    </message>
+</context>
+<context>
     <name>py3Flakes</name>
     <message>
         <location filename="Utilities/py3flakes/messages.py" line="51"/>
--- a/i18n/eric5_en.ts	Sun Jan 09 14:25:16 2011 +0100
+++ b/i18n/eric5_en.ts	Sun Jan 09 18:16:46 2011 +0100
@@ -6480,7 +6480,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5653"/>
+        <location filename="QScintilla/Editor.py" line="5656"/>
         <source>Check spelling...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6730,7 +6730,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4023"/>
+        <location filename="QScintilla/Editor.py" line="4024"/>
         <source>Enable breakpoint</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6905,282 +6905,282 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4026"/>
+        <location filename="QScintilla/Editor.py" line="4027"/>
         <source>Disable breakpoint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Code Coverage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Please select a coverage file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>Show Code Coverage Annotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4351"/>
+        <location filename="QScintilla/Editor.py" line="4352"/>
         <source>All lines have been covered.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>There is no coverage file available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Profile Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Please select a profile file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>Syntax Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>No syntax error message available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>py3flakes Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>No py3flakes warning message available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Macro Name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Select a macro name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4815"/>
+        <location filename="QScintilla/Editor.py" line="4818"/>
         <source>Load macro file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Macro files (*.macro)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>Error loading macro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4829"/>
+        <location filename="QScintilla/Editor.py" line="4832"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Save macro file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>Save macro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>Error saving macro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Start Macro Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Macro recording is already active. Start new?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Macro Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Enter name of the macro:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5036"/>
+        <location filename="QScintilla/Editor.py" line="5039"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric5. Reread it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5041"/>
+        <location filename="QScintilla/Editor.py" line="5044"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will loose your changes upon reopening it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5045"/>
+        <location filename="QScintilla/Editor.py" line="5048"/>
         <source>File changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5124"/>
+        <location filename="QScintilla/Editor.py" line="5127"/>
         <source>{0} (ro)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>Drop Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5259"/>
+        <location filename="QScintilla/Editor.py" line="5262"/>
         <source>Resources</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5261"/>
+        <location filename="QScintilla/Editor.py" line="5264"/>
         <source>Add file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5263"/>
+        <location filename="QScintilla/Editor.py" line="5266"/>
         <source>Add files...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5265"/>
+        <location filename="QScintilla/Editor.py" line="5268"/>
         <source>Add aliased file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5267"/>
-        <source>Add localized resource...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="QScintilla/Editor.py" line="5270"/>
+        <source>Add localized resource...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5273"/>
         <source>Add resource frame</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5288"/>
+        <location filename="QScintilla/Editor.py" line="5291"/>
         <source>Add file resource</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5304"/>
+        <location filename="QScintilla/Editor.py" line="5307"/>
         <source>Add file resources</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
+        <location filename="QScintilla/Editor.py" line="5334"/>
         <source>Add aliased file resource</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
+        <location filename="QScintilla/Editor.py" line="5334"/>
         <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
+        <location filename="QScintilla/Editor.py" line="5395"/>
         <source>Package Diagram</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
+        <location filename="QScintilla/Editor.py" line="5395"/>
         <source>Include class attributes?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Imports Diagram</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Include imports from external modules?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
+        <location filename="QScintilla/Editor.py" line="5424"/>
         <source>Application Diagram</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
+        <location filename="QScintilla/Editor.py" line="5424"/>
         <source>Include module names?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5655"/>
+        <location filename="QScintilla/Editor.py" line="5658"/>
         <source>Add to dictionary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5657"/>
+        <location filename="QScintilla/Editor.py" line="5660"/>
         <source>Ignore All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4732"/>
+        <location filename="QScintilla/Editor.py" line="4735"/>
         <source>Warning: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4738"/>
+        <location filename="QScintilla/Editor.py" line="4741"/>
         <source>Error: {0}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -22794,6 +22794,215 @@
     </message>
 </context>
 <context>
+    <name>Pep8CheckerPlugin</name>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>Check PEP 8 Compliance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>PEP &amp;8 Compliance...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="79"/>
+        <source>Check PEP 8 compliance.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="175"/>
+        <source>&lt;b&gt;Check PEP 8 Compliance...&lt;/b&gt;&lt;p&gt;This checks Python files for compliance to the conventions given in PEP 8.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Pep8CodeSelectionDialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="14"/>
+        <source>PEP 8 Message Codes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="23"/>
+        <source>Select the message codes from the list:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="30"/>
+        <source>Select the message codes from this table</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="55"/>
+        <source>Code</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="60"/>
+        <source>Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Pep8Dialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="14"/>
+        <source>PEP 8 Check Result</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="17"/>
+        <source>&lt;b&gt;PEP 8 Check Results&lt;/b&gt;
+&lt;p&gt;This dialog shows the results of the PEP 8 check. Double clicking an
+entry will open an editor window and position the cursor at the respective line and position.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="34"/>
+        <source>Exclude Files:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="41"/>
+        <source>Enter filename patterns of files to be excluded separated by a comma</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="48"/>
+        <source>Press to clear the filter edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="68"/>
+        <source>Press to start the PEP 8 check run</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="71"/>
+        <source>Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="78"/>
+        <source>Exclude Messages:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="92"/>
+        <source>Press to clear the exclude messages edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="149"/>
+        <source>Press to select the messages from a list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="152"/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="139"/>
+        <source>Press to clear the include messages edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="161"/>
+        <source>Select to repeat each message type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="164"/>
+        <source>Repeat messages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="209"/>
+        <source>&lt;b&gt;Result List&lt;/b&gt;
+&lt;p&gt;This list shows the results of the PEP 8 check. Double clicking
+an entry will open this entry in an editor window and position the cursor at
+the respective line and position.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="225"/>
+        <source>File/Line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="230"/>
+        <source>Code</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="235"/>
+        <source>Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="243"/>
+        <source>Shows the progress of the PEP 8 check action</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="50"/>
+        <source>Show</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="52"/>
+        <source>Press to show all files containing an issue</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="233"/>
+        <source>Error: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="286"/>
+        <source>No issues found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="85"/>
+        <source>Enter message codes or categories to be excluded separated by a comma</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="132"/>
+        <source>Enter message codes or categories to be included separated by a comma</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="184"/>
+        <source>Press to load the default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="187"/>
+        <source>Load Defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="194"/>
+        <source>Press to store the current values as defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="197"/>
+        <source>Store Defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="125"/>
+        <source>Included Messages:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PixmapDiagram</name>
     <message>
         <location filename="Graphics/PixmapDiagram.py" line="159"/>
@@ -23505,17 +23714,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="Preferences/__init__.py" line="896"/>
+        <location filename="Preferences/__init__.py" line="895"/>
         <source>Export Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Import Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -28643,12 +28852,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>Drop Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -34851,10 +35060,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="253"/>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269"/>
         <source>No issues found.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="188"/>
+        <source>Error: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SyntaxCheckerPlugin</name>
@@ -35285,12 +35499,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="255"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="256"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="280"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="281"/>
         <source>Python2 interpreter did not finish within 15s.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39917,17 +40131,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="956"/>
+        <location filename="Utilities/__init__.py" line="959"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1128"/>
+        <location filename="Utilities/__init__.py" line="1131"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1173"/>
+        <location filename="Utilities/__init__.py" line="1176"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43134,32 +43348,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3260"/>
+        <location filename="ViewManager/ViewManager.py" line="3261"/>
         <source>File: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3264"/>
+        <location filename="ViewManager/ViewManager.py" line="3265"/>
         <source>Line: {0:5}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3269"/>
+        <location filename="ViewManager/ViewManager.py" line="3270"/>
         <source>Pos: {0:5}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3605"/>
+        <location filename="ViewManager/ViewManager.py" line="3606"/>
         <source>&amp;Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3601"/>
+        <location filename="ViewManager/ViewManager.py" line="3602"/>
         <source>&amp;Add</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3603"/>
+        <location filename="ViewManager/ViewManager.py" line="3604"/>
         <source>&amp;Edit...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43790,6 +44004,184 @@
     </message>
 </context>
 <context>
+    <name>pep8</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="164"/>
+        <source>indentation contains mixed spaces and tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="166"/>
+        <source>indentation is not a multiple of four</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="168"/>
+        <source>expected an indented block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="170"/>
+        <source>unexpected indentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="172"/>
+        <source>indentation contains tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="174"/>
+        <source>whitespace after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="180"/>
+        <source>whitespace before &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="182"/>
+        <source>multiple spaces before operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="184"/>
+        <source>multiple spaces after operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="186"/>
+        <source>tab before operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="188"/>
+        <source>tab after operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="190"/>
+        <source>missing whitespace around operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="192"/>
+        <source>missing whitespace after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="194"/>
+        <source>multiple spaces after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="196"/>
+        <source>tab after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="198"/>
+        <source>no spaces around keyword / parameter equals</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="200"/>
+        <source>at least two spaces before inline comment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="202"/>
+        <source>inline comment should start with &apos;# &apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="204"/>
+        <source>trailing whitespace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="206"/>
+        <source>no newline at end of file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="208"/>
+        <source>blank line contains whitespace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="210"/>
+        <source>expected 1 blank line, found 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="212"/>
+        <source>expected 2 blank lines, found {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="214"/>
+        <source>too many blank lines ({0})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="216"/>
+        <source>blank lines found after function decorator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="218"/>
+        <source>blank line at end of file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="220"/>
+        <source>multiple imports on one line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="222"/>
+        <source>line too long ({0} characters)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="224"/>
+        <source>.has_key() is deprecated, use &apos;in&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="226"/>
+        <source>deprecated form of raising exception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="228"/>
+        <source>&apos;&lt;&gt;&apos; is deprecated, use &apos;!=&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="230"/>
+        <source>backticks are deprecated, use &apos;repr()&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="232"/>
+        <source>multiple statements on one line (colon)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="234"/>
+        <source>multiple statements on one line (semicolon)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="264"/>
+        <source>no message for this code defined</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>py3Flakes</name>
     <message>
         <location filename="Utilities/py3flakes/messages.py" line="51"/>
--- a/i18n/eric5_es.ts	Sun Jan 09 14:25:16 2011 +0100
+++ b/i18n/eric5_es.ts	Sun Jan 09 18:16:46 2011 +0100
@@ -6732,7 +6732,7 @@
         <translation>Editar punto de interrupción...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4023"/>
+        <location filename="QScintilla/Editor.py" line="4024"/>
         <source>Enable breakpoint</source>
         <translation>Activar punto de interrupción</translation>
     </message>
@@ -6832,212 +6832,212 @@
         <translation>Guardar archivo</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion</source>
         <translation>Autocompletar</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="3560"/>
+        <location filename="QScintilla/Editor.py" line="3561"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Autocompletar no está disponible porque no hay origen de datos para autocompletar.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4026"/>
+        <location filename="QScintilla/Editor.py" line="4027"/>
         <source>Disable breakpoint</source>
         <translation>Deshabilitar punto de interrupción</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Code Coverage</source>
         <translation>Cobertura de codigo</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4309"/>
+        <location filename="QScintilla/Editor.py" line="4310"/>
         <source>Please select a coverage file</source>
         <translation>Por favor seleccione un archivo de cobertura</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Mostrar Anotaciones de Cobertura de Código</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4351"/>
+        <location filename="QScintilla/Editor.py" line="4352"/>
         <source>All lines have been covered.</source>
         <translation>Todas las líneas han sido cubiertas.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4355"/>
+        <location filename="QScintilla/Editor.py" line="4356"/>
         <source>There is no coverage file available.</source>
         <translation>No hay archivo de cobertura disponible.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Profile Data</source>
         <translation>Datos de profiling</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4447"/>
+        <location filename="QScintilla/Editor.py" line="4448"/>
         <source>Please select a profile file</source>
         <translation>Por favor seleccione un archivo de profiling</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>Syntax Error</source>
         <translation>Error de sintaxis</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4565"/>
+        <location filename="QScintilla/Editor.py" line="4566"/>
         <source>No syntax error message available.</source>
         <translation>No hay mensajes de error de sintaxis disponibles.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Macro Name</source>
         <translation>Nombre de macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4787"/>
+        <location filename="QScintilla/Editor.py" line="4790"/>
         <source>Select a macro name:</source>
         <translation>Seleccione un nombre de macro:</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4815"/>
+        <location filename="QScintilla/Editor.py" line="4818"/>
         <source>Load macro file</source>
         <translation>Cargar archivo de macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Macro files (*.macro)</source>
         <translation>Archivos de Macro  (*.macro)</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>Error loading macro</source>
         <translation>Error al cargar macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4855"/>
+        <location filename="QScintilla/Editor.py" line="4858"/>
         <source>Save macro file</source>
         <translation>Guardar archivo de macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>Save macro</source>
         <translation>Guardar macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>Error saving macro</source>
         <translation>Error al guardar macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Start Macro Recording</source>
         <translation>Comenzar grabación de macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4898"/>
+        <location filename="QScintilla/Editor.py" line="4901"/>
         <source>Macro recording is already active. Start new?</source>
         <translation>Grabación de macro ya está activada. ¿Comenzar una nueva?</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Macro Recording</source>
         <translation>Grabando macro</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4923"/>
+        <location filename="QScintilla/Editor.py" line="4926"/>
         <source>Enter name of the macro:</source>
         <translation>Introduzca el nombre de la macro:</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5041"/>
+        <location filename="QScintilla/Editor.py" line="5044"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will loose your changes upon reopening it.</source>
         <translation>&lt;br&gt;&lt;b&gt;Advertencia:&lt;/b&gt; Perderá los cambios si lo reabre.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5045"/>
+        <location filename="QScintilla/Editor.py" line="5048"/>
         <source>File changed</source>
         <translation>Archivo modificado</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>Drop Error</source>
         <translation>Error al soltar</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5259"/>
+        <location filename="QScintilla/Editor.py" line="5262"/>
         <source>Resources</source>
         <translation>Recursos</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5261"/>
+        <location filename="QScintilla/Editor.py" line="5264"/>
         <source>Add file...</source>
         <translation>Añadir archivo...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5263"/>
+        <location filename="QScintilla/Editor.py" line="5266"/>
         <source>Add files...</source>
         <translation>Añadir archivos...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5265"/>
+        <location filename="QScintilla/Editor.py" line="5268"/>
         <source>Add aliased file...</source>
         <translation>Añadir archivo con un alias...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5267"/>
-        <source>Add localized resource...</source>
-        <translation>Añadir recursos localizados...</translation>
-    </message>
-    <message>
         <location filename="QScintilla/Editor.py" line="5270"/>
+        <source>Add localized resource...</source>
+        <translation>Añadir recursos localizados...</translation>
+    </message>
+    <message>
+        <location filename="QScintilla/Editor.py" line="5273"/>
         <source>Add resource frame</source>
         <translation>Añadir ventana de recursos</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5288"/>
+        <location filename="QScintilla/Editor.py" line="5291"/>
         <source>Add file resource</source>
         <translation>Añadir archivo de recursos</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5304"/>
+        <location filename="QScintilla/Editor.py" line="5307"/>
         <source>Add file resources</source>
         <translation>Añadir archivo de recursos</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
+        <location filename="QScintilla/Editor.py" line="5334"/>
         <source>Add aliased file resource</source>
         <translation>Añadir archivo de recursos con un alias</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
+        <location filename="QScintilla/Editor.py" line="5395"/>
         <source>Package Diagram</source>
         <translation>Digrama de paquetes</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5392"/>
+        <location filename="QScintilla/Editor.py" line="5395"/>
         <source>Include class attributes?</source>
         <translation>¿Incluir atributos de clase?</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Imports Diagram</source>
         <translation>Diagrama de imports</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5409"/>
+        <location filename="QScintilla/Editor.py" line="5412"/>
         <source>Include imports from external modules?</source>
         <translation>¿Incluir los imports de módulos externos?</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
+        <location filename="QScintilla/Editor.py" line="5424"/>
         <source>Application Diagram</source>
         <translation>Diagrama de aplicación</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5421"/>
+        <location filename="QScintilla/Editor.py" line="5424"/>
         <source>Include module names?</source>
         <translation>¿Incluir nombres de módulos?</translation>
     </message>
@@ -7112,7 +7112,7 @@
         <translation>Seleccionar el Analizador Léxico de Pygments.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5653"/>
+        <location filename="QScintilla/Editor.py" line="5656"/>
         <source>Check spelling...</source>
         <translation>Corrección ortográfica...</translation>
     </message>
@@ -7122,12 +7122,12 @@
         <translation>Corrección ortográfica de la selección...</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5655"/>
+        <location filename="QScintilla/Editor.py" line="5658"/>
         <source>Add to dictionary</source>
         <translation>Añadir al diccionario</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5657"/>
+        <location filename="QScintilla/Editor.py" line="5660"/>
         <source>Ignore All</source>
         <translation>Ignorar Todo</translation>
     </message>
@@ -7167,37 +7167,37 @@
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; no puede ser guardado.&lt;br&gt;Causa: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4829"/>
+        <location filename="QScintilla/Editor.py" line="4832"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; no se puede leer.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4836"/>
+        <location filename="QScintilla/Editor.py" line="4839"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; está dañado&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4887"/>
+        <location filename="QScintilla/Editor.py" line="4890"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro  &lt;b&gt;{0}&lt;/b&gt; no se puede escribir.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5036"/>
+        <location filename="QScintilla/Editor.py" line="5039"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric5. Reread it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ha cambiado mientras estaba abierto en eric5. ¿Desea volver a cargarlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5124"/>
+        <location filename="QScintilla/Editor.py" line="5127"/>
         <source>{0} (ro)</source>
         <translation>{0} (ro)</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5241"/>
+        <location filename="QScintilla/Editor.py" line="5244"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; no es un archivo.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="5331"/>
+        <location filename="QScintilla/Editor.py" line="5334"/>
         <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
         <translation>Alias para el archivo &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
@@ -7222,12 +7222,12 @@
         <translation>Limpiar advertencias</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>py3flakes Warning</source>
         <translation>Advertencia de py3flakes</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4689"/>
+        <location filename="QScintilla/Editor.py" line="4692"/>
         <source>No py3flakes warning message available.</source>
         <translation>No hay un mensaje de advertencia de py3flakes disponible.</translation>
     </message>
@@ -7237,17 +7237,17 @@
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4872"/>
+        <location filename="QScintilla/Editor.py" line="4875"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4732"/>
+        <location filename="QScintilla/Editor.py" line="4735"/>
         <source>Warning: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="QScintilla/Editor.py" line="4738"/>
+        <location filename="QScintilla/Editor.py" line="4741"/>
         <source>Error: {0}</source>
         <translation type="unfinished">Error: {0}</translation>
     </message>
@@ -22962,6 +22962,215 @@
     </message>
 </context>
 <context>
+    <name>Pep8CheckerPlugin</name>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>Check PEP 8 Compliance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="171"/>
+        <source>PEP &amp;8 Compliance...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="79"/>
+        <source>Check PEP 8 compliance.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginPep8Checker.py" line="175"/>
+        <source>&lt;b&gt;Check PEP 8 Compliance...&lt;/b&gt;&lt;p&gt;This checks Python files for compliance to the conventions given in PEP 8.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Pep8CodeSelectionDialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="14"/>
+        <source>PEP 8 Message Codes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="23"/>
+        <source>Select the message codes from the list:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="30"/>
+        <source>Select the message codes from this table</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="55"/>
+        <source>Code</source>
+        <translation type="unfinished">Código</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8CodeSelectionDialog.ui" line="60"/>
+        <source>Message</source>
+        <translation type="unfinished">Mensaje</translation>
+    </message>
+</context>
+<context>
+    <name>Pep8Dialog</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="14"/>
+        <source>PEP 8 Check Result</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="17"/>
+        <source>&lt;b&gt;PEP 8 Check Results&lt;/b&gt;
+&lt;p&gt;This dialog shows the results of the PEP 8 check. Double clicking an
+entry will open an editor window and position the cursor at the respective line and position.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="34"/>
+        <source>Exclude Files:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="41"/>
+        <source>Enter filename patterns of files to be excluded separated by a comma</source>
+        <translation type="unfinished">Introduzca patrones de nombre de archivo de los archivos a ser excluidos, separados por comas</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="48"/>
+        <source>Press to clear the filter edit</source>
+        <translation type="unfinished">Pulse para limpiar la caja de filtro</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="68"/>
+        <source>Press to start the PEP 8 check run</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="71"/>
+        <source>Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="78"/>
+        <source>Exclude Messages:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="92"/>
+        <source>Press to clear the exclude messages edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="149"/>
+        <source>Press to select the messages from a list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="152"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="139"/>
+        <source>Press to clear the include messages edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="161"/>
+        <source>Select to repeat each message type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="164"/>
+        <source>Repeat messages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="209"/>
+        <source>&lt;b&gt;Result List&lt;/b&gt;
+&lt;p&gt;This list shows the results of the PEP 8 check. Double clicking
+an entry will open this entry in an editor window and position the cursor at
+the respective line and position.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="225"/>
+        <source>File/Line</source>
+        <translation type="unfinished">Archivo/Línea</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="230"/>
+        <source>Code</source>
+        <translation type="unfinished">Código</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="235"/>
+        <source>Message</source>
+        <translation type="unfinished">Mensaje</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="243"/>
+        <source>Shows the progress of the PEP 8 check action</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="50"/>
+        <source>Show</source>
+        <translation type="unfinished">Mostrar</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="52"/>
+        <source>Press to show all files containing an issue</source>
+        <translation type="unfinished">Pulsar para mostrar todos los archivos con algún problema</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="233"/>
+        <source>Error: {0}</source>
+        <translation type="unfinished">Error: {0}</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.py" line="286"/>
+        <source>No issues found.</source>
+        <translation type="unfinished">No se han encontrado problemas.</translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="85"/>
+        <source>Enter message codes or categories to be excluded separated by a comma</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="132"/>
+        <source>Enter message codes or categories to be included separated by a comma</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="184"/>
+        <source>Press to load the default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="187"/>
+        <source>Load Defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="194"/>
+        <source>Press to store the current values as defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="197"/>
+        <source>Store Defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/Pep8Dialog.ui" line="125"/>
+        <source>Included Messages:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PixmapDiagram</name>
     <message>
         <location filename="Graphics/PixmapDiagram.py" line="159"/>
@@ -23677,17 +23886,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="Preferences/__init__.py" line="896"/>
+        <location filename="Preferences/__init__.py" line="895"/>
         <source>Export Preferences</source>
         <translation>Exportar Preferencias</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Import Preferences</source>
         <translation>Importar Preferencias</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="922"/>
+        <location filename="Preferences/__init__.py" line="921"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -28857,7 +29066,7 @@
         <translation>No.</translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>Drop Error</source>
         <translation>Error al soltar</translation>
     </message>
@@ -28925,7 +29134,7 @@
 </translation>
     </message>
     <message>
-        <location filename="QScintilla/Shell.py" line="1360"/>
+        <location filename="QScintilla/Shell.py" line="1361"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; no es un archivo.&lt;/p&gt;</translation>
     </message>
@@ -35178,7 +35387,7 @@
         <translation>Pulsar para mostrar todos los archivos con algún problema</translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="253"/>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269"/>
         <source>No issues found.</source>
         <translation>No se han encontrado problemas.</translation>
     </message>
@@ -35207,6 +35416,11 @@
         <source>Start</source>
         <translation>Iniciar</translation>
     </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="188"/>
+        <source>Error: {0}</source>
+        <translation type="unfinished">Error: {0}</translation>
+    </message>
 </context>
 <context>
     <name>SyntaxCheckerPlugin</name>
@@ -35646,12 +35860,12 @@
         <translation>Iniciar</translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="255"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="256"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="280"/>
+        <location filename="Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py" line="281"/>
         <source>Python2 interpreter did not finish within 15s.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -40333,17 +40547,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="956"/>
+        <location filename="Utilities/__init__.py" line="959"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Puede utilizar %-códigos como marcadores en la cadena. Los valores sportados son:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;columna del cursos en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directorio del editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nombre de archivo del editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;directorio home del usuario actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;línea del cursor en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;ruta del proyecto actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;texto seleccionado en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;nombre de usuario del usuario actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;signo de porcentaje&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1128"/>
+        <location filename="Utilities/__init__.py" line="1131"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1173"/>
+        <location filename="Utilities/__init__.py" line="1176"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43313,17 +43527,17 @@
         <translation>Archivo Modificado</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3605"/>
+        <location filename="ViewManager/ViewManager.py" line="3606"/>
         <source>&amp;Clear</source>
         <translation>&amp;Limpiar</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3601"/>
+        <location filename="ViewManager/ViewManager.py" line="3602"/>
         <source>&amp;Add</source>
         <translation>&amp;Agregar</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3603"/>
+        <location filename="ViewManager/ViewManager.py" line="3604"/>
         <source>&amp;Edit...</source>
         <translation>&amp;Editar...</translation>
     </message>
@@ -43527,17 +43741,17 @@
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; tiene cambios sin guardar.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3260"/>
+        <location filename="ViewManager/ViewManager.py" line="3261"/>
         <source>File: {0}</source>
         <translation>Archivo: {0}</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3264"/>
+        <location filename="ViewManager/ViewManager.py" line="3265"/>
         <source>Line: {0:5}</source>
         <translation>Línea: {0:5}</translation>
     </message>
     <message>
-        <location filename="ViewManager/ViewManager.py" line="3269"/>
+        <location filename="ViewManager/ViewManager.py" line="3270"/>
         <source>Pos: {0:5}</source>
         <translation>Pos: {0:5}</translation>
     </message>
@@ -44244,6 +44458,184 @@
     </message>
 </context>
 <context>
+    <name>pep8</name>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="164"/>
+        <source>indentation contains mixed spaces and tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="166"/>
+        <source>indentation is not a multiple of four</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="168"/>
+        <source>expected an indented block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="170"/>
+        <source>unexpected indentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="172"/>
+        <source>indentation contains tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="174"/>
+        <source>whitespace after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="180"/>
+        <source>whitespace before &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="182"/>
+        <source>multiple spaces before operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="184"/>
+        <source>multiple spaces after operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="186"/>
+        <source>tab before operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="188"/>
+        <source>tab after operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="190"/>
+        <source>missing whitespace around operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="192"/>
+        <source>missing whitespace after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="194"/>
+        <source>multiple spaces after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="196"/>
+        <source>tab after &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="198"/>
+        <source>no spaces around keyword / parameter equals</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Plugins/CheckerPlugins/Pep8/pep8.py" line="200"/>