Fri, 01 Nov 2019 16:11:27 +0100
Merged with default branch to prepare a new release.
--- a/docs/changelog Thu Oct 03 11:12:50 2019 +0200 +++ b/docs/changelog Fri Nov 01 16:11:27 2019 +0100 @@ -1,5 +1,25 @@ Change Log ---------- +Version 19.11: +- bug fixes +- Editor + -- extended the spell checking functionality for all text files + -- added a context menu to select spell check language + -- made the preview refresh timeout configurable + (see Editor -> File Handling config page) +- Error Message Dialog: + - added a configurable minimum severity for messages being shown in a dialog + (see Application config page) +- MicroPython + -- added support for PyBoard +- Previewers + -- enhanced the Markdown previewer by using the PyMdown extensions, if + they are available and have been enabled + -- enhanced the Markdown previewer to support MathJax, if it has been + enabled + -- enhanced the Markdown previewer to support Mermaid via the md_mermaid + extension, if it is available and has been enabled + Version 19.10: - bug fixes - removed runtime support for Python2 and PyQt4
--- a/eric6.e4p Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6.e4p Fri Nov 01 16:11:27 2019 +0100 @@ -259,6 +259,7 @@ <Source>eric6/MicroPython/MicroPythonSerialPort.py</Source> <Source>eric6/MicroPython/MicroPythonWidget.py</Source> <Source>eric6/MicroPython/MicrobitDevices.py</Source> + <Source>eric6/MicroPython/PyBoardDevices.py</Source> <Source>eric6/MicroPython/__init__.py</Source> <Source>eric6/MultiProject/AddProjectDialog.py</Source> <Source>eric6/MultiProject/MultiProject.py</Source> @@ -297,6 +298,7 @@ <Source>eric6/Plugins/AboutPlugin/AboutDialog.py</Source> <Source>eric6/Plugins/AboutPlugin/__init__.py</Source> <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/AnnotationsChecker.py</Source> + <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/AstUtilities.py</Source> <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleAddBuiltinIgnoreDialog.py</Source> <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py</Source> <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py</Source> @@ -1196,7 +1198,9 @@ <Source>eric6/UI/NumbersWidget.py</Source> <Source>eric6/UI/PixmapCache.py</Source> <Source>eric6/UI/Previewer.py</Source> + <Source>eric6/UI/Previewers/MarkdownExtensions.py</Source> <Source>eric6/UI/Previewers/PreviewerHTML.py</Source> + <Source>eric6/UI/Previewers/PreviewerHTMLStyles.py</Source> <Source>eric6/UI/Previewers/PreviewerQSS.py</Source> <Source>eric6/UI/Previewers/__init__.py</Source> <Source>eric6/UI/PythonAstViewer.py</Source> @@ -1854,6 +1858,7 @@ <Form>eric6/Preferences/ConfigurationPages/WebBrowserFlashCookieManagerPage.ui</Form> <Form>eric6/Preferences/ConfigurationPages/WebBrowserPage.ui</Form> <Form>eric6/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui</Form> + <Form>eric6/Preferences/ConfigurationPages/WebBrowserVirusTotalPage.ui</Form> <Form>eric6/Preferences/MouseClickDialog.ui</Form> <Form>eric6/Preferences/ProgramsDialog.ui</Form> <Form>eric6/Preferences/ShortcutDialog.ui</Form> @@ -2034,9 +2039,6 @@ <Other>eric6/APIs/MicroPython/circuitpython.api</Other> <Other>eric6/APIs/MicroPython/microbit.api</Other> <Other>eric6/APIs/MicroPython/micropython.api</Other> - <Other>eric6/APIs/Python/zope-2.10.7.api</Other> - <Other>eric6/APIs/Python/zope-2.11.2.api</Other> - <Other>eric6/APIs/Python/zope-3.3.1.api</Other> <Other>eric6/APIs/Python3/PyQt4.bas</Other> <Other>eric6/APIs/Python3/PyQt5.bas</Other> <Other>eric6/APIs/Python3/PyQtChart.bas</Other> @@ -2044,6 +2046,9 @@ <Other>eric6/APIs/Python3/QScintilla2.bas</Other> <Other>eric6/APIs/Python3/eric6.api</Other> <Other>eric6/APIs/Python3/eric6.bas</Other> + <Other>eric6/APIs/Python/zope-2.10.7.api</Other> + <Other>eric6/APIs/Python/zope-2.11.2.api</Other> + <Other>eric6/APIs/Python/zope-3.3.1.api</Other> <Other>eric6/APIs/QSS/qss.api</Other> <Other>eric6/APIs/Ruby/Ruby-1.8.7.api</Other> <Other>eric6/APIs/Ruby/Ruby-1.8.7.bas</Other>
--- a/eric6/APIs/Python3/eric6.api Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/APIs/Python3/eric6.api Fri Nov 01 16:11:27 2019 +0100 @@ -2400,6 +2400,21 @@ eric6.MicroPython.MicrobitDevices.MicrobitDevice.runScript?4(script) eric6.MicroPython.MicrobitDevices.MicrobitDevice.setButtons?4() eric6.MicroPython.MicrobitDevices.MicrobitDevice?1(microPythonWidget, parent=None) +eric6.MicroPython.PyBoardDevices.PyBoardDevice.DeviceVolumeName?7 +eric6.MicroPython.PyBoardDevices.PyBoardDevice.FlashInstructionsURL?7 +eric6.MicroPython.PyBoardDevices.PyBoardDevice.addDeviceMenuEntries?4(menu) +eric6.MicroPython.PyBoardDevices.PyBoardDevice.canRunScript?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.canStartFileManager?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.canStartPlotter?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.canStartRepl?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.deviceName?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.forceInterrupt?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.getDocumentationUrl?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.getWorkspace?4(silent=False) +eric6.MicroPython.PyBoardDevices.PyBoardDevice.runScript?4(script) +eric6.MicroPython.PyBoardDevices.PyBoardDevice.setButtons?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice.supportsLocalFileAccess?4() +eric6.MicroPython.PyBoardDevices.PyBoardDevice?1(microPythonWidget, parent=None) eric6.MultiProject.AddProjectDialog.AddProjectDialog.getData?4() eric6.MultiProject.AddProjectDialog.AddProjectDialog.on_filenamePicker_textChanged?4(txt) eric6.MultiProject.AddProjectDialog.AddProjectDialog.on_nameEdit_textChanged?4(txt) @@ -2869,6 +2884,12 @@ eric6.Plugins.CheckerPlugins.CodeStyleChecker.AnnotationsChecker.FunctionVisitor?1(sourceLines) eric6.Plugins.CheckerPlugins.CodeStyleChecker.AnnotationsChecker.getAnnotationComplexity?4(annotationNode) eric6.Plugins.CheckerPlugins.CodeStyleChecker.AnnotationsChecker.hasTypeAnnotations?4(funcNode) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.getValue?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isBaseString?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isBytes?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isNameConstant?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isNumber?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isString?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.CodeStyleAddBuiltinIgnoreDialog.getData?4() eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.CodeStyleAddBuiltinIgnoreDialog.on_leftEdit_textChanged?4(txt) eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.CodeStyleAddBuiltinIgnoreDialog.on_rightEdit_textChanged?4(txt) @@ -3002,6 +3023,7 @@ eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Bytes?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Call?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_ClassDef?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Constant?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_FunctionDef?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Module?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Str?4(node) @@ -6110,6 +6132,7 @@ eric6.Preferences.ConfigurationPages.EditorFilePage.EditorFilePage.on_editFileFilterButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorFilePage.EditorFilePage.on_fileFiltersList_currentItemChanged?4(current, previous) eric6.Preferences.ConfigurationPages.EditorFilePage.EditorFilePage.on_openFiltersButton_toggled?4(checked) +eric6.Preferences.ConfigurationPages.EditorFilePage.EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorFilePage.EditorFilePage.save?4() eric6.Preferences.ConfigurationPages.EditorFilePage.EditorFilePage?1() eric6.Preferences.ConfigurationPages.EditorFilePage.create?4(dlg) @@ -7254,6 +7277,7 @@ eric6.QScintilla.Editor.Editor.getSearchIndicatorLines?4() eric6.QScintilla.Editor.Editor.getSearchText?4(selectionOnly=False) eric6.QScintilla.Editor.Editor.getSharingStatus?4() +eric6.QScintilla.Editor.Editor.getSpellingLanguage?4() eric6.QScintilla.Editor.Editor.getSyntaxErrorLines?4() eric6.QScintilla.Editor.Editor.getSyntaxErrors?4() eric6.QScintilla.Editor.Editor.getTaskLines?4() @@ -7366,6 +7390,7 @@ eric6.QScintilla.Editor.Editor.showMenu?7 eric6.QScintilla.Editor.Editor.smartIndentLineOrSelection?4() eric6.QScintilla.Editor.Editor.sortLines?4() +eric6.QScintilla.Editor.Editor.spellLanguageChanged?7 eric6.QScintilla.Editor.Editor.startSharedEdit?4() eric6.QScintilla.Editor.Editor.streamCommentLine?4() eric6.QScintilla.Editor.Editor.streamCommentLineOrSelection?4() @@ -7406,8 +7431,6 @@ eric6.QScintilla.Exporters.ExporterHTML.ExporterHTML?1(editor, parent=None) eric6.QScintilla.Exporters.ExporterHTML.HTMLGenerator.generate?4(tabSize=4, useTabs=False, wysiwyg=True, folding=False, onlyStylesUsed=False, titleFullPath=False) eric6.QScintilla.Exporters.ExporterHTML.HTMLGenerator?1(editor) -eric6.QScintilla.Exporters.ExporterHTML._StrikeThroughExtension.DEL_RE?7 -eric6.QScintilla.Exporters.ExporterHTML._StrikeThroughExtension.extendMarkdown?4(md, md_globals) eric6.QScintilla.Exporters.ExporterODT.ExporterODT.exportSource?4() eric6.QScintilla.Exporters.ExporterODT.ExporterODT?1(editor, parent=None) eric6.QScintilla.Exporters.ExporterPDF.ExporterPDF.exportSource?4() @@ -8804,11 +8827,22 @@ eric6.UI.PixmapCache.getSymlinkIcon?4(key, size=None, cache=pixCache) eric6.UI.PixmapCache.pixCache?7 eric6.UI.Previewer.Previewer.hide?4() +eric6.UI.Previewer.Previewer.preferencesChanged?4() eric6.UI.Previewer.Previewer.show?4() eric6.UI.Previewer.Previewer.shutdown?4() eric6.UI.Previewer.Previewer?1(viewmanager, splitter, parent=None) +eric6.UI.Previewers.MarkdownExtensions.MermaidExtension.extendMarkdown?4(md, md_globals) +eric6.UI.Previewers.MarkdownExtensions.MermaidPreprocessor.run?4(lines) +eric6.UI.Previewers.MarkdownExtensions.MermaidRegex?7 +eric6.UI.Previewers.MarkdownExtensions.MermaidRegexFullText?7 +eric6.UI.Previewers.MarkdownExtensions.SimplePatternExtension.DEL_RE?7 +eric6.UI.Previewers.MarkdownExtensions.SimplePatternExtension.INS_RE?7 +eric6.UI.Previewers.MarkdownExtensions.SimplePatternExtension.MARK_RE?7 +eric6.UI.Previewers.MarkdownExtensions.SimplePatternExtension.SUB_RE?7 +eric6.UI.Previewers.MarkdownExtensions.SimplePatternExtension.SUP_RE?7 +eric6.UI.Previewers.MarkdownExtensions.SimplePatternExtension.extendMarkdown?4(md) eric6.UI.Previewers.PreviewerHTML.PreviewProcessingThread.htmlReady?7 -eric6.UI.Previewers.PreviewerHTML.PreviewProcessingThread.process?4(filePath, language, text, ssiEnabled, rootPath, useSphinx, convertNewLineToBreak, markdownHtmlFormat, restDocutilsHtmlFormat) +eric6.UI.Previewers.PreviewerHTML.PreviewProcessingThread.process?4(filePath, language, text, ssiEnabled, rootPath, useSphinx, convertNewLineToBreak, usePyMdownExtensions, markdownHtmlFormat, restDocutilsHtmlFormat) eric6.UI.Previewers.PreviewerHTML.PreviewProcessingThread.run?4() eric6.UI.Previewers.PreviewerHTML.PreviewProcessingThread?1(parent=None) eric6.UI.Previewers.PreviewerHTML.PreviewerHTML.on_jsCheckBox_clicked?4(checked) @@ -8818,8 +8852,8 @@ eric6.UI.Previewers.PreviewerHTML.PreviewerHTML.resultCallback?4(resDict=resultDict) eric6.UI.Previewers.PreviewerHTML.PreviewerHTML.shutdown?4() eric6.UI.Previewers.PreviewerHTML.PreviewerHTML?1(parent=None) -eric6.UI.Previewers.PreviewerHTML._StrikeThroughExtension.DEL_RE?7 -eric6.UI.Previewers.PreviewerHTML._StrikeThroughExtension.extendMarkdown?4(md, md_globals) +eric6.UI.Previewers.PreviewerHTMLStyles.css_markdown?7 +eric6.UI.Previewers.PreviewerHTMLStyles.css_pygments?7 eric6.UI.Previewers.PreviewerQSS.PreviewerQSS.processEditor?4(editor=None) eric6.UI.Previewers.PreviewerQSS.PreviewerQSS?1(parent=None) eric6.UI.PythonAstViewer.PythonAstViewer.EndIndexRole?7 @@ -8867,7 +8901,7 @@ eric6.UI.UserInterface.Redirector.appendStdout?7 eric6.UI.UserInterface.Redirector.flush?4() eric6.UI.UserInterface.Redirector.write?4(s) -eric6.UI.UserInterface.Redirector?1(stderr) +eric6.UI.UserInterface.Redirector?1(stderr, parent=None) eric6.UI.UserInterface.UserInterface.BottomSide?7 eric6.UI.UserInterface.UserInterface.ErrorLogFileName?7 eric6.UI.UserInterface.UserInterface.LeftSide?7
--- a/eric6/APIs/Python3/eric6.bas Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/APIs/Python3/eric6.bas Fri Nov 01 16:11:27 2019 +0100 @@ -582,6 +582,8 @@ MarkdownProvider MarkupBase MasterPasswordEntryDialog QDialog Ui_MasterPasswordEntryDialog MercurialPage ConfigurationPageBase Ui_MercurialPage +MermaidExtension Extension +MermaidPreprocessor Preprocessor Message ClbrBaseClasses.Module VisibilityMixin MessageBoxWizard QObject MessageBoxWizardDialog QDialog Ui_MessageBoxWizardDialog @@ -721,6 +723,7 @@ ProtocolHandlerManagerDialog QDialog Ui_ProtocolHandlerManagerDialog Purge HgExtension PurgeProjectHelper HgExtensionProjectHelper +PyBoardDevice MicroPythonDevice PyCoverageDialog QDialog Ui_PyCoverageDialog PyProfile profile.Profile PyProfileDialog QDialog Ui_PyProfileDialog @@ -802,6 +805,7 @@ ShortcutsDialog QDialog Ui_ShortcutsDialog ShortcutsReader XMLStreamReaderBase ShortcutsWriter XMLStreamWriterBase +SimplePatternExtension Extension SingleApplicationServer QLocalServer SiteInfoDialog QDialog Ui_SiteInfoDialog SiteInfoWidget QMenu @@ -1003,7 +1007,7 @@ WebBrowserTabBar E5WheelTabBar WebBrowserTabWidget E5TabWidget WebBrowserView QWebEngineView -WebBrowserVirusTotalPage ConfigurationPageBase Ui_HelpVirusTotalPage +WebBrowserVirusTotalPage ConfigurationPageBase Ui_WebBrowserVirusTotalPage WebBrowserWebSearchWidget E5ClearableLineEdit WebBrowserWindow E5MainWindow WebIconDialog QDialog Ui_WebIconDialog @@ -1024,4 +1028,3 @@ ZoomManager QObject ZoomValuesDialog QDialog Ui_ZoomValuesDialog ZoomValuesModel QAbstractTableModel -_StrikeThroughExtension markdown.Extension
--- a/eric6/Documentation/Help/source.qhp Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Help/source.qhp Fri Nov 01 16:11:27 2019 +0100 @@ -240,6 +240,7 @@ <section title="eric6.MicroPython.MicroPythonSerialPort" ref="eric6.MicroPython.MicroPythonSerialPort.html" /> <section title="eric6.MicroPython.MicroPythonWidget" ref="eric6.MicroPython.MicroPythonWidget.html" /> <section title="eric6.MicroPython.MicrobitDevices" ref="eric6.MicroPython.MicrobitDevices.html" /> + <section title="eric6.MicroPython.PyBoardDevices" ref="eric6.MicroPython.PyBoardDevices.html" /> </section> <section title="eric6.MultiProject" ref="index-eric6.MultiProject.html"> <section title="eric6.MultiProject.AddProjectDialog" ref="eric6.MultiProject.AddProjectDialog.html" /> @@ -287,6 +288,7 @@ <section title="eric6.Plugins.CheckerPlugins" ref="index-eric6.Plugins.CheckerPlugins.html"> <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker" ref="index-eric6.Plugins.CheckerPlugins.CodeStyleChecker.html"> <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AnnotationsChecker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AnnotationsChecker.html" /> + <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html" /> <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.html" /> <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html" /> <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html" /> @@ -935,7 +937,9 @@ </section> <section title="eric6.UI" ref="index-eric6.UI.html"> <section title="eric6.UI.Previewers" ref="index-eric6.UI.Previewers.html"> + <section title="eric6.UI.Previewers.MarkdownExtensions" ref="eric6.UI.Previewers.MarkdownExtensions.html" /> <section title="eric6.UI.Previewers.PreviewerHTML" ref="eric6.UI.Previewers.PreviewerHTML.html" /> + <section title="eric6.UI.Previewers.PreviewerHTMLStyles" ref="eric6.UI.Previewers.PreviewerHTMLStyles.html" /> <section title="eric6.UI.Previewers.PreviewerQSS" ref="eric6.UI.Previewers.PreviewerQSS.html" /> </section> <section title="eric6.UI.data" ref="index-eric6.UI.data.html"> @@ -1704,6 +1708,7 @@ <keyword name="AssociationItem.parseAssociationItemDataString" id="AssociationItem.parseAssociationItemDataString" ref="eric6.Graphics.AssociationItem.html#AssociationItem.parseAssociationItemDataString" /> <keyword name="AssociationItem.unassociate" id="AssociationItem.unassociate" ref="eric6.Graphics.AssociationItem.html#AssociationItem.unassociate" /> <keyword name="AssociationItem.widgetMoved" id="AssociationItem.widgetMoved" ref="eric6.Graphics.AssociationItem.html#AssociationItem.widgetMoved" /> + <keyword name="AstUtilities (Module)" id="AstUtilities (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html" /> <keyword name="AsyncFile" id="AsyncFile" ref="eric6.DebugClients.Python.AsyncFile.html#AsyncFile" /> <keyword name="AsyncFile (Constructor)" id="AsyncFile (Constructor)" ref="eric6.DebugClients.Python.AsyncFile.html#AsyncFile.__init__" /> <keyword name="AsyncFile (Module)" id="AsyncFile (Module)" ref="eric6.DebugClients.Python.AsyncFile.html" /> @@ -4646,6 +4651,7 @@ <keyword name="Editor.__checkEncoding" id="Editor.__checkEncoding" ref="eric6.QScintilla.Editor.html#Editor.__checkEncoding" /> <keyword name="Editor.__checkEol" id="Editor.__checkEol" ref="eric6.QScintilla.Editor.html#Editor.__checkEol" /> <keyword name="Editor.__checkLanguage" id="Editor.__checkLanguage" ref="eric6.QScintilla.Editor.html#Editor.__checkLanguage" /> + <keyword name="Editor.__checkSpellLanguage" id="Editor.__checkSpellLanguage" ref="eric6.QScintilla.Editor.html#Editor.__checkSpellLanguage" /> <keyword name="Editor.__checkSpellingSelection" id="Editor.__checkSpellingSelection" ref="eric6.QScintilla.Editor.html#Editor.__checkSpellingSelection" /> <keyword name="Editor.__checkSpellingWord" id="Editor.__checkSpellingWord" ref="eric6.QScintilla.Editor.html#Editor.__checkSpellingWord" /> <keyword name="Editor.__clearBreakpoints" id="Editor.__clearBreakpoints" ref="eric6.QScintilla.Editor.html#Editor.__clearBreakpoints" /> @@ -4697,6 +4703,7 @@ <keyword name="Editor.__initContextMenuReopenWithEncoding" id="Editor.__initContextMenuReopenWithEncoding" ref="eric6.QScintilla.Editor.html#Editor.__initContextMenuReopenWithEncoding" /> <keyword name="Editor.__initContextMenuResources" id="Editor.__initContextMenuResources" ref="eric6.QScintilla.Editor.html#Editor.__initContextMenuResources" /> <keyword name="Editor.__initContextMenuShow" id="Editor.__initContextMenuShow" ref="eric6.QScintilla.Editor.html#Editor.__initContextMenuShow" /> + <keyword name="Editor.__initContextMenuSpellLanguages" id="Editor.__initContextMenuSpellLanguages" ref="eric6.QScintilla.Editor.html#Editor.__initContextMenuSpellLanguages" /> <keyword name="Editor.__initContextMenuTools" id="Editor.__initContextMenuTools" ref="eric6.QScintilla.Editor.html#Editor.__initContextMenuTools" /> <keyword name="Editor.__initOnlineChangeTrace" id="Editor.__initOnlineChangeTrace" ref="eric6.QScintilla.Editor.html#Editor.__initOnlineChangeTrace" /> <keyword name="Editor.__initOnlineSyntaxCheck" id="Editor.__initOnlineSyntaxCheck" ref="eric6.QScintilla.Editor.html#Editor.__initOnlineSyntaxCheck" /> @@ -4754,6 +4761,7 @@ <keyword name="Editor.__setAutoCompletion" id="Editor.__setAutoCompletion" ref="eric6.QScintilla.Editor.html#Editor.__setAutoCompletion" /> <keyword name="Editor.__setCallTips" id="Editor.__setCallTips" ref="eric6.QScintilla.Editor.html#Editor.__setCallTips" /> <keyword name="Editor.__setEolMode" id="Editor.__setEolMode" ref="eric6.QScintilla.Editor.html#Editor.__setEolMode" /> + <keyword name="Editor.__setFileName" id="Editor.__setFileName" ref="eric6.QScintilla.Editor.html#Editor.__setFileName" /> <keyword name="Editor.__setLineMarkerColours" id="Editor.__setLineMarkerColours" ref="eric6.QScintilla.Editor.html#Editor.__setLineMarkerColours" /> <keyword name="Editor.__setMarginsDisplay" id="Editor.__setMarginsDisplay" ref="eric6.QScintilla.Editor.html#Editor.__setMarginsDisplay" /> <keyword name="Editor.__setSpelling" id="Editor.__setSpelling" ref="eric6.QScintilla.Editor.html#Editor.__setSpelling" /> @@ -4776,6 +4784,7 @@ <keyword name="Editor.__showContextMenuMargin" id="Editor.__showContextMenuMargin" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuMargin" /> <keyword name="Editor.__showContextMenuResources" id="Editor.__showContextMenuResources" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuResources" /> <keyword name="Editor.__showContextMenuShow" id="Editor.__showContextMenuShow" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuShow" /> + <keyword name="Editor.__showContextMenuSpellLanguages" id="Editor.__showContextMenuSpellLanguages" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuSpellLanguages" /> <keyword name="Editor.__showContextMenuSpelling" id="Editor.__showContextMenuSpelling" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuSpelling" /> <keyword name="Editor.__showContextMenuTools" id="Editor.__showContextMenuTools" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuTools" /> <keyword name="Editor.__showImportsDiagram" id="Editor.__showImportsDiagram" ref="eric6.QScintilla.Editor.html#Editor.__showImportsDiagram" /> @@ -4784,6 +4793,8 @@ <keyword name="Editor.__showSyntaxError" id="Editor.__showSyntaxError" ref="eric6.QScintilla.Editor.html#Editor.__showSyntaxError" /> <keyword name="Editor.__showWarning" id="Editor.__showWarning" ref="eric6.QScintilla.Editor.html#Editor.__showWarning" /> <keyword name="Editor.__spellCharAdded" id="Editor.__spellCharAdded" ref="eric6.QScintilla.Editor.html#Editor.__spellCharAdded" /> + <keyword name="Editor.__spellLanguageChanged" id="Editor.__spellLanguageChanged" ref="eric6.QScintilla.Editor.html#Editor.__spellLanguageChanged" /> + <keyword name="Editor.__spellLanguagesMenuTriggered" id="Editor.__spellLanguagesMenuTriggered" ref="eric6.QScintilla.Editor.html#Editor.__spellLanguagesMenuTriggered" /> <keyword name="Editor.__styleNeeded" id="Editor.__styleNeeded" ref="eric6.QScintilla.Editor.html#Editor.__styleNeeded" /> <keyword name="Editor.__textChanged" id="Editor.__textChanged" ref="eric6.QScintilla.Editor.html#Editor.__textChanged" /> <keyword name="Editor.__toggleAutoCompletionEnable" id="Editor.__toggleAutoCompletionEnable" ref="eric6.QScintilla.Editor.html#Editor.__toggleAutoCompletionEnable" /> @@ -4871,6 +4882,7 @@ <keyword name="Editor.getSearchIndicatorLines" id="Editor.getSearchIndicatorLines" ref="eric6.QScintilla.Editor.html#Editor.getSearchIndicatorLines" /> <keyword name="Editor.getSearchText" id="Editor.getSearchText" ref="eric6.QScintilla.Editor.html#Editor.getSearchText" /> <keyword name="Editor.getSharingStatus" id="Editor.getSharingStatus" ref="eric6.QScintilla.Editor.html#Editor.getSharingStatus" /> + <keyword name="Editor.getSpellingLanguage" id="Editor.getSpellingLanguage" ref="eric6.QScintilla.Editor.html#Editor.getSpellingLanguage" /> <keyword name="Editor.getSyntaxErrorLines" id="Editor.getSyntaxErrorLines" ref="eric6.QScintilla.Editor.html#Editor.getSyntaxErrorLines" /> <keyword name="Editor.getSyntaxErrors" id="Editor.getSyntaxErrors" ref="eric6.QScintilla.Editor.html#Editor.getSyntaxErrors" /> <keyword name="Editor.getTaskLines" id="Editor.getTaskLines" ref="eric6.QScintilla.Editor.html#Editor.getTaskLines" /> @@ -5079,6 +5091,7 @@ <keyword name="EditorFilePage.on_editFileFilterButton_clicked" id="EditorFilePage.on_editFileFilterButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorFilePage.html#EditorFilePage.on_editFileFilterButton_clicked" /> <keyword name="EditorFilePage.on_fileFiltersList_currentItemChanged" id="EditorFilePage.on_fileFiltersList_currentItemChanged" ref="eric6.Preferences.ConfigurationPages.EditorFilePage.html#EditorFilePage.on_fileFiltersList_currentItemChanged" /> <keyword name="EditorFilePage.on_openFiltersButton_toggled" id="EditorFilePage.on_openFiltersButton_toggled" ref="eric6.Preferences.ConfigurationPages.EditorFilePage.html#EditorFilePage.on_openFiltersButton_toggled" /> + <keyword name="EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked" id="EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorFilePage.html#EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked" /> <keyword name="EditorFilePage.save" id="EditorFilePage.save" ref="eric6.Preferences.ConfigurationPages.EditorFilePage.html#EditorFilePage.save" /> <keyword name="EditorGeneralPage" id="EditorGeneralPage" ref="eric6.Preferences.ConfigurationPages.EditorGeneralPage.html#EditorGeneralPage" /> <keyword name="EditorGeneralPage (Constructor)" id="EditorGeneralPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.EditorGeneralPage.html#EditorGeneralPage.__init__" /> @@ -9491,6 +9504,7 @@ <keyword name="ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged" id="ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged" /> <keyword name="ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled" id="ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled" /> <keyword name="ManageDictionariesDialog.on_locationComboBox_currentTextChanged" id="ManageDictionariesDialog.on_locationComboBox_currentTextChanged" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.on_locationComboBox_currentTextChanged" /> + <keyword name="MarkdownExtensions (Module)" id="MarkdownExtensions (Module)" ref="eric6.UI.Previewers.MarkdownExtensions.html" /> <keyword name="MarkdownProvider" id="MarkdownProvider" ref="eric6.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider" /> <keyword name="MarkdownProvider (Constructor)" id="MarkdownProvider (Constructor)" ref="eric6.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.__init__" /> <keyword name="MarkdownProvider (Module)" id="MarkdownProvider (Module)" ref="eric6.QScintilla.MarkupProviders.MarkdownProvider.html" /> @@ -9564,6 +9578,10 @@ <keyword name="MercurialPage (Module)" id="MercurialPage (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html" /> <keyword name="MercurialPage.on_configButton_clicked" id="MercurialPage.on_configButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html#MercurialPage.on_configButton_clicked" /> <keyword name="MercurialPage.save" id="MercurialPage.save" ref="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html#MercurialPage.save" /> + <keyword name="MermaidExtension" id="MermaidExtension" ref="eric6.UI.Previewers.MarkdownExtensions.html#MermaidExtension" /> + <keyword name="MermaidExtension.extendMarkdown" id="MermaidExtension.extendMarkdown" ref="eric6.UI.Previewers.MarkdownExtensions.html#MermaidExtension.extendMarkdown" /> + <keyword name="MermaidPreprocessor" id="MermaidPreprocessor" ref="eric6.UI.Previewers.MarkdownExtensions.html#MermaidPreprocessor" /> + <keyword name="MermaidPreprocessor.run" id="MermaidPreprocessor.run" ref="eric6.UI.Previewers.MarkdownExtensions.html#MermaidPreprocessor.run" /> <keyword name="Message" id="Message" ref="eric6.Utilities.ClassBrowsers.protoclbr.html#Message" /> <keyword name="Message (Constructor)" id="Message (Constructor)" ref="eric6.Utilities.ClassBrowsers.protoclbr.html#Message.__init__" /> <keyword name="MessageBoxWizard" id="MessageBoxWizard" ref="eric6.Plugins.PluginWizardQMessageBox.html#MessageBoxWizard" /> @@ -9772,12 +9790,10 @@ <keyword name="MicroPythonWidget.setActionButtons" id="MicroPythonWidget.setActionButtons" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.setActionButtons" /> <keyword name="MicrobitDevice" id="MicrobitDevice" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice" /> <keyword name="MicrobitDevice (Constructor)" id="MicrobitDevice (Constructor)" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__init__" /> - <keyword name="MicrobitDevice.__flashCustomMicroPython" id="MicrobitDevice.__flashCustomMicroPython" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__flashCustomMicroPython" /> <keyword name="MicrobitDevice.__flashMicroPython" id="MicrobitDevice.__flashMicroPython" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__flashMicroPython" /> - <keyword name="MicrobitDevice.__flashScript" id="MicrobitDevice.__flashScript" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__flashScript" /> - <keyword name="MicrobitDevice.__installUflashTool" id="MicrobitDevice.__installUflashTool" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__installUflashTool" /> <keyword name="MicrobitDevice.__resetDevice" id="MicrobitDevice.__resetDevice" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__resetDevice" /> <keyword name="MicrobitDevice.__saveMain" id="MicrobitDevice.__saveMain" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__saveMain" /> + <keyword name="MicrobitDevice.__saveScriptToDevice" id="MicrobitDevice.__saveScriptToDevice" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.__saveScriptToDevice" /> <keyword name="MicrobitDevice.addDeviceMenuEntries" id="MicrobitDevice.addDeviceMenuEntries" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.addDeviceMenuEntries" /> <keyword name="MicrobitDevice.canRunScript" id="MicrobitDevice.canRunScript" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.canRunScript" /> <keyword name="MicrobitDevice.canStartFileManager" id="MicrobitDevice.canStartFileManager" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.canStartFileManager" /> @@ -11027,6 +11043,7 @@ <keyword name="Previewer.__processEditor" id="Previewer.__processEditor" ref="eric6.UI.Previewer.html#Previewer.__processEditor" /> <keyword name="Previewer.__splitterMoved" id="Previewer.__splitterMoved" ref="eric6.UI.Previewer.html#Previewer.__splitterMoved" /> <keyword name="Previewer.hide" id="Previewer.hide" ref="eric6.UI.Previewer.html#Previewer.hide" /> + <keyword name="Previewer.preferencesChanged" id="Previewer.preferencesChanged" ref="eric6.UI.Previewer.html#Previewer.preferencesChanged" /> <keyword name="Previewer.show" id="Previewer.show" ref="eric6.UI.Previewer.html#Previewer.show" /> <keyword name="Previewer.shutdown" id="Previewer.shutdown" ref="eric6.UI.Previewer.html#Previewer.shutdown" /> <keyword name="PreviewerHTML" id="PreviewerHTML" ref="eric6.UI.Previewers.PreviewerHTML.html#PreviewerHTML" /> @@ -11044,6 +11061,7 @@ <keyword name="PreviewerHTML.processEditor" id="PreviewerHTML.processEditor" ref="eric6.UI.Previewers.PreviewerHTML.html#PreviewerHTML.processEditor" /> <keyword name="PreviewerHTML.resultCallback" id="PreviewerHTML.resultCallback" ref="eric6.UI.Previewers.PreviewerHTML.html#PreviewerHTML.resultCallback" /> <keyword name="PreviewerHTML.shutdown" id="PreviewerHTML.shutdown" ref="eric6.UI.Previewers.PreviewerHTML.html#PreviewerHTML.shutdown" /> + <keyword name="PreviewerHTMLStyles (Module)" id="PreviewerHTMLStyles (Module)" ref="eric6.UI.Previewers.PreviewerHTMLStyles.html" /> <keyword name="PreviewerQSS" id="PreviewerQSS" ref="eric6.UI.Previewers.PreviewerQSS.html#PreviewerQSS" /> <keyword name="PreviewerQSS (Constructor)" id="PreviewerQSS (Constructor)" ref="eric6.UI.Previewers.PreviewerQSS.html#PreviewerQSS.__init__" /> <keyword name="PreviewerQSS (Module)" id="PreviewerQSS (Module)" ref="eric6.UI.Previewers.PreviewerQSS.html" /> @@ -11698,6 +11716,23 @@ <keyword name="PurgeProjectHelper.initActions" id="PurgeProjectHelper.initActions" ref="eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.ProjectHelper.html#PurgeProjectHelper.initActions" /> <keyword name="PurgeProjectHelper.initMenu" id="PurgeProjectHelper.initMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.ProjectHelper.html#PurgeProjectHelper.initMenu" /> <keyword name="PurgeProjectHelper.menuTitle" id="PurgeProjectHelper.menuTitle" ref="eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.ProjectHelper.html#PurgeProjectHelper.menuTitle" /> + <keyword name="PyBoardDevice" id="PyBoardDevice" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice" /> + <keyword name="PyBoardDevice (Constructor)" id="PyBoardDevice (Constructor)" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__init__" /> + <keyword name="PyBoardDevice.__deviceVolumeMounted" id="PyBoardDevice.__deviceVolumeMounted" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__deviceVolumeMounted" /> + <keyword name="PyBoardDevice.__showInstallInstructions" id="PyBoardDevice.__showInstallInstructions" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__showInstallInstructions" /> + <keyword name="PyBoardDevice.addDeviceMenuEntries" id="PyBoardDevice.addDeviceMenuEntries" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.addDeviceMenuEntries" /> + <keyword name="PyBoardDevice.canRunScript" id="PyBoardDevice.canRunScript" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.canRunScript" /> + <keyword name="PyBoardDevice.canStartFileManager" id="PyBoardDevice.canStartFileManager" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.canStartFileManager" /> + <keyword name="PyBoardDevice.canStartPlotter" id="PyBoardDevice.canStartPlotter" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.canStartPlotter" /> + <keyword name="PyBoardDevice.canStartRepl" id="PyBoardDevice.canStartRepl" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.canStartRepl" /> + <keyword name="PyBoardDevice.deviceName" id="PyBoardDevice.deviceName" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.deviceName" /> + <keyword name="PyBoardDevice.forceInterrupt" id="PyBoardDevice.forceInterrupt" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.forceInterrupt" /> + <keyword name="PyBoardDevice.getDocumentationUrl" id="PyBoardDevice.getDocumentationUrl" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.getDocumentationUrl" /> + <keyword name="PyBoardDevice.getWorkspace" id="PyBoardDevice.getWorkspace" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.getWorkspace" /> + <keyword name="PyBoardDevice.runScript" id="PyBoardDevice.runScript" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.runScript" /> + <keyword name="PyBoardDevice.setButtons" id="PyBoardDevice.setButtons" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.setButtons" /> + <keyword name="PyBoardDevice.supportsLocalFileAccess" id="PyBoardDevice.supportsLocalFileAccess" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.supportsLocalFileAccess" /> + <keyword name="PyBoardDevices (Module)" id="PyBoardDevices (Module)" ref="eric6.MicroPython.PyBoardDevices.html" /> <keyword name="PyCoverageDialog" id="PyCoverageDialog" ref="eric6.DataViews.PyCoverageDialog.html#PyCoverageDialog" /> <keyword name="PyCoverageDialog (Constructor)" id="PyCoverageDialog (Constructor)" ref="eric6.DataViews.PyCoverageDialog.html#PyCoverageDialog.__init__" /> <keyword name="PyCoverageDialog (Module)" id="PyCoverageDialog (Module)" ref="eric6.DataViews.PyCoverageDialog.html" /> @@ -12963,6 +12998,8 @@ <keyword name="ShortcutsWriter (Module)" id="ShortcutsWriter (Module)" ref="eric6.E5XML.ShortcutsWriter.html" /> <keyword name="ShortcutsWriter.__writeActions" id="ShortcutsWriter.__writeActions" ref="eric6.E5XML.ShortcutsWriter.html#ShortcutsWriter.__writeActions" /> <keyword name="ShortcutsWriter.writeXML" id="ShortcutsWriter.writeXML" ref="eric6.E5XML.ShortcutsWriter.html#ShortcutsWriter.writeXML" /> + <keyword name="SimplePatternExtension" id="SimplePatternExtension" ref="eric6.UI.Previewers.MarkdownExtensions.html#SimplePatternExtension" /> + <keyword name="SimplePatternExtension.extendMarkdown" id="SimplePatternExtension.extendMarkdown" ref="eric6.UI.Previewers.MarkdownExtensions.html#SimplePatternExtension.extendMarkdown" /> <keyword name="SingleApplication (Module)" id="SingleApplication (Module)" ref="eric6.Toolbox.SingleApplication.html" /> <keyword name="SingleApplicationClient" id="SingleApplicationClient" ref="eric6.Toolbox.SingleApplication.html#SingleApplicationClient" /> <keyword name="SingleApplicationClient (Constructor)" id="SingleApplicationClient (Constructor)" ref="eric6.Toolbox.SingleApplication.html#SingleApplicationClient.__init__" /> @@ -14713,13 +14750,13 @@ <keyword name="TextVisitor" id="TextVisitor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor" /> <keyword name="TextVisitor (Constructor)" id="TextVisitor (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__init__" /> <keyword name="TextVisitor.__addNode" id="TextVisitor.__addNode" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__addNode" /> - <keyword name="TextVisitor.__isBaseString" id="TextVisitor.__isBaseString" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__isBaseString" /> <keyword name="TextVisitor.__visitBody" id="TextVisitor.__visitBody" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__visitBody" /> <keyword name="TextVisitor.__visitDefinition" id="TextVisitor.__visitDefinition" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__visitDefinition" /> <keyword name="TextVisitor.visit_AsyncFunctionDef" id="TextVisitor.visit_AsyncFunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_AsyncFunctionDef" /> <keyword name="TextVisitor.visit_Bytes" id="TextVisitor.visit_Bytes" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_Bytes" /> <keyword name="TextVisitor.visit_Call" id="TextVisitor.visit_Call" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_Call" /> <keyword name="TextVisitor.visit_ClassDef" id="TextVisitor.visit_ClassDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_ClassDef" /> + <keyword name="TextVisitor.visit_Constant" id="TextVisitor.visit_Constant" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_Constant" /> <keyword name="TextVisitor.visit_FunctionDef" id="TextVisitor.visit_FunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_FunctionDef" /> <keyword name="TextVisitor.visit_Module" id="TextVisitor.visit_Module" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_Module" /> <keyword name="TextVisitor.visit_Str" id="TextVisitor.visit_Str" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_Str" /> @@ -16866,10 +16903,6 @@ <keyword name="_ClbrBase" id="_ClbrBase" ref="eric6.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase" /> <keyword name="_ClbrBase (Constructor)" id="_ClbrBase (Constructor)" ref="eric6.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase.__init__" /> <keyword name="_ClbrBase.setEndLine" id="_ClbrBase.setEndLine" ref="eric6.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase.setEndLine" /> - <keyword name="_StrikeThroughExtension" id="_StrikeThroughExtension" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_StrikeThroughExtension" /> - <keyword name="_StrikeThroughExtension" id="_StrikeThroughExtension" ref="eric6.UI.Previewers.PreviewerHTML.html#_StrikeThroughExtension" /> - <keyword name="_StrikeThroughExtension.extendMarkdown" id="_StrikeThroughExtension.extendMarkdown" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_StrikeThroughExtension.extendMarkdown" /> - <keyword name="_StrikeThroughExtension.extendMarkdown" id="_StrikeThroughExtension.extendMarkdown" ref="eric6.UI.Previewers.PreviewerHTML.html#_StrikeThroughExtension.extendMarkdown" /> <keyword name="__check" id="__check" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#__check" /> <keyword name="__checkCodeStyle" id="__checkCodeStyle" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#__checkCodeStyle" /> <keyword name="__getMasterPassword" id="__getMasterPassword" ref="eric6.Utilities.crypto.__init__.html#__getMasterPassword" /> @@ -17318,6 +17351,8 @@ <keyword name="getUser" id="getUser" ref="eric6.Preferences.__init__.html#getUser" /> <keyword name="getUserName" id="getUserName" ref="eric6.Utilities.__init__.html#getUserName" /> <keyword name="getVCS" id="getVCS" ref="eric6.Preferences.__init__.html#getVCS" /> + <keyword name="getValue" id="getValue" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#getValue" /> + <keyword name="getValue_1" id="getValue_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#getValue_1" /> <keyword name="getVarFilters" id="getVarFilters" ref="eric6.Preferences.__init__.html#getVarFilters" /> <keyword name="getVcsSystemIndicator" id="getVcsSystemIndicator" ref="eric6.Plugins.PluginVcsGit.html#getVcsSystemIndicator" /> <keyword name="getVcsSystemIndicator" id="getVcsSystemIndicator" ref="eric6.Plugins.PluginVcsMercurial.html#getVcsSystemIndicator" /> @@ -17392,6 +17427,10 @@ <keyword name="instance" id="instance" ref="eric6.WebBrowser.ZoomManager.ZoomManager.html#instance" /> <keyword name="ircFilter" id="ircFilter" ref="eric6.Network.IRC.IrcUtilities.html#ircFilter" /> <keyword name="ircTimestamp" id="ircTimestamp" ref="eric6.Network.IRC.IrcUtilities.html#ircTimestamp" /> + <keyword name="isBaseString" id="isBaseString" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isBaseString" /> + <keyword name="isBaseString_1" id="isBaseString_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isBaseString_1" /> + <keyword name="isBytes" id="isBytes" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isBytes" /> + <keyword name="isBytes_1" id="isBytes_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isBytes_1" /> <keyword name="isClientSecretFileAvailable" id="isClientSecretFileAvailable" ref="eric6.E5Network.E5GoogleMailHelpers.html#isClientSecretFileAvailable" /> <keyword name="isCondaAvailable" id="isCondaAvailable" ref="eric6.CondaInterface.__init__.html#isCondaAvailable" /> <keyword name="isConfigured" id="isConfigured" ref="eric6.Preferences.__init__.html#isConfigured" /> @@ -17402,6 +17441,12 @@ <keyword name="isKdeDesktop" id="isKdeDesktop" ref="eric6.Globals.__init__.html#isKdeDesktop" /> <keyword name="isLinuxPlatform" id="isLinuxPlatform" ref="eric6.Globals.__init__.html#isLinuxPlatform" /> <keyword name="isMacPlatform" id="isMacPlatform" ref="eric6.Globals.__init__.html#isMacPlatform" /> + <keyword name="isNameConstant" id="isNameConstant" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNameConstant" /> + <keyword name="isNameConstant_1" id="isNameConstant_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNameConstant_1" /> + <keyword name="isNumber" id="isNumber" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNumber" /> + <keyword name="isNumber_1" id="isNumber_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNumber_1" /> + <keyword name="isString" id="isString" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isString" /> + <keyword name="isString_1" id="isString_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isString_1" /> <keyword name="isTextFile" id="isTextFile" ref="eric6.Utilities.MimeTypes.html#isTextFile" /> <keyword name="isValidAddress" id="isValidAddress" ref="eric6.E5Network.__init__.html#isValidAddress" /> <keyword name="isValidIPv4Address" id="isValidIPv4Address" ref="eric6.E5Network.__init__.html#isValidIPv4Address" /> @@ -17958,6 +18003,7 @@ <file>eric6.MicroPython.MicroPythonSerialPort.html</file> <file>eric6.MicroPython.MicroPythonWidget.html</file> <file>eric6.MicroPython.MicrobitDevices.html</file> + <file>eric6.MicroPython.PyBoardDevices.html</file> <file>eric6.MultiProject.AddProjectDialog.html</file> <file>eric6.MultiProject.MultiProject.html</file> <file>eric6.MultiProject.MultiProjectBrowser.html</file> @@ -17989,6 +18035,7 @@ <file>eric6.PluginManager.PluginUninstallDialog.html</file> <file>eric6.Plugins.AboutPlugin.AboutDialog.html</file> <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.AnnotationsChecker.html</file> + <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html</file> <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.html</file> <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html</file> <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html</file> @@ -18536,7 +18583,9 @@ <file>eric6.UI.NumbersWidget.html</file> <file>eric6.UI.PixmapCache.html</file> <file>eric6.UI.Previewer.html</file> + <file>eric6.UI.Previewers.MarkdownExtensions.html</file> <file>eric6.UI.Previewers.PreviewerHTML.html</file> + <file>eric6.UI.Previewers.PreviewerHTMLStyles.html</file> <file>eric6.UI.Previewers.PreviewerQSS.html</file> <file>eric6.UI.PythonAstViewer.html</file> <file>eric6.UI.SearchWidget.html</file>
--- a/eric6/Documentation/Source/eric6.MicroPython.MicrobitDevices.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.MicroPython.MicrobitDevices.html Fri Nov 01 16:11:27 2019 +0100 @@ -73,22 +73,10 @@ <td>Constructor</td> </tr> <tr> -<td><a href="#MicrobitDevice.__flashCustomMicroPython">__flashCustomMicroPython</a></td> -<td>Private slot to flash a custom MicroPython firmware to the device.</td> -</tr> -<tr> <td><a href="#MicrobitDevice.__flashMicroPython">__flashMicroPython</a></td> <td>Private slot to flash the default MicroPython firmware to the device.</td> </tr> <tr> -<td><a href="#MicrobitDevice.__flashScript">__flashScript</a></td> -<td>Private slot to flash the current script onto the selected device.</td> -</tr> -<tr> -<td><a href="#MicrobitDevice.__installUflashTool">__installUflashTool</a></td> -<td>Private slot to install the uflash package via pip.</td> -</tr> -<tr> <td><a href="#MicrobitDevice.__resetDevice">__resetDevice</a></td> <td>Private slot to reset the connected device.</td> </tr> @@ -97,6 +85,10 @@ <td>Private slot to copy the current script as 'main.py' onto the connected device.</td> </tr> <tr> +<td><a href="#MicrobitDevice.__saveScriptToDevice">__saveScriptToDevice</a></td> +<td>Private method to save the current script onto the connected device.</td> +</tr> +<tr> <td><a href="#MicrobitDevice.addDeviceMenuEntries">addDeviceMenuEntries</a></td> <td>Public method to add device specific entries to the given menu.</td> </tr> @@ -169,13 +161,6 @@ reference to the parent object </dd> </dl> -<a NAME="MicrobitDevice.__flashCustomMicroPython" ID="MicrobitDevice.__flashCustomMicroPython"></a> -<h4>MicrobitDevice.__flashCustomMicroPython</h4> -<b>__flashCustomMicroPython</b>(<i></i>) - -<p> - Private slot to flash a custom MicroPython firmware to the device. -</p> <a NAME="MicrobitDevice.__flashMicroPython" ID="MicrobitDevice.__flashMicroPython"></a> <h4>MicrobitDevice.__flashMicroPython</h4> <b>__flashMicroPython</b>(<i></i>) @@ -183,20 +168,6 @@ <p> Private slot to flash the default MicroPython firmware to the device. </p> -<a NAME="MicrobitDevice.__flashScript" ID="MicrobitDevice.__flashScript"></a> -<h4>MicrobitDevice.__flashScript</h4> -<b>__flashScript</b>(<i></i>) - -<p> - Private slot to flash the current script onto the selected device. -</p> -<a NAME="MicrobitDevice.__installUflashTool" ID="MicrobitDevice.__installUflashTool"></a> -<h4>MicrobitDevice.__installUflashTool</h4> -<b>__installUflashTool</b>(<i></i>) - -<p> - Private slot to install the uflash package via pip. -</p> <a NAME="MicrobitDevice.__resetDevice" ID="MicrobitDevice.__resetDevice"></a> <h4>MicrobitDevice.__resetDevice</h4> <b>__resetDevice</b>(<i></i>) @@ -212,6 +183,21 @@ Private slot to copy the current script as 'main.py' onto the connected device. </p> +<a NAME="MicrobitDevice.__saveScriptToDevice" ID="MicrobitDevice.__saveScriptToDevice"></a> +<h4>MicrobitDevice.__saveScriptToDevice</h4> +<b>__saveScriptToDevice</b>(<i>scriptName=""</i>) + +<p> + Private method to save the current script onto the connected + device. +</p> +<dl> + +<dt><i>scriptName</i> (str)</dt> +<dd> +name of the file on the device +</dd> +</dl> <a NAME="MicrobitDevice.addDeviceMenuEntries" ID="MicrobitDevice.addDeviceMenuEntries"></a> <h4>MicrobitDevice.addDeviceMenuEntries</h4> <b>addDeviceMenuEntries</b>(<i>menu</i>)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Documentation/Source/eric6.MicroPython.PyBoardDevices.html Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,403 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.MicroPython.PyBoardDevices</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>eric6.MicroPython.PyBoardDevices</h1> + +<p> +Module implementing the device interface class for PyBoard boards. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> + +<table> + +<tr> +<td><a href="#PyBoardDevice">PyBoardDevice</a></td> +<td>Class implementing the device for PyBoard boards.</td> +</tr> +</table> +<h3>Functions</h3> + +<table> +<tr><td>None</td></tr> +</table> +<hr /> +<hr /> +<a NAME="PyBoardDevice" ID="PyBoardDevice"></a> +<h2>PyBoardDevice</h2> + +<p> + Class implementing the device for PyBoard boards. +</p> +<h3>Derived from</h3> +MicroPythonDevice +<h3>Class Attributes</h3> + +<table> +<tr><td>DeviceVolumeName</td></tr><tr><td>FlashInstructionsURL</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#PyBoardDevice.__init__">PyBoardDevice</a></td> +<td>Constructor</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.__deviceVolumeMounted">__deviceVolumeMounted</a></td> +<td>Private method to check, if the device volume is mounted.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.__showInstallInstructions">__showInstallInstructions</a></td> +<td>Private slot to open the URL containing instructions for installing MicroPython on the pyboard.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.addDeviceMenuEntries">addDeviceMenuEntries</a></td> +<td>Public method to add device specific entries to the given menu.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.canRunScript">canRunScript</a></td> +<td>Public method to determine, if a script can be executed.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.canStartFileManager">canStartFileManager</a></td> +<td>Public method to determine, if a File Manager can be started.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.canStartPlotter">canStartPlotter</a></td> +<td>Public method to determine, if a Plotter can be started.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.canStartRepl">canStartRepl</a></td> +<td>Public method to determine, if a REPL can be started.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.deviceName">deviceName</a></td> +<td>Public method to get the name of the device.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.forceInterrupt">forceInterrupt</a></td> +<td>Public method to determine the need for an interrupt when opening the serial connection.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.getDocumentationUrl">getDocumentationUrl</a></td> +<td>Public method to get the device documentation URL.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.getWorkspace">getWorkspace</a></td> +<td>Public method to get the workspace directory.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.runScript">runScript</a></td> +<td>Public method to run the given Python script.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.setButtons">setButtons</a></td> +<td>Public method to enable the supported action buttons.</td> +</tr> +<tr> +<td><a href="#PyBoardDevice.supportsLocalFileAccess">supportsLocalFileAccess</a></td> +<td>Public method to indicate file access via a local directory.</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="PyBoardDevice.__init__" ID="PyBoardDevice.__init__"></a> +<h4>PyBoardDevice (Constructor)</h4> +<b>PyBoardDevice</b>(<i>microPythonWidget, parent=None</i>) + +<p> + Constructor +</p> +<dl> + +<dt><i>microPythonWidget</i> (MicroPythonWidget)</dt> +<dd> +reference to the main MicroPython widget +</dd> +<dt><i>parent</i> (QObject)</dt> +<dd> +reference to the parent object +</dd> +</dl> +<a NAME="PyBoardDevice.__deviceVolumeMounted" ID="PyBoardDevice.__deviceVolumeMounted"></a> +<h4>PyBoardDevice.__deviceVolumeMounted</h4> +<b>__deviceVolumeMounted</b>(<i></i>) + +<p> + Private method to check, if the device volume is mounted. +</p> +<dl> +<dt>Returns:</dt> +<dd> +flag indicated a mounted device +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<a NAME="PyBoardDevice.__showInstallInstructions" ID="PyBoardDevice.__showInstallInstructions"></a> +<h4>PyBoardDevice.__showInstallInstructions</h4> +<b>__showInstallInstructions</b>(<i></i>) + +<p> + Private slot to open the URL containing instructions for installing + MicroPython on the pyboard. +</p> +<a NAME="PyBoardDevice.addDeviceMenuEntries" ID="PyBoardDevice.addDeviceMenuEntries"></a> +<h4>PyBoardDevice.addDeviceMenuEntries</h4> +<b>addDeviceMenuEntries</b>(<i>menu</i>) + +<p> + Public method to add device specific entries to the given menu. +</p> +<dl> + +<dt><i>menu</i> (QMenu)</dt> +<dd> +reference to the context menu +</dd> +</dl> +<a NAME="PyBoardDevice.canRunScript" ID="PyBoardDevice.canRunScript"></a> +<h4>PyBoardDevice.canRunScript</h4> +<b>canRunScript</b>(<i></i>) + +<p> + Public method to determine, if a script can be executed. +</p> +<dl> +<dt>Returns:</dt> +<dd> +tuple containing a flag indicating it is safe to start a + Plotter and a reason why it cannot. +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +tuple of (bool, str) +</dd> +</dl> +<a NAME="PyBoardDevice.canStartFileManager" ID="PyBoardDevice.canStartFileManager"></a> +<h4>PyBoardDevice.canStartFileManager</h4> +<b>canStartFileManager</b>(<i></i>) + +<p> + Public method to determine, if a File Manager can be started. +</p> +<dl> +<dt>Returns:</dt> +<dd> +tuple containing a flag indicating it is safe to start a + File Manager and a reason why it cannot. +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +tuple of (bool, str) +</dd> +</dl> +<a NAME="PyBoardDevice.canStartPlotter" ID="PyBoardDevice.canStartPlotter"></a> +<h4>PyBoardDevice.canStartPlotter</h4> +<b>canStartPlotter</b>(<i></i>) + +<p> + Public method to determine, if a Plotter can be started. +</p> +<dl> +<dt>Returns:</dt> +<dd> +tuple containing a flag indicating it is safe to start a + Plotter and a reason why it cannot. +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +tuple of (bool, str) +</dd> +</dl> +<a NAME="PyBoardDevice.canStartRepl" ID="PyBoardDevice.canStartRepl"></a> +<h4>PyBoardDevice.canStartRepl</h4> +<b>canStartRepl</b>(<i></i>) + +<p> + Public method to determine, if a REPL can be started. +</p> +<dl> +<dt>Returns:</dt> +<dd> +tuple containing a flag indicating it is safe to start a REPL + and a reason why it cannot. +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +tuple of (bool, str) +</dd> +</dl> +<a NAME="PyBoardDevice.deviceName" ID="PyBoardDevice.deviceName"></a> +<h4>PyBoardDevice.deviceName</h4> +<b>deviceName</b>(<i></i>) + +<p> + Public method to get the name of the device. +</p> +<dl> +<dt>Returns:</dt> +<dd> +name of the device +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> +<a NAME="PyBoardDevice.forceInterrupt" ID="PyBoardDevice.forceInterrupt"></a> +<h4>PyBoardDevice.forceInterrupt</h4> +<b>forceInterrupt</b>(<i></i>) + +<p> + Public method to determine the need for an interrupt when opening the + serial connection. +</p> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating an interrupt is needed +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<a NAME="PyBoardDevice.getDocumentationUrl" ID="PyBoardDevice.getDocumentationUrl"></a> +<h4>PyBoardDevice.getDocumentationUrl</h4> +<b>getDocumentationUrl</b>(<i></i>) + +<p> + Public method to get the device documentation URL. +</p> +<dl> +<dt>Returns:</dt> +<dd> +documentation URL of the device +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> +<a NAME="PyBoardDevice.getWorkspace" ID="PyBoardDevice.getWorkspace"></a> +<h4>PyBoardDevice.getWorkspace</h4> +<b>getWorkspace</b>(<i>silent=False</i>) + +<p> + Public method to get the workspace directory. +</p> +<dl> + +<dt><i>silent</i> (bool)</dt> +<dd> +flag indicating silent operations +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +workspace directory used for saving files +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> +<a NAME="PyBoardDevice.runScript" ID="PyBoardDevice.runScript"></a> +<h4>PyBoardDevice.runScript</h4> +<b>runScript</b>(<i>script</i>) + +<p> + Public method to run the given Python script. +</p> +<dl> + +<dt><i>script</i> (str)</dt> +<dd> +script to be executed +</dd> +</dl> +<a NAME="PyBoardDevice.setButtons" ID="PyBoardDevice.setButtons"></a> +<h4>PyBoardDevice.setButtons</h4> +<b>setButtons</b>(<i></i>) + +<p> + Public method to enable the supported action buttons. +</p> +<a NAME="PyBoardDevice.supportsLocalFileAccess" ID="PyBoardDevice.supportsLocalFileAccess"></a> +<h4>PyBoardDevice.supportsLocalFileAccess</h4> +<b>supportsLocalFileAccess</b>(<i></i>) + +<p> + Public method to indicate file access via a local directory. +</p> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating file access via local directory +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,455 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities</h1> + +<p> +Module implementing some utility and compatibility functions for working with +the ast module. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Functions</h3> + +<table> + +<tr> +<td><a href="#getValue">getValue</a></td> +<td>Function to extract the value of a node.</td> +</tr> +<tr> +<td><a href="#getValue_1">getValue</a></td> +<td>Function to extract the value of a node.</td> +</tr> +<tr> +<td><a href="#isBaseString">isBaseString</a></td> +<td>Function to check that a node is a bytes or string.</td> +</tr> +<tr> +<td><a href="#isBaseString_1">isBaseString</a></td> +<td>Function to check that a node is a bytes or string.</td> +</tr> +<tr> +<td><a href="#isBytes">isBytes</a></td> +<td>Function to check that a node is a bytes.</td> +</tr> +<tr> +<td><a href="#isBytes_1">isBytes</a></td> +<td>Function to check that a node is a bytes.</td> +</tr> +<tr> +<td><a href="#isNameConstant">isNameConstant</a></td> +<td>Function to check that a node is a name constant.</td> +</tr> +<tr> +<td><a href="#isNameConstant_1">isNameConstant</a></td> +<td>Function to check that a node is a name constant.</td> +</tr> +<tr> +<td><a href="#isNumber">isNumber</a></td> +<td>Function to check that a node is a number.</td> +</tr> +<tr> +<td><a href="#isNumber_1">isNumber</a></td> +<td>Function to check that a node is a number.</td> +</tr> +<tr> +<td><a href="#isString">isString</a></td> +<td>Function to check that a node is a string.</td> +</tr> +<tr> +<td><a href="#isString_1">isString</a></td> +<td>Function to check that a node is a string.</td> +</tr> +</table> +<hr /> +<hr /> +<a NAME="getValue" ID="getValue"></a> +<h2>getValue</h2> +<b>getValue</b>(<i>node</i>) + +<p> + Function to extract the value of a node. +</p> +<dl> + +<dt><i>node</i> (ast.Constant)</dt> +<dd> +reference to the node to extract the value from +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +value of the node +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +any +</dd> +</dl> +<dl> + +<dt>Raises <b>TypeError</b>:</dt> +<dd> +raised to indicate an unsupported type +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="getValue_1" ID="getValue_1"></a> +<h2>getValue</h2> +<b>getValue</b>(<i>node</i>) + +<p> + Function to extract the value of a node. +</p> +<dl> + +<dt><i>node</i> (one of ast.Num, ast.Str, ast.Bytes or ast.NameConstant)</dt> +<dd> +reference to the node to extract the value from +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +value of the node +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +one of str, bytes, int +</dd> +</dl> +<dl> + +<dt>Raises <b>TypeError</b>:</dt> +<dd> +raised to indicate an unsupported type +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isBaseString" ID="isBaseString"></a> +<h2>isBaseString</h2> +<b>isBaseString</b>(<i>node</i>) + +<p> + Function to check that a node is a bytes or string. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a bytes or string +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isBaseString_1" ID="isBaseString_1"></a> +<h2>isBaseString</h2> +<b>isBaseString</b>(<i>node</i>) + +<p> + Function to check that a node is a bytes or string. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a bytes or string +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isBytes" ID="isBytes"></a> +<h2>isBytes</h2> +<b>isBytes</b>(<i>node</i>) + +<p> + Function to check that a node is a bytes. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a bytes +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isBytes_1" ID="isBytes_1"></a> +<h2>isBytes</h2> +<b>isBytes</b>(<i>node</i>) + +<p> + Function to check that a node is a bytes. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a bytes +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isNameConstant" ID="isNameConstant"></a> +<h2>isNameConstant</h2> +<b>isNameConstant</b>(<i>node</i>) + +<p> + Function to check that a node is a name constant. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a name constant +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isNameConstant_1" ID="isNameConstant_1"></a> +<h2>isNameConstant</h2> +<b>isNameConstant</b>(<i>node</i>) + +<p> + Function to check that a node is a name constant. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a name constant +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isNumber" ID="isNumber"></a> +<h2>isNumber</h2> +<b>isNumber</b>(<i>node</i>) + +<p> + Function to check that a node is a number. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a number +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isNumber_1" ID="isNumber_1"></a> +<h2>isNumber</h2> +<b>isNumber</b>(<i>node</i>) + +<p> + Function to check that a node is a number. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a number +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isString" ID="isString"></a> +<h2>isString</h2> +<b>isString</b>(<i>node</i>) + +<p> + Function to check that a node is a string. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a string +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="isString_1" ID="isString_1"></a> +<h2>isString</h2> +<b>isString</b>(<i>node</i>) + +<p> + Function to check that a node is a string. +</p> +<dl> + +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +flag indicating a string +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html Fri Nov 01 16:11:27 2019 +0100 @@ -1856,10 +1856,6 @@ <td>Private method to add a node to our list of nodes.</td> </tr> <tr> -<td><a href="#TextVisitor.__isBaseString">__isBaseString</a></td> -<td>Private method to determine, if a node is a base string node.</td> -</tr> -<tr> <td><a href="#TextVisitor.__visitBody">__visitBody</a></td> <td>Private method to traverse the body of the node manually.</td> </tr> @@ -1884,6 +1880,10 @@ <td>Public method to handle a class definition.</td> </tr> <tr> +<td><a href="#TextVisitor.visit_Constant">visit_Constant</a></td> +<td>Public method to handle constant nodes.</td> +</tr> +<tr> <td><a href="#TextVisitor.visit_FunctionDef">visit_FunctionDef</a></td> <td>Public method to handle a function definition.</td> </tr> @@ -1923,32 +1923,6 @@ reference to the node to add </dd> </dl> -<a NAME="TextVisitor.__isBaseString" ID="TextVisitor.__isBaseString"></a> -<h4>TextVisitor.__isBaseString</h4> -<b>__isBaseString</b>(<i>node</i>) - -<p> - Private method to determine, if a node is a base string node. -</p> -<dl> - -<dt><i>node</i> (ast.AST)</dt> -<dd> -reference to the node to check -</dd> -</dl> -<dl> -<dt>Returns:</dt> -<dd> -flag indicating a base string -</dd> -</dl> -<dl> -<dt>Return Type:</dt> -<dd> -bool -</dd> -</dl> <a NAME="TextVisitor.__visitBody" ID="TextVisitor.__visitBody"></a> <h4>TextVisitor.__visitBody</h4> <b>__visitBody</b>(<i>node</i>) @@ -2037,6 +2011,20 @@ reference to the node to handle </dd> </dl> +<a NAME="TextVisitor.visit_Constant" ID="TextVisitor.visit_Constant"></a> +<h4>TextVisitor.visit_Constant</h4> +<b>visit_Constant</b>(<i>node</i>) + +<p> + Public method to handle constant nodes. +</p> +<dl> + +<dt><i>node</i> (ast.Constant)</dt> +<dd> +reference to the bytes node +</dd> +</dl> <a NAME="TextVisitor.visit_FunctionDef" ID="TextVisitor.visit_FunctionDef"></a> <h4>TextVisitor.visit_FunctionDef</h4> <b>visit_FunctionDef</b>(<i>node</i>)
--- a/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorFilePage.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorFilePage.html Fri Nov 01 16:11:27 2019 +0100 @@ -109,6 +109,10 @@ <td>Private slot to switch the list of file filters.</td> </tr> <tr> +<td><a href="#EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked">on_previewMarkdownPyMdownInstallPushButton_clicked</a></td> +<td>Private slot to install the pymdown extensions package via pip.</td> +</tr> +<tr> <td><a href="#EditorFilePage.save">save</a></td> <td>Public slot to save the Editor File Handling configuration.</td> </tr> @@ -221,6 +225,13 @@ flag indicating the check state of the button (boolean) </dd> </dl> +<a NAME="EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked" ID="EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked"></a> +<h4>EditorFilePage.on_previewMarkdownPyMdownInstallPushButton_clicked</h4> +<b>on_previewMarkdownPyMdownInstallPushButton_clicked</b>(<i></i>) + +<p> + Private slot to install the pymdown extensions package via pip. +</p> <a NAME="EditorFilePage.save" ID="EditorFilePage.save"></a> <h4>EditorFilePage.save</h4> <b>save</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorLanguageTabIndentOverrideDialog.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorLanguageTabIndentOverrideDialog.html Fri Nov 01 16:11:27 2019 +0100 @@ -98,24 +98,24 @@ </p> <dl> -<dt><i>editMode</i> (bool)</dt> +<dt><i>editMode=</i> (bool)</dt> <dd> flag indicating the edit mode (Note: in edit mode the language is fixed) </dd> -<dt><i>languages</i> (list of str)</dt> +<dt><i>languages=</i> (list of str)</dt> <dd> list of available languages </dd> -<dt><i>tabWidth</i> (int)</dt> +<dt><i>tabWidth=</i> (int)</dt> <dd> tab width to be set </dd> -<dt><i>indentWidth</i> (int)</dt> +<dt><i>indentWidth=</i> (int)</dt> <dd> indentation width to be set </dd> -<dt><i>parent</i> (QWidget)</dt> +<dt><i>parent=</i> (QWidget)</dt> <dd> reference to the parent widget </dd>
--- a/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserVirusTotalPage.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserVirusTotalPage.html Fri Nov 01 16:11:27 2019 +0100 @@ -57,7 +57,7 @@ Class implementing VirusTotal configuration page (web browser variant). </p> <h3>Derived from</h3> -ConfigurationPageBase, Ui_HelpVirusTotalPage +ConfigurationPageBase, Ui_WebBrowserVirusTotalPage <h3>Class Attributes</h3> <table>
--- a/eric6/Documentation/Source/eric6.QScintilla.Editor.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.QScintilla.Editor.html Fri Nov 01 16:11:27 2019 +0100 @@ -156,6 +156,11 @@ about to be shown. The name of the menu, a reference to the menu and a reference to the editor are given. </dd> +<dt>spellLanguageChanged(str)</dt> +<dd> +emitted when the editor spell check + language was set. The language is passed as a parameter. +</dd> <dt>syntaxerrorToggled(QsciScintillaCompat)</dt> <dd> emitted when a syntax error @@ -288,6 +293,10 @@ <td>Private method to check the selected language of the language submenu.</td> </tr> <tr> +<td><a href="#Editor.__checkSpellLanguage">__checkSpellLanguage</a></td> +<td>Private slot to check the selected spell check language action.</td> +</tr> +<tr> <td><a href="#Editor.__checkSpellingSelection">__checkSpellingSelection</a></td> <td>Private slot to spell check the current selection.</td> </tr> @@ -492,6 +501,10 @@ <td>Private method used to setup the Show context sub menu.</td> </tr> <tr> +<td><a href="#Editor.__initContextMenuSpellLanguages">__initContextMenuSpellLanguages</a></td> +<td>Private method to setup the spell checking languages context sub menu.</td> +</tr> +<tr> <td><a href="#Editor.__initContextMenuTools">__initContextMenuTools</a></td> <td>Private method used to setup the Tools context sub menu.</td> </tr> @@ -720,6 +733,10 @@ <td>Private method to configure the eol mode of the editor.</td> </tr> <tr> +<td><a href="#Editor.__setFileName">__setFileName</a></td> +<td>Private method to set the file name of the current file.</td> +</tr> +<tr> <td><a href="#Editor.__setLineMarkerColours">__setLineMarkerColours</a></td> <td>Private method to set the line marker colours.</td> </tr> @@ -808,6 +825,10 @@ <td>Private slot called before the show menu is shown.</td> </tr> <tr> +<td><a href="#Editor.__showContextMenuSpellLanguages">__showContextMenuSpellLanguages</a></td> +<td>Private slot handling the aboutToShow signal of the spell check languages context menu.</td> +</tr> +<tr> <td><a href="#Editor.__showContextMenuSpelling">__showContextMenuSpelling</a></td> <td>Private slot to set up the spelling menu before it is shown.</td> </tr> @@ -840,6 +861,14 @@ <td>Private slot called to handle the user entering a character.</td> </tr> <tr> +<td><a href="#Editor.__spellLanguageChanged">__spellLanguageChanged</a></td> +<td>Private slot to handle a change of the spell check language.</td> +</tr> +<tr> +<td><a href="#Editor.__spellLanguagesMenuTriggered">__spellLanguagesMenuTriggered</a></td> +<td>Private method to handle the selection of a spell check language.</td> +</tr> +<tr> <td><a href="#Editor.__styleNeeded">__styleNeeded</a></td> <td>Private slot to handle the need for more styling.</td> </tr> @@ -1188,6 +1217,10 @@ <td>Public method to get some share status info.</td> </tr> <tr> +<td><a href="#Editor.getSpellingLanguage">getSpellingLanguage</a></td> +<td>Public method to get the current spelling language.</td> +</tr> +<tr> <td><a href="#Editor.getSyntaxErrorLines">getSyntaxErrorLines</a></td> <td>Public method to get the lines containing a syntax error.</td> </tr> @@ -2046,6 +2079,13 @@ <p> Private method to check the selected language of the language submenu. </p> +<a NAME="Editor.__checkSpellLanguage" ID="Editor.__checkSpellLanguage"></a> +<h4>Editor.__checkSpellLanguage</h4> +<b>__checkSpellLanguage</b>(<i></i>) + +<p> + Private slot to check the selected spell check language action. +</p> <a NAME="Editor.__checkSpellingSelection" ID="Editor.__checkSpellingSelection"></a> <h4>Editor.__checkSpellingSelection</h4> <b>__checkSpellingSelection</b>(<i></i>) @@ -2721,6 +2761,25 @@ reference to the generated menu (QMenu) </dd> </dl> +<a NAME="Editor.__initContextMenuSpellLanguages" ID="Editor.__initContextMenuSpellLanguages"></a> +<h4>Editor.__initContextMenuSpellLanguages</h4> +<b>__initContextMenuSpellLanguages</b>(<i></i>) + +<p> + Private method to setup the spell checking languages context sub menu. +</p> +<dl> +<dt>Returns:</dt> +<dd> +reference to the generated menu +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +QMenu +</dd> +</dl> <a NAME="Editor.__initContextMenuTools" ID="Editor.__initContextMenuTools"></a> <h4>Editor.__initContextMenuTools</h4> <b>__initContextMenuTools</b>(<i></i>) @@ -3436,6 +3495,20 @@ <p> Private method to configure the eol mode of the editor. </p> +<a NAME="Editor.__setFileName" ID="Editor.__setFileName"></a> +<h4>Editor.__setFileName</h4> +<b>__setFileName</b>(<i>name</i>) + +<p> + Private method to set the file name of the current file. +</p> +<dl> + +<dt><i>name</i> (str)</dt> +<dd> +name of the current file +</dd> +</dl> <a NAME="Editor.__setLineMarkerColours" ID="Editor.__setLineMarkerColours"></a> <h4>Editor.__setLineMarkerColours</h4> <b>__setLineMarkerColours</b>(<i></i>) @@ -3625,6 +3698,14 @@ <p> Private slot called before the show menu is shown. </p> +<a NAME="Editor.__showContextMenuSpellLanguages" ID="Editor.__showContextMenuSpellLanguages"></a> +<h4>Editor.__showContextMenuSpellLanguages</h4> +<b>__showContextMenuSpellLanguages</b>(<i></i>) + +<p> + Private slot handling the aboutToShow signal of the spell check + languages context menu. +</p> <a NAME="Editor.__showContextMenuSpelling" ID="Editor.__showContextMenuSpelling"></a> <h4>Editor.__showContextMenuSpelling</h4> <b>__showContextMenuSpelling</b>(<i></i>) @@ -3704,6 +3785,38 @@ value of the character entered (integer) </dd> </dl> +<a NAME="Editor.__spellLanguageChanged" ID="Editor.__spellLanguageChanged"></a> +<h4>Editor.__spellLanguageChanged</h4> +<b>__spellLanguageChanged</b>(<i>language, propagate=True</i>) + +<p> + Private slot to handle a change of the spell check language. +</p> +<dl> + +<dt><i>language</i> (str)</dt> +<dd> +new spell check language +</dd> +<dt><i>propagate</i> (bool)</dt> +<dd> +flag indicating to propagate the change +</dd> +</dl> +<a NAME="Editor.__spellLanguagesMenuTriggered" ID="Editor.__spellLanguagesMenuTriggered"></a> +<h4>Editor.__spellLanguagesMenuTriggered</h4> +<b>__spellLanguagesMenuTriggered</b>(<i>act</i>) + +<p> + Private method to handle the selection of a spell check language. +</p> +<dl> + +<dt><i>act</i> (QAction)</dt> +<dd> +reference to the action that was triggered +</dd> +</dl> <a NAME="Editor.__styleNeeded" ID="Editor.__styleNeeded"></a> <h4>Editor.__styleNeeded</h4> <b>__styleNeeded</b>(<i>position</i>) @@ -4941,6 +5054,25 @@ (boolean, boolean, boolean, boolean) </dd> </dl> +<a NAME="Editor.getSpellingLanguage" ID="Editor.getSpellingLanguage"></a> +<h4>Editor.getSpellingLanguage</h4> +<b>getSpellingLanguage</b>(<i></i>) + +<p> + Public method to get the current spelling language. +</p> +<dl> +<dt>Returns:</dt> +<dd> +current spelling language +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> <a NAME="Editor.getSyntaxErrorLines" ID="Editor.getSyntaxErrorLines"></a> <h4>Editor.getSyntaxErrorLines</h4> <b>getSyntaxErrorLines</b>(<i></i>) @@ -5487,17 +5619,29 @@ Public method to check, if the given position is within a region, that should be spell checked. </p> -<dl> - -<dt><i>pos</i></dt> -<dd> -position to be checked (integer) +<p> + For files with a configured full text file extension all regions will + be regarded as to be checked. Depending on configuration, all unknown + files (i.e. those without a file extension) will be checked fully as + well. +</p> +<dl> + +<dt><i>pos</i> (int)</dt> +<dd> +position to be checked </dd> </dl> <dl> <dt>Returns:</dt> <dd> -flag indicating pos is in a spell check region (boolean) +flag indicating pos is in a spell check region +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool </dd> </dl> <a NAME="Editor.joinLines" ID="Editor.joinLines"></a>
--- a/eric6/Documentation/Source/eric6.QScintilla.Exporters.ExporterHTML.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.QScintilla.Exporters.ExporterHTML.html Fri Nov 01 16:11:27 2019 +0100 @@ -42,10 +42,6 @@ <td><a href="#HTMLGenerator">HTMLGenerator</a></td> <td>Class implementing an HTML generator for exporting source code.</td> </tr> -<tr> -<td><a href="#_StrikeThroughExtension">_StrikeThroughExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> </table> <h3>Functions</h3> @@ -254,50 +250,4 @@ </dl> <div align="right"><a href="#top">Up</a></div> <hr /> -<hr /> -<a NAME="_StrikeThroughExtension" ID="_StrikeThroughExtension"></a> -<h2>_StrikeThroughExtension</h2> - -<p> - Class is placed here, because it depends on imported markdown, - and markdown import is lazy. -</p> -<p> - (see http://achinghead.com/ - python-markdown-adding-insert-delete.html this page for - details) -</p> -<h3>Derived from</h3> -markdown.Extension -<h3>Class Attributes</h3> - -<table> -<tr><td>DEL_RE</td></tr> -</table> -<h3>Class Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Methods</h3> - -<table> - -<tr> -<td><a href="#_StrikeThroughExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_StrikeThroughExtension.extendMarkdown" ID="_StrikeThroughExtension.extendMarkdown"></a> -<h4>_StrikeThroughExtension.extendMarkdown</h4> -<b>extendMarkdown</b>(<i>md, md_globals</i>) - -<div align="right"><a href="#top">Up</a></div> -<hr /> </body></html> \ No newline at end of file
--- a/eric6/Documentation/Source/eric6.UI.Previewer.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.UI.Previewer.html Fri Nov 01 16:11:27 2019 +0100 @@ -106,6 +106,10 @@ <td>Public method to hide the preview widget.</td> </tr> <tr> +<td><a href="#Previewer.preferencesChanged">preferencesChanged</a></td> +<td>Public slot handling a change of preferences.</td> +</tr> +<tr> <td><a href="#Previewer.show">show</a></td> <td>Public method to show the preview widget.</td> </tr> @@ -240,6 +244,13 @@ <p> Public method to hide the preview widget. </p> +<a NAME="Previewer.preferencesChanged" ID="Previewer.preferencesChanged"></a> +<h4>Previewer.preferencesChanged</h4> +<b>preferencesChanged</b>(<i></i>) + +<p> + Public slot handling a change of preferences. +</p> <a NAME="Previewer.show" ID="Previewer.show"></a> <h4>Previewer.show</h4> <b>show</b>(<i></i>)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Documentation/Source/eric6.UI.Previewers.MarkdownExtensions.html Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,227 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.UI.Previewers.MarkdownExtensions</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>eric6.UI.Previewers.MarkdownExtensions</h1> + +<p> +Module implementing some Markdown extensions. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>MermaidRegex</td></tr><tr><td>MermaidRegexFullText</td></tr> +</table> +<h3>Classes</h3> + +<table> + +<tr> +<td><a href="#MermaidExtension">MermaidExtension</a></td> +<td>Class implementing a Markdown Extension for Mermaid.</td> +</tr> +<tr> +<td><a href="#MermaidPreprocessor">MermaidPreprocessor</a></td> +<td>Class implementing a markdown pre-processor for Mermaid.</td> +</tr> +<tr> +<td><a href="#SimplePatternExtension">SimplePatternExtension</a></td> +<td>Class implementing a Markdown extension for ~, ~~, ^, ^^ and ==.</td> +</tr> +</table> +<h3>Functions</h3> + +<table> +<tr><td>None</td></tr> +</table> +<hr /> +<hr /> +<a NAME="MermaidExtension" ID="MermaidExtension"></a> +<h2>MermaidExtension</h2> + +<p> + Class implementing a Markdown Extension for Mermaid. +</p> +<h3>Derived from</h3> +Extension +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#MermaidExtension.extendMarkdown">extendMarkdown</a></td> +<td>Public method to register the extension.</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="MermaidExtension.extendMarkdown" ID="MermaidExtension.extendMarkdown"></a> +<h4>MermaidExtension.extendMarkdown</h4> +<b>extendMarkdown</b>(<i>md, md_globals</i>) + +<p> + Public method to register the extension. +</p> +<dl> + +<dt><i>md</i></dt> +<dd> +reference to markdown +</dd> +<dt><i>md_globals</i></dt> +<dd> +global config parameters +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="MermaidPreprocessor" ID="MermaidPreprocessor"></a> +<h2>MermaidPreprocessor</h2> + +<p> + Class implementing a markdown pre-processor for Mermaid. +</p> +<h3>Derived from</h3> +Preprocessor +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#MermaidPreprocessor.run">run</a></td> +<td>Public method to do the pre-processing.</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="MermaidPreprocessor.run" ID="MermaidPreprocessor.run"></a> +<h4>MermaidPreprocessor.run</h4> +<b>run</b>(<i>lines</i>) + +<p> + Public method to do the pre-processing. +</p> +<dl> + +<dt><i>lines</i> (list of str)</dt> +<dd> +text lines to be processed +</dd> +</dl> +<dl> +<dt>Returns:</dt> +<dd> +processed lines +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +list of str +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> +<a NAME="SimplePatternExtension" ID="SimplePatternExtension"></a> +<h2>SimplePatternExtension</h2> + +<p> + Class implementing a Markdown extension for ~, ~~, ^, ^^ and ==. +</p> +<p> + Note: This is a very simple pattern extension that might conflict with + formulas set for MathJax. Use the 'pymdown-extensions' package in this + case. +</p> +<h3>Derived from</h3> +Extension +<h3>Class Attributes</h3> + +<table> +<tr><td>DEL_RE</td></tr><tr><td>INS_RE</td></tr><tr><td>MARK_RE</td></tr><tr><td>SUB_RE</td></tr><tr><td>SUP_RE</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#SimplePatternExtension.extendMarkdown">extendMarkdown</a></td> +<td>Public method to register the extension.</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="SimplePatternExtension.extendMarkdown" ID="SimplePatternExtension.extendMarkdown"></a> +<h4>SimplePatternExtension.extendMarkdown</h4> +<b>extendMarkdown</b>(<i>md</i>) + +<p> + Public method to register the extension. +</p> +<dl> + +<dt><i>md</i></dt> +<dd> +reference to markdown +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/eric6/Documentation/Source/eric6.UI.Previewers.PreviewerHTML.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.UI.Previewers.PreviewerHTML.html Fri Nov 01 16:11:27 2019 +0100 @@ -42,10 +42,6 @@ <td><a href="#PreviewerHTML">PreviewerHTML</a></td> <td>Class implementing a previewer widget for HTML, Markdown and ReST files.</td> </tr> -<tr> -<td><a href="#_StrikeThroughExtension">_StrikeThroughExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> </table> <h3>Functions</h3> @@ -150,31 +146,42 @@ </dl> <a NAME="PreviewProcessingThread.__convertMarkdown" ID="PreviewProcessingThread.__convertMarkdown"></a> <h4>PreviewProcessingThread.__convertMarkdown</h4> -<b>__convertMarkdown</b>(<i>text, convertNewLineToBreak, htmlFormat</i>) +<b>__convertMarkdown</b>(<i>text, convertNewLineToBreak, usePyMdownExtensions, htmlFormat</i>) <p> Private method to convert Markdown text into HTML. </p> <dl> -<dt><i>text</i></dt> +<dt><i>text</i> (str)</dt> <dd> -text to be processed (string) +text to be processed </dd> -<dt><i>convertNewLineToBreak</i></dt> +<dt><i>convertNewLineToBreak</i> (bool)</dt> <dd> flag indicating to convert new lines - to HTML break (Markdown only) (boolean) + to HTML break (Markdown only) </dd> -<dt><i>htmlFormat</i></dt> +<dt><i>usePyMdownExtensions</i> (bool)</dt> <dd> -HTML format to be generated by markdown (string) +flag indicating to enable the PyMdown + extensions, if they are available +</dd> +<dt><i>htmlFormat</i> (str)</dt> +<dd> +HTML format to be generated by markdown </dd> </dl> <dl> <dt>Returns:</dt> <dd> -processed HTML (string) +processed HTML +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str </dd> </dl> <a NAME="PreviewProcessingThread.__convertReST" ID="PreviewProcessingThread.__convertReST"></a> @@ -253,7 +260,7 @@ </dl> <a NAME="PreviewProcessingThread.__getHtml" ID="PreviewProcessingThread.__getHtml"></a> <h4>PreviewProcessingThread.__getHtml</h4> -<b>__getHtml</b>(<i>language, text, ssiEnabled, filePath, rootPath, useSphinx, convertNewLineToBreak, markdownHtmlFormat, restDocutilsHtmlFormat</i>) +<b>__getHtml</b>(<i>language, text, ssiEnabled, filePath, rootPath, useSphinx, convertNewLineToBreak, usePyMdownExtensions, markdownHtmlFormat, restDocutilsHtmlFormat</i>) <p> Private method to process the given text depending upon the given @@ -261,52 +268,60 @@ </p> <dl> -<dt><i>language</i></dt> +<dt><i>language</i> (str)</dt> <dd> -language of the text (string) +language of the text </dd> -<dt><i>text</i></dt> +<dt><i>text</i> (str)</dt> <dd> -to be processed (string) +to be processed </dd> -<dt><i>ssiEnabled</i></dt> +<dt><i>ssiEnabled</i> (bool)</dt> <dd> flag indicating to do some (limited) SSI processing - (boolean) </dd> -<dt><i>filePath</i></dt> +<dt><i>filePath</i> (str)</dt> <dd> -file path of the text (string) +file path of the text </dd> -<dt><i>rootPath</i></dt> +<dt><i>rootPath</i> (str)</dt> <dd> -root path to be used for SSI processing (str) +root path to be used for SSI processing </dd> -<dt><i>useSphinx</i></dt> +<dt><i>useSphinx</i> (bool)</dt> <dd> flag indicating to use Sphinx to generate the - ReST preview (boolean) + ReST preview </dd> -<dt><i>convertNewLineToBreak</i></dt> +<dt><i>convertNewLineToBreak</i> (bool)</dt> <dd> flag indicating to convert new lines - to HTML break (Markdown only) (boolean) + to HTML break (Markdown only) </dd> -<dt><i>markdownHtmlFormat</i></dt> +<dt><i>usePyMdownExtensions</i> (bool)</dt> +<dd> +flag indicating to enable the PyMdown + extensions, if they are available +</dd> +<dt><i>markdownHtmlFormat</i> (str)</dt> <dd> HTML format to be generated by markdown - (string) </dd> -<dt><i>restDocutilsHtmlFormat</i></dt> +<dt><i>restDocutilsHtmlFormat</i> (str)</dt> <dd> HTML format to be generated by docutils - (string) </dd> </dl> <dl> <dt>Returns:</dt> <dd> -processed HTML text (string) +processed HTML text +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str </dd> </dl> <a NAME="PreviewProcessingThread.__processRootPath" ID="PreviewProcessingThread.__processRootPath"></a> @@ -373,53 +388,55 @@ </dl> <a NAME="PreviewProcessingThread.process" ID="PreviewProcessingThread.process"></a> <h4>PreviewProcessingThread.process</h4> -<b>process</b>(<i>filePath, language, text, ssiEnabled, rootPath, useSphinx, convertNewLineToBreak, markdownHtmlFormat, restDocutilsHtmlFormat</i>) +<b>process</b>(<i>filePath, language, text, ssiEnabled, rootPath, useSphinx, convertNewLineToBreak, usePyMdownExtensions, markdownHtmlFormat, restDocutilsHtmlFormat</i>) <p> Public method to convert the given text to HTML. </p> <dl> -<dt><i>filePath</i></dt> +<dt><i>filePath</i> (str)</dt> <dd> -file path of the text (string) +file path of the text </dd> -<dt><i>language</i></dt> +<dt><i>language</i> (str)</dt> <dd> -language of the text (string) +language of the text </dd> -<dt><i>text</i></dt> +<dt><i>text</i> (str)</dt> <dd> -text to be processed (string) +text to be processed </dd> -<dt><i>ssiEnabled</i></dt> +<dt><i>ssiEnabled</i> (bool)</dt> <dd> flag indicating to do some (limited) SSI processing - (boolean) </dd> -<dt><i>rootPath</i></dt> +<dt><i>rootPath</i> (str)</dt> <dd> -root path to be used for SSI processing (str) +root path to be used for SSI processing </dd> -<dt><i>useSphinx</i></dt> +<dt><i>useSphinx</i> (bool)</dt> <dd> flag indicating to use Sphinx to generate the - ReST preview (boolean) + ReST preview </dd> -<dt><i>convertNewLineToBreak</i></dt> +<dt><i>convertNewLineToBreak</i> (bool)</dt> <dd> flag indicating to convert new lines - to HTML break (Markdown only) (boolean) + to HTML break (Markdown only) </dd> -<dt><i>markdownHtmlFormat</i></dt> +<dt><i>usePyMdownExtensions</i> (bool)</dt> +<dd> +flag indicating to enable the PyMdown + extensions, if they are available +</dd> +<dt><i>markdownHtmlFormat</i> (str)</dt> <dd> HTML format to be generated by markdown - (string) </dd> -<dt><i>restDocutilsHtmlFormat</i></dt> +<dt><i>restDocutilsHtmlFormat</i> (str)</dt> <dd> HTML format to be generated by docutils - (string) </dd> </dl> <a NAME="PreviewProcessingThread.run" ID="PreviewProcessingThread.run"></a> @@ -687,49 +704,4 @@ </p> <div align="right"><a href="#top">Up</a></div> <hr /> -<hr /> -<a NAME="_StrikeThroughExtension" ID="_StrikeThroughExtension"></a> -<h2>_StrikeThroughExtension</h2> - -<p> - Class is placed here, because it depends on imported markdown, - and markdown import is lazy. -</p> -<p> - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) -</p> -<h3>Derived from</h3> -markdown.Extension -<h3>Class Attributes</h3> - -<table> -<tr><td>DEL_RE</td></tr> -</table> -<h3>Class Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Methods</h3> - -<table> - -<tr> -<td><a href="#_StrikeThroughExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_StrikeThroughExtension.extendMarkdown" ID="_StrikeThroughExtension.extendMarkdown"></a> -<h4>_StrikeThroughExtension.extendMarkdown</h4> -<b>extendMarkdown</b>(<i>md, md_globals</i>) - -<div align="right"><a href="#top">Up</a></div> -<hr /> </body></html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Documentation/Source/eric6.UI.Previewers.PreviewerHTMLStyles.html Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.UI.Previewers.PreviewerHTMLStyles</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>eric6.UI.Previewers.PreviewerHTMLStyles</h1> + +<p> +Module implementing CSS styles for the Markdown preview. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>css_markdown</td></tr><tr><td>css_pygments</td></tr> +</table> +<h3>Classes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Functions</h3> + +<table> +<tr><td>None</td></tr> +</table> +<hr /> +</body></html> \ No newline at end of file
--- a/eric6/Documentation/Source/eric6.UI.UserInterface.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/eric6.UI.UserInterface.html Fri Nov 01 16:11:27 2019 +0100 @@ -113,17 +113,21 @@ <a NAME="Redirector.__init__" ID="Redirector.__init__"></a> <h4>Redirector (Constructor)</h4> -<b>Redirector</b>(<i>stderr</i>) +<b>Redirector</b>(<i>stderr, parent=None</i>) <p> Constructor </p> <dl> -<dt><i>stderr</i></dt> +<dt><i>stderr</i> (bool)</dt> <dd> flag indicating stderr is being redirected </dd> +<dt><i>parent</i> (QObject)</dt> +<dd> +reference to the parent object +</dd> </dl> <a NAME="Redirector.__bufferedWrite" ID="Redirector.__bufferedWrite"></a> <h4>Redirector.__bufferedWrite</h4>
--- a/eric6/Documentation/Source/index-eric6.MicroPython.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/index-eric6.MicroPython.html Fri Nov 01 16:11:27 2019 +0100 @@ -85,5 +85,9 @@ <td><a href="eric6.MicroPython.MicrobitDevices.html">MicrobitDevices</a></td> <td>Module implementing the device interface class for BBC micro:bit boards.</td> </tr> +<tr> +<td><a href="eric6.MicroPython.PyBoardDevices.html">PyBoardDevices</a></td> +<td>Module implementing the device interface class for PyBoard boards.</td> +</tr> </table> </body></html> \ No newline at end of file
--- a/eric6/Documentation/Source/index-eric6.Plugins.CheckerPlugins.CodeStyleChecker.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/index-eric6.Plugins.CheckerPlugins.CodeStyleChecker.html Fri Nov 01 16:11:27 2019 +0100 @@ -34,6 +34,10 @@ <td>Module implementing a checker for function type annotations.</td> </tr> <tr> +<td><a href="eric6.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html">AstUtilities</a></td> +<td>Module implementing some utility and compatibility functions for working with the ast module.</td> +</tr> +<tr> <td><a href="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.html">CodeStyleAddBuiltinIgnoreDialog</a></td> <td>Module implementing a dialog to enter the data for a built-in assignment to be ignored.</td> </tr>
--- a/eric6/Documentation/Source/index-eric6.UI.Previewers.html Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Documentation/Source/index-eric6.UI.Previewers.html Fri Nov 01 16:11:27 2019 +0100 @@ -30,10 +30,18 @@ <table> <tr> +<td><a href="eric6.UI.Previewers.MarkdownExtensions.html">MarkdownExtensions</a></td> +<td>Module implementing some Markdown extensions.</td> +</tr> +<tr> <td><a href="eric6.UI.Previewers.PreviewerHTML.html">PreviewerHTML</a></td> <td>Module implementing a previewer widget for HTML, Markdown and ReST files.</td> </tr> <tr> +<td><a href="eric6.UI.Previewers.PreviewerHTMLStyles.html">PreviewerHTMLStyles</a></td> +<td>Module implementing CSS styles for the Markdown preview.</td> +</tr> +<tr> <td><a href="eric6.UI.Previewers.PreviewerQSS.html">PreviewerQSS</a></td> <td>Module implementing a previewer widget for Qt style sheet files.</td> </tr>
--- a/eric6/E5Gui/E5ErrorMessage.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/E5Gui/E5ErrorMessage.py Fri Nov 01 16:11:27 2019 +0100 @@ -16,6 +16,7 @@ import Globals import Utilities +import Preferences _msgHandlerDialog = None @@ -111,6 +112,11 @@ @type bytes """ if _msgHandlerDialog: + if msgType < Preferences.getUI("MinimumMessageTypeSeverity"): + # severity is lower than configured + # just ignore the message + return + try: if msgType == QtDebugMsg: messageType = "Debug Message:"
--- a/eric6/MicroPython/MicroPythonCommandsInterface.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/MicroPython/MicroPythonCommandsInterface.py Fri Nov 01 16:11:27 2019 +0100 @@ -760,7 +760,8 @@ " try:", # Pyboard (it doesn't have machine.RTC()) " import pyb as __pyb_", " rtc = __pyb_.RTC()", - " clock_time = rtc_time[:6] + (rtc_time[6] + 1, 0)", + " clock_time = rtc_time[:3] +" + " (rtc_time[6] + 1,) + rtc_time[3:6] + (0,)", " rtc.datetime(clock_time)", " del __pyb_", " except Exception:",
--- a/eric6/MicroPython/MicroPythonDevices.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/MicroPython/MicroPythonDevices.py Fri Nov 01 16:11:27 2019 +0100 @@ -54,6 +54,16 @@ "description": "BBC micro:bit", "icon": "microbitDevice", }, + + "pyboard": { + "ids": [ + (0xF055, 0x9800), # Pyboard in CDC mode + (0xF055, 0x9801), # Pyboard in CDC+HID mode + (0xF055, 0x9802), # Pyboard in CDC+MSC mode + ], + "description": "PyBoard", + "icon": "micropython48", + } } @@ -144,6 +154,9 @@ elif deviceType == "bbc_microbit": from .MicrobitDevices import MicrobitDevice return MicrobitDevice(microPythonWidget) + elif deviceType == "pyboard": + from .PyBoardDevices import PyBoardDevice + return PyBoardDevice(microPythonWidget) else: # nothing specific requested return MicroPythonDevice(microPythonWidget)
--- a/eric6/MicroPython/MicroPythonWidget.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/MicroPython/MicroPythonWidget.py Fri Nov 01 16:11:27 2019 +0100 @@ -1109,6 +1109,7 @@ act.setEnabled(self.__connected) self.__superMenu.addAction( self.tr("Show Local Time"), self.__showLocalTime) + # TODO: add entry to show local and device time side-by-side self.__superMenu.addSeparator() if not Globals.isWindowsPlatform(): available = self.__mpyCrossAvailable()
--- a/eric6/MicroPython/MicrobitDevices.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/MicroPython/MicrobitDevices.py Fri Nov 01 16:11:27 2019 +0100 @@ -8,17 +8,17 @@ """ -import sys import os +import shutil from PyQt5.QtCore import pyqtSlot, QStandardPaths +from PyQt5.QtWidgets import QInputDialog, QLineEdit from .MicroPythonDevices import MicroPythonDevice from .MicroPythonWidget import HAS_QTCHART from E5Gui import E5MessageBox, E5FileDialog from E5Gui.E5Application import e5App -from E5Gui.E5ProcessDialog import E5ProcessDialog import Utilities import Preferences @@ -160,17 +160,14 @@ """ connected = self.microPython.isConnected() - act = menu.addAction(self.tr("Flash Default MicroPython Firmware"), + act = menu.addAction(self.tr("Flash MicroPython Firmware"), self.__flashMicroPython) act.setEnabled(not connected) - act = menu.addAction(self.tr("Flash Custom MicroPython Firmware"), - self.__flashCustomMicroPython) - act.setEnabled(not connected) menu.addSeparator() - act = menu.addAction(self.tr("Flash Script"), self.__flashScript) + act = menu.addAction(self.tr("Save Script"), self.__saveScriptToDevice) act.setToolTip(self.tr( - "Flash the current script to the selected device.")) - act.setEnabled(not connected) + "Save the current script to the selected device")) + act.setEnabled(connected) act = menu.addAction(self.tr("Save Script as 'main.py'"), self.__saveMain) act.setToolTip(self.tr( @@ -179,87 +176,35 @@ menu.addSeparator() act = menu.addAction(self.tr("Reset micro:bit"), self.__resetDevice) act.setEnabled(connected) - menu.addSeparator() - menu.addAction(self.tr("Install 'uflash'"), self.__installUflashTool) @pyqtSlot() def __flashMicroPython(self): """ Private slot to flash the default MicroPython firmware to the device. """ - flashArgs = [ - "-u", - "-m", "uflash", - ] - dlg = E5ProcessDialog(self.tr("'uflash' Output"), - self.tr("Flash Default MicroPython Firmware")) - res = dlg.startProcess(sys.executable, flashArgs) - if res: - dlg.exec_() - - @pyqtSlot() - def __flashCustomMicroPython(self): - """ - Private slot to flash a custom MicroPython firmware to the device. - """ - downloadsPath = QStandardPaths.standardLocations( - QStandardPaths.DownloadLocation)[0] - firmware = E5FileDialog.getOpenFileName( - self.microPython, - self.tr("Flash Custom MicroPython Firmware"), - downloadsPath, - self.tr("MicroPython Firmware Files (*.hex);;All Files (*)")) - if firmware and os.path.exists(firmware): - flashArgs = [ - "-u", - "-m", "uflash", - "--runtime", firmware, - ] - dlg = E5ProcessDialog( - self.tr("'uflash' Output"), - self.tr("Flash Default MicroPython Firmware")) - res = dlg.startProcess(sys.executable, flashArgs) - if res: - dlg.exec_() - - @pyqtSlot() - def __flashScript(self): - """ - Private slot to flash the current script onto the selected device. - """ - aw = e5App().getObject("ViewManager").activeWindow() - if not aw: - return - - if not (aw.isPyFile() or aw.isMicroPythonFile()): - yes = E5MessageBox.yesNo( + # Attempts to find the path on the filesystem that represents the + # plugged in micro:bit board in maintenance mode. + deviceDirectory = Utilities.findVolume("MAINTENANCE") + if not deviceDirectory: + # BBC micro:bit is not ready or not mounted + E5MessageBox.critical( self.microPython, - self.tr("Flash Script"), - self.tr("""The current editor does not contain a Python""" - """ script. Flash it anyway?""")) - if not yes: - return - - script = aw.text().strip() - if not script: - E5MessageBox.warning( + self.tr("Flash MicroPython Firmware"), + self.tr( + 'The BBC micro:bit is not ready for flashing. See the' + ' <a href="https://microbit.org/guide/firmware/">' + 'micro:bit web site</a> for details.' + )) + else: + downloadsPath = QStandardPaths.standardLocations( + QStandardPaths.DownloadLocation)[0] + firmware = E5FileDialog.getOpenFileName( self.microPython, - self.tr("Flash Script"), - self.tr("""The script is empty. Aborting.""")) - return - - if aw.checkDirty(): - filename = aw.getFileName() - flashArgs = [ - "-u", - "-m", "uflash", - filename, - ] - dlg = E5ProcessDialog(self.tr("'uflash' Output"), - self.tr("Flash Script")) - res = dlg.startProcess(sys.executable, flashArgs) - if res: - dlg.exec_() + self.tr("Flash MicroPython Firmware"), + downloadsPath, + self.tr("MicroPython Firmware Files (*.hex);;All Files (*)")) + if firmware and os.path.exists(firmware): + shutil.copy2(firmware, deviceDirectory) @pyqtSlot() def __saveMain(self): @@ -267,14 +212,30 @@ Private slot to copy the current script as 'main.py' onto the connected device. """ + self.__saveScriptToDevice("main.py") + + @pyqtSlot() + def __saveScriptToDevice(self, scriptName=""): + """ + Private method to save the current script onto the connected + device. + + @param scriptName name of the file on the device + @type str + """ aw = e5App().getObject("ViewManager").activeWindow() if not aw: return + if scriptName: + title = self.tr("Save Script as '{0}'").format(scriptName) + else: + title = self.tr("Save Script") + if not (aw.isPyFile() or aw.isMicroPythonFile()): yes = E5MessageBox.yesNo( self.microPython, - self.tr("Save Script as 'main.py'"), + title, self.tr("""The current editor does not contain a Python""" """ script. Write it anyway?""")) if not yes: @@ -284,12 +245,25 @@ if not script: E5MessageBox.warning( self.microPython, - self.tr("Save Script as 'main.py'"), + title, self.tr("""The script is empty. Aborting.""")) return + if not scriptName: + scriptName = os.path.basename(aw.getFileName()) + scriptName, ok = QInputDialog.getText( + self.microPython, + title, + self.tr("Enter a file name on the device:"), + QLineEdit.Normal, + scriptName) + if not ok or not bool(scriptName): + return + + title = self.tr("Save Script as '{0}'").format(scriptName) + commands = [ - "fd = open('main.py', 'wb')", + "fd = open('{0}', 'wb')".format(scriptName), "f = fd.write", ] for line in script.splitlines(): @@ -299,16 +273,13 @@ if err: E5MessageBox.critical( self.microPython, - self.tr("Save Script as 'main.py'"), + title, self.tr("""<p>The script could not be saved to the""" """ device.</p><p>Reason: {0}</p>""") .format(err.decode("utf-8"))) # reset the device - self.microPython.commandsInterface().execute([ - "import microbit", - "microbit.reset()", - ]) + self.__resetDevice() @pyqtSlot() def __resetDevice(self): @@ -320,14 +291,6 @@ "microbit.reset()", ]) - @pyqtSlot() - def __installUflashTool(self): - """ - Private slot to install the uflash package via pip. - """ - pip = e5App().getObject("Pip") - pip.installPackages(["uflash"], interpreter=sys.executable) - def getDocumentationUrl(self): """ Public method to get the device documentation URL.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/MicroPython/PyBoardDevices.py Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,197 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the device interface class for PyBoard boards. +""" + +from E5Gui import E5MessageBox +from E5Gui.E5Application import e5App + +from .MicroPythonDevices import MicroPythonDevice +from .MicroPythonWidget import HAS_QTCHART + +import Utilities +import Preferences + + +class PyBoardDevice(MicroPythonDevice): + """ + Class implementing the device for PyBoard boards. + """ + DeviceVolumeName = "PYBFLASH" + + FlashInstructionsURL = ( + "https://github.com/micropython/micropython/wiki/" + "Pyboard-Firmware-Update" + ) + + def __init__(self, microPythonWidget, parent=None): + """ + Constructor + + @param microPythonWidget reference to the main MicroPython widget + @type MicroPythonWidget + @param parent reference to the parent object + @type QObject + """ + super(PyBoardDevice, self).__init__(microPythonWidget, parent) + + def setButtons(self): + """ + Public method to enable the supported action buttons. + """ + super(PyBoardDevice, self).setButtons() + self.microPython.setActionButtons( + run=True, repl=True, files=True, chart=HAS_QTCHART) + + if self.__deviceVolumeMounted(): + self.microPython.setActionButtons(open=True, save=True) + + def forceInterrupt(self): + """ + Public method to determine the need for an interrupt when opening the + serial connection. + + @return flag indicating an interrupt is needed + @rtype bool + """ + return False + + def deviceName(self): + """ + Public method to get the name of the device. + + @return name of the device + @rtype str + """ + return self.tr("PyBoard") + + def canStartRepl(self): + """ + Public method to determine, if a REPL can be started. + + @return tuple containing a flag indicating it is safe to start a REPL + and a reason why it cannot. + @rtype tuple of (bool, str) + """ + return True, "" + + def canStartPlotter(self): + """ + Public method to determine, if a Plotter can be started. + + @return tuple containing a flag indicating it is safe to start a + Plotter and a reason why it cannot. + @rtype tuple of (bool, str) + """ + return True, "" + + def canRunScript(self): + """ + Public method to determine, if a script can be executed. + + @return tuple containing a flag indicating it is safe to start a + Plotter and a reason why it cannot. + @rtype tuple of (bool, str) + """ + return True, "" + + def runScript(self, script): + """ + Public method to run the given Python script. + + @param script script to be executed + @type str + """ + pythonScript = script.split("\n") + self.sendCommands(pythonScript) + + def canStartFileManager(self): + """ + Public method to determine, if a File Manager can be started. + + @return tuple containing a flag indicating it is safe to start a + File Manager and a reason why it cannot. + @rtype tuple of (bool, str) + """ + return True, "" + + def supportsLocalFileAccess(self): + """ + Public method to indicate file access via a local directory. + + @return flag indicating file access via local directory + @rtype bool + """ + return self.__deviceVolumeMounted() + + def __deviceVolumeMounted(self): + """ + Private method to check, if the device volume is mounted. + + @return flag indicated a mounted device + @rtype bool + """ + return self.getWorkspace(silent=True).endswith(self.DeviceVolumeName) + + def getWorkspace(self, silent=False): + """ + Public method to get the workspace directory. + + @param silent flag indicating silent operations + @type bool + @return workspace directory used for saving files + @rtype str + """ + # Attempts to find the path on the filesystem that represents the + # plugged in PyBoard board. + deviceDirectory = Utilities.findVolume(self.DeviceVolumeName) + + if deviceDirectory: + return deviceDirectory + else: + # return the default workspace and give the user a warning (unless + # silent mode is selected) + if not silent: + E5MessageBox.warning( + self.microPython, + self.tr("Workspace Directory"), + self.tr("Python files for PyBoard devices are stored" + " on the device. Therefore, to edit these files" + " you need to have the device plugged in. Until" + " you plug in a device, the standard directory" + " will be used.")) + + return super(PyBoardDevice, self).getWorkspace() + + def getDocumentationUrl(self): + """ + Public method to get the device documentation URL. + + @return documentation URL of the device + @rtype str + """ + return Preferences.getMicroPython("MicroPythonDocuUrl") + + def addDeviceMenuEntries(self, menu): + """ + Public method to add device specific entries to the given menu. + + @param menu reference to the context menu + @type QMenu + """ + menu.addAction( + self.tr("MicroPython Install Instructions"), + self.__showInstallInstructions) + # TODO: add entry to flash a new firmware using dfu-util + + def __showInstallInstructions(self): + """ + Private slot to open the URL containing instructions for installing + MicroPython on the pyboard. + """ + e5App().getObject("UserInterface").launchHelpViewer( + PyBoardDevice.FlashInstructionsURL)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/AstUtilities.py Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing some utility and compatibility functions for working with +the ast module. +""" + +import sys +import ast + +if sys.version_info >= (3, 8, 0): + # functions for Python >= 3.8 + + import numbers + + def isNumber(node): + """ + Function to check that a node is a number. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a number + @rtype bool + """ + return ( + isinstance(node, ast.Constant) and + isinstance(node.value, numbers.Number) + ) + + def isString(node): + """ + Function to check that a node is a string. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a string + @rtype bool + """ + return ( + isinstance(node, ast.Constant) and + isinstance(node.value, str) + ) + + def isBytes(node): + """ + Function to check that a node is a bytes. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a bytes + @rtype bool + """ + return ( + isinstance(node, ast.Constant) and + isinstance(node.value, bytes) + ) + + def isBaseString(node): + """ + Function to check that a node is a bytes or string. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a bytes or string + @rtype bool + """ + return ( + isinstance(node, ast.Constant) and + isinstance(node.value, (bytes, str)) + ) + + def isNameConstant(node): + """ + Function to check that a node is a name constant. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a name constant + @rtype bool + """ + return ( + isinstance(node, ast.Constant) and + not isinstance(node.value, (bytes, str, numbers.Number)) + ) + + def getValue(node): + """ + Function to extract the value of a node. + + @param node reference to the node to extract the value from + @type ast.Constant + @return value of the node + @rtype any + @exception TypeError raised to indicate an unsupported type + """ + if isinstance(node, ast.Constant): + return node.value + else: + raise TypeError("Illegal node type passed.") + +else: + # functions for Python < 3.8 + + def isNumber(node): + """ + Function to check that a node is a number. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a number + @rtype bool + """ + return isinstance(node, ast.Num) + + def isString(node): + """ + Function to check that a node is a string. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a string + @rtype bool + """ + return isinstance(node, ast.Str) + + def isBytes(node): + """ + Function to check that a node is a bytes. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a bytes + @rtype bool + """ + return ( + sys.version_info[0] >= 3 and + isinstance(node, ast.Bytes) + ) + + def isBaseString(node): + """ + Function to check that a node is a bytes or string. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a bytes or string + @rtype bool + """ + typ = (ast.Str,) + if sys.version_info[0] > 2: + typ += (ast.Bytes,) + return isinstance(node, typ) + + def isNameConstant(node): + """ + Function to check that a node is a name constant. + + @param node reference to the node to check + @type ast.AST + @return flag indicating a name constant + @rtype bool + """ + return isinstance(node, ast.NameConstant) + + def getValue(node): + """ + Function to extract the value of a node. + + @param node reference to the node to extract the value from + @type one of ast.Num, ast.Str, ast.Bytes or ast.NameConstant + @return value of the node + @rtype one of str, bytes, int + @exception TypeError raised to indicate an unsupported type + """ + if isinstance(node, ast.Num): + return node.n + + elif isinstance(node, ast.Str): + return node.s + + elif sys.version_info[0] > 2 and isinstance(node, ast.Bytes): + return node.s + + elif isinstance(node, ast.NameConstant): + return node.value + + else: + raise TypeError("Illegal node type passed.")
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py Fri Nov 01 16:11:27 2019 +0100 @@ -15,6 +15,8 @@ from collections import defaultdict import tokenize +import AstUtilities + def composeCallPath(node): """ @@ -467,10 +469,13 @@ node.module == '__future__'): imports |= {name.name for name in node.names} elif isinstance(node, ast.Expr): - if not isinstance(node.value, ast.Str): + if not AstUtilities.isString(node.value): hasCode = True break - elif not isinstance(node, (ast.Module, ast.Str)): + elif not ( + AstUtilities.isString(node) or + isinstance(node, ast.Module) + ): hasCode = True break @@ -879,7 +884,7 @@ @return flag indicating to check the node @rtype bool """ - if not all(isinstance(key, ast.Str) for key in node.keys): + if not all(AstUtilities.isString(key) for key in node.keys): return False if ( @@ -1008,20 +1013,6 @@ node.is_docstring = False self.nodes.append(node) - def __isBaseString(self, node): - """ - Private method to determine, if a node is a base string node. - - @param node reference to the node to check - @type ast.AST - @return flag indicating a base string - @rtype bool - """ - typ = (ast.Str,) - if sys.version_info[0] > 2: - typ += (ast.Bytes,) - return isinstance(node, typ) - def visit_Str(self, node): """ Public method to record a string node. @@ -1039,6 +1030,21 @@ @type ast.Bytes """ self.__addNode(node) + + def visit_Constant(self, node): + """ + Public method to handle constant nodes. + + @param node reference to the bytes node + @type ast.Constant + """ + if sys.version_info >= (3, 8, 0): + if AstUtilities.isBaseString(node): + self.__addNode(node) + else: + super(TextVisitor, self).generic_visit(node) + else: + super(TextVisitor, self).generic_visit(node) def __visitDefinition(self, node): """ @@ -1065,8 +1071,11 @@ @param node reference to the node to traverse @type ast.AST """ - if (node.body and isinstance(node.body[0], ast.Expr) and - self.__isBaseString(node.body[0].value)): + if ( + node.body and + isinstance(node.body[0], ast.Expr) and + AstUtilities.isBaseString(node.body[0].value) + ): node.body[0].value.is_docstring = True for subnode in node.body: @@ -1118,13 +1127,18 @@ @param node reference to the node to handle @type ast.Call """ - if (isinstance(node.func, ast.Attribute) and - node.func.attr == 'format'): - if self.__isBaseString(node.func.value): + if ( + isinstance(node.func, ast.Attribute) and + node.func.attr == 'format' + ): + if AstUtilities.isBaseString(node.func.value): self.calls[node.func.value] = (node, False) - elif (isinstance(node.func.value, ast.Name) and - node.func.value.id == 'str' and node.args and - self.__isBaseString(node.args[0])): + elif ( + isinstance(node.func.value, ast.Name) and + node.func.value.id == 'str' and + node.args and + AstUtilities.isBaseString(node.args[0]) + ): self.calls[node.args[0]] = (node, True) super(TextVisitor, self).generic_visit(node) @@ -1406,13 +1420,13 @@ if ( node.func.id == "getattr" and len(node.args) == 2 and - isinstance(node.args[1], ast.Str) + AstUtilities.isString(node.args[1]) ): self.violations.append((node, "M512")) elif ( node.func.id == "setattr" and len(node.args) == 3 and - isinstance(node.args[1], ast.Str) + AstUtilities.isString(node.args[1]) ): self.violations.append((node, "M513")) except (AttributeError, IndexError): @@ -1487,8 +1501,8 @@ @type ast.Assert """ if ( - isinstance(node.test, ast.NameConstant) and - node.test.value is False + AstUtilities.isNameConstant(node.test) and + AstUtilities.getValue(node.test) is False ): self.violations.append((node, "M503")) @@ -1518,10 +1532,10 @@ if node.func.attr not in ("lstrip", "rstrip", "strip"): return # method name doesn't match - if len(node.args) != 1 or not isinstance(node.args[0], ast.Str): + if len(node.args) != 1 or not AstUtilities.isString(node.args[0]): return # used arguments don't match the builtin strip - s = node.args[0].s + s = AstUtilities.getValue(node.args[0]) if len(s) == 1: return # stripping just one character @@ -1764,10 +1778,12 @@ @type ast.AST @return flag indicating the node contains a None value """ - try: - return isinstance(node, ast.NameConstant) and node.value is None - except AttributeError: - # try Py2 + if sys.version_info[0] > 2: + return ( + AstUtilities.isNameConstant(node) and + AstUtilities.getValue(node) is None + ) + else: return isinstance(node, ast.Name) and node.id == "None" def __resultExists(self): @@ -1953,32 +1969,46 @@ if node.func.attr == 'datetime': # datetime.datetime(2000, 1, 1, 0, 0, 0, 0, # datetime.timezone.utc) - isCase1 = (len(node.args) >= 8 and - not (isinstance(node.args[7], ast.NameConstant) and - node.args[7].value is None)) + isCase1 = ( + len(node.args) >= 8 and + not ( + AstUtilities.isNameConstant(node.args[7]) and + AstUtilities.getValue(node.args[7]) is None + ) + ) # datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc) tzinfoKeyword = self.__getFromKeywords(node.keywords, 'tzinfo') - isCase2 = (tzinfoKeyword is not None and - not (isinstance(tzinfoKeyword.value, - ast.NameConstant) and - tzinfoKeyword.value.value is None)) + isCase2 = ( + tzinfoKeyword is not None and + not ( + AstUtilities.isNameConstant(tzinfoKeyword.value) and + AstUtilities.getValue(tzinfoKeyword.value) is None + ) + ) if not (isCase1 or isCase2): self.violations.append((node, "M301")) elif node.func.attr == 'time': # time(12, 10, 45, 0, datetime.timezone.utc) - isCase1 = (len(node.args) >= 5 and - not (isinstance(node.args[4], ast.NameConstant) and - node.args[4].value is None)) + isCase1 = ( + len(node.args) >= 5 and + not ( + AstUtilities.isNameConstant(node.args[4]) and + AstUtilities.getValue(node.args[4]) is None + ) + ) # datetime.time(12, 10, 45, tzinfo=datetime.timezone.utc) tzinfoKeyword = self.__getFromKeywords(node.keywords, 'tzinfo') - isCase2 = (tzinfoKeyword is not None and - not (isinstance(tzinfoKeyword.value, - ast.NameConstant) and - tzinfoKeyword.value.value is None)) + isCase2 = ( + tzinfoKeyword is not None and + not ( + AstUtilities.isNameConstant(tzinfoKeyword.value) and + AstUtilities.getValue(tzinfoKeyword.value) is None + ) + ) if not (isCase1 or isCase2): self.violations.append((node, "M321")) @@ -1998,34 +2028,48 @@ elif node.func.attr in 'now': # datetime.now(UTC) - isCase1 = (len(node.args) == 1 and - len(node.keywords) == 0 and - not (isinstance(node.args[0], ast.NameConstant) and - node.args[0].value is None)) + isCase1 = ( + len(node.args) == 1 and + len(node.keywords) == 0 and + not ( + AstUtilities.isNameConstant(node.args[0]) and + AstUtilities.getValue(node.args[0]) is None + ) + ) # datetime.now(tz=UTC) tzKeyword = self.__getFromKeywords(node.keywords, 'tz') - isCase2 = (tzKeyword is not None and - not (isinstance(tzKeyword.value, - ast.NameConstant) and - tzKeyword.value.value is None)) + isCase2 = ( + tzKeyword is not None and + not ( + AstUtilities.isNameConstant(tzKeyword.value) and + AstUtilities.getValue(tzKeyword.value) is None + ) + ) if not (isCase1 or isCase2): self.violations.append((node, "M305")) elif node.func.attr == 'fromtimestamp': # datetime.fromtimestamp(1234, UTC) - isCase1 = (len(node.args) == 2 and - len(node.keywords) == 0 and - not (isinstance(node.args[1], ast.NameConstant) and - node.args[1].value is None)) + isCase1 = ( + len(node.args) == 2 and + len(node.keywords) == 0 and + not ( + AstUtilities.isNameConstant(node.args[1]) and + AstUtilities.getValue(node.args[1]) is None + ) + ) # datetime.fromtimestamp(1234, tz=UTC) tzKeyword = self.__getFromKeywords(node.keywords, 'tz') - isCase2 = (tzKeyword is not None and - not (isinstance(tzKeyword.value, - ast.NameConstant) and - tzKeyword.value.value is None)) + isCase2 = ( + tzKeyword is not None and + not ( + AstUtilities.isNameConstant(tzKeyword.value) and + AstUtilities.getValue(tzKeyword.value) is None + ) + ) if not (isCase1 or isCase2): self.violations.append((node, "M306")) @@ -2042,10 +2086,14 @@ else: tzinfoKeyword = self.__getFromKeywords(pparent.keywords, 'tzinfo') - isCase1 = (tzinfoKeyword is not None and - not (isinstance(tzinfoKeyword.value, - ast.NameConstant) and - tzinfoKeyword.value.value is None)) + isCase1 = ( + tzinfoKeyword is not None and + not ( + AstUtilities.isNameConstant( + tzinfoKeyword.value) and + AstUtilities.getValue(tzinfoKeyword.value) is None + ) + ) if not isCase1: self.violations.append((node, "M307")) @@ -2153,8 +2201,8 @@ self.__isSys("version", node.value) and isinstance(node.slice, ast.Slice) and node.slice.lower is None and - isinstance(node.slice.upper, ast.Num) and - node.slice.upper.n == n and + AstUtilities.isNumber(node.slice.upper) and + AstUtilities.getValue(node.slice.upper) == n and node.slice.step is None ) @@ -2172,15 +2220,15 @@ elif ( self.__isSys('version', node.value) and isinstance(node.slice, ast.Index) and - isinstance(node.slice.value, ast.Num) and - node.slice.value.n == 2 + AstUtilities.isNumber(node.slice.value) and + AstUtilities.getValue(node.slice.value) == 2 ): self.violations.append((node.value, "M402")) elif ( self.__isSys('version', node.value) and isinstance(node.slice, ast.Index) and - isinstance(node.slice.value, ast.Num) and - node.slice.value.n == 0 + AstUtilities.isNumber(node.slice.value) and + AstUtilities.getValue(node.slice.value) == 0 ): self.violations.append((node.value, "M421")) @@ -2197,21 +2245,21 @@ isinstance(node.left, ast.Subscript) and self.__isSys('version_info', node.left.value) and isinstance(node.left.slice, ast.Index) and - isinstance(node.left.slice.value, ast.Num) and - node.left.slice.value.n == 0 and + AstUtilities.isNumber(node.left.slice.value) and + AstUtilities.getValue(node.left.slice.value) == 0 and len(node.ops) == 1 and isinstance(node.ops[0], ast.Eq) and - isinstance(node.comparators[0], ast.Num) and - node.comparators[0].n == 3 + AstUtilities.isNumber(node.comparators[0]) and + AstUtilities.getValue(node.comparators[0]) == 3 ): self.violations.append((node.left, "M411")) elif ( self.__isSys('version', node.left) and len(node.ops) == 1 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE)) and - isinstance(node.comparators[0], ast.Str) + AstUtilities.isString(node.comparators[0]) ): - if len(node.comparators[0].s) == 1: + if len(AstUtilities.getValue(node.comparators[0])) == 1: errorCode = "M422" else: errorCode = "M403" @@ -2220,11 +2268,11 @@ isinstance(node.left, ast.Subscript) and self.__isSys('version_info', node.left.value) and isinstance(node.left.slice, ast.Index) and - isinstance(node.left.slice.value, ast.Num) and - node.left.slice.value.n == 1 and + AstUtilities.isNumber(node.left.slice.value) and + AstUtilities.getValue(node.left.slice.value) == 1 and len(node.ops) == 1 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE)) and - isinstance(node.comparators[0], ast.Num) + AstUtilities.isNumber(node.comparators[0]) ): self.violations.append((node, "M413")) elif ( @@ -2233,7 +2281,7 @@ node.left.attr == 'minor' and len(node.ops) == 1 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE)) and - isinstance(node.comparators[0], ast.Num) + AstUtilities.isNumber(node.comparators[0]) ): self.violations.append((node, "M414"))
--- a/eric6/Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.ui Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.ui Fri Nov 01 16:11:27 2019 +0100 @@ -11,7 +11,7 @@ </rect> </property> <property name="toolTip"> - <string>Select to perform an expensive copy detection</string> + <string/> </property> <layout class="QVBoxLayout" name="verticalLayout_2"> <item>
--- a/eric6/Preferences/ConfigurationPages/ApplicationPage.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/ApplicationPage.py Fri Nov 01 16:11:27 2019 +0100 @@ -35,6 +35,11 @@ " this is an advanced setting." )) + self.msgSeverityComboBox.addItem(self.tr("Debug"), 0) + self.msgSeverityComboBox.addItem(self.tr("Warning"), 1) + self.msgSeverityComboBox.addItem(self.tr("Critical"), 2) + self.msgSeverityComboBox.addItem(self.tr("Fatal Error"), 3) + # set initial values self.singleApplicationCheckBox.setChecked( Preferences.getUI("SingleApplicationMode")) @@ -78,6 +83,9 @@ self.errorlogCheckBox.setChecked( Preferences.getUI("CheckErrorLog")) + severityIndex = self.msgSeverityComboBox.findData( + Preferences.getUI("MinimumMessageTypeSeverity")) + self.msgSeverityComboBox.setCurrentIndex(severityIndex) self.intervalSpinBox.setValue( Preferences.getUI("KeyboardInputInterval")) @@ -136,6 +144,9 @@ Preferences.setUI( "CheckErrorLog", self.errorlogCheckBox.isChecked()) + Preferences.setUI( + "MinimumMessageTypeSeverity", + self.msgSeverityComboBox.currentData()) Preferences.setUI( "KeyboardInputInterval",
--- a/eric6/Preferences/ConfigurationPages/ApplicationPage.ui Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/ApplicationPage.ui Fri Nov 01 16:11:27 2019 +0100 @@ -237,6 +237,30 @@ </property> </widget> </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Minimum Severity for message dialog:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="msgSeverityComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="toolTip"> + <string>Select the minimum message severity shown</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> </item> @@ -370,6 +394,7 @@ <tabstop>monthlyCheckRadioButton</tabstop> <tabstop>systemEmailClientCheckBox</tabstop> <tabstop>errorlogCheckBox</tabstop> + <tabstop>msgSeverityComboBox</tabstop> <tabstop>intervalSpinBox</tabstop> <tabstop>backgroundServicesSpinBox</tabstop> </tabstops>
--- a/eric6/Preferences/ConfigurationPages/EditorFilePage.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/EditorFilePage.py Fri Nov 01 16:11:27 2019 +0100 @@ -7,12 +7,14 @@ Module implementing the Editor File Handling configuration page. """ +import sys from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QListWidgetItem, QInputDialog, QLineEdit from PyQt5.Qsci import QsciScintilla from E5Gui import E5MessageBox +from E5Gui.E5Application import e5App from .ConfigurationPageBase import ConfigurationPageBase from .Ui_EditorFilePage import Ui_EditorFilePage @@ -86,26 +88,38 @@ elif eolMode == QsciScintilla.EolUnix: self.lfRadioButton.setChecked(True) + self.previewRefreshTimeoutSpinBox.setValue( + Preferences.getEditor("PreviewRefreshWaitTimer")) + self.previewHtmlExtensionsEdit.setText( " ".join(Preferences.getEditor("PreviewHtmlFileNameExtensions"))) + self.previewMarkdownExtensionsEdit.setText( " ".join( Preferences.getEditor("PreviewMarkdownFileNameExtensions"))) - self.previewRestExtensionsEdit.setText( - " ".join(Preferences.getEditor("PreviewRestFileNameExtensions"))) - self.previewQssExtensionsEdit.setText( - " ".join(Preferences.getEditor("PreviewQssFileNameExtensions"))) self.previewRestSphinxCheckBox.setChecked( Preferences.getEditor("PreviewRestUseSphinx")) self.previewMarkdownNLtoBreakCheckBox.setChecked( Preferences.getEditor("PreviewMarkdownNLtoBR")) + self.previewMarkdownPyMdownCheckBox.setChecked( + Preferences.getEditor("PreviewMarkdownUsePyMdownExtensions")) + self.previewMarkdownMathJaxCheckBox.setChecked( + Preferences.getEditor("PreviewMarkdownMathJax")) + self.previewMarkdownMermaidCheckBox.setChecked( + Preferences.getEditor("PreviewMarkdownMermaid")) index = self.previewMarkdownHTMLFormatComboBox.findText( Preferences.getEditor("PreviewMarkdownHTMLFormat")) self.previewMarkdownHTMLFormatComboBox.setCurrentIndex(index) + + self.previewRestExtensionsEdit.setText( + " ".join(Preferences.getEditor("PreviewRestFileNameExtensions"))) index = self.previewRestDocutilsHTMLFormatComboBox.findText( Preferences.getEditor("PreviewRestDocutilsHTMLFormat")) self.previewRestDocutilsHTMLFormatComboBox.setCurrentIndex(index) + self.previewQssExtensionsEdit.setText( + " ".join(Preferences.getEditor("PreviewQssFileNameExtensions"))) + def save(self): """ Public slot to save the Editor File Handling configuration. @@ -160,33 +174,49 @@ Preferences.setEditor("AdditionalSaveFilters", self.saveFileFilters) Preferences.setEditor( + "PreviewRefreshWaitTimer", + self.previewRefreshTimeoutSpinBox.value()) + + Preferences.setEditor( "PreviewHtmlFileNameExtensions", [ext.strip() for ext in self.previewHtmlExtensionsEdit.text().split()]) + Preferences.setEditor( "PreviewMarkdownFileNameExtensions", [ext.strip() for ext in self.previewMarkdownExtensionsEdit.text().split()]) Preferences.setEditor( - "PreviewRestFileNameExtensions", - [ext.strip() for ext in - self.previewRestExtensionsEdit.text().split()]) - Preferences.setEditor( - "PreviewQssFileNameExtensions", - [ext.strip() for ext in - self.previewQssExtensionsEdit.text().split()]) - Preferences.setEditor( "PreviewRestUseSphinx", self.previewRestSphinxCheckBox.isChecked()) Preferences.setEditor( "PreviewMarkdownNLtoBR", self.previewMarkdownNLtoBreakCheckBox.isChecked()) Preferences.setEditor( + "PreviewMarkdownUsePyMdownExtensions", + self.previewMarkdownPyMdownCheckBox.isChecked()) + Preferences.setEditor( + "PreviewMarkdownMathJax", + self.previewMarkdownMathJaxCheckBox.isChecked()) + Preferences.setEditor( + "PreviewMarkdownMermaid", + self.previewMarkdownMermaidCheckBox.isChecked()) + Preferences.setEditor( "PreviewMarkdownHTMLFormat", self.previewMarkdownHTMLFormatComboBox.currentText()) + + Preferences.setEditor( + "PreviewRestFileNameExtensions", + [ext.strip() for ext in + self.previewRestExtensionsEdit.text().split()]) Preferences.setEditor( "PreviewRestDocutilsHTMLFormat", self.previewRestDocutilsHTMLFormatComboBox.currentText()) + + Preferences.setEditor( + "PreviewQssFileNameExtensions", + [ext.strip() for ext in + self.previewQssExtensionsEdit.text().split()]) def __setDefaultFiltersLists(self, keepSelection=False): """ @@ -327,6 +357,14 @@ self.editFileFilterButton.setEnabled(current is not None) self.deleteFileFilterButton.setEnabled(current is not None) + @pyqtSlot() + def on_previewMarkdownPyMdownInstallPushButton_clicked(self): + """ + Private slot to install the pymdown extensions package via pip. + """ + pip = e5App().getObject("Pip") + pip.installPackages(["pymdown-extensions"], interpreter=sys.executable) + def create(dlg): """
--- a/eric6/Preferences/ConfigurationPages/EditorFilePage.ui Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/EditorFilePage.ui Fri Nov 01 16:11:27 2019 +0100 @@ -7,10 +7,10 @@ <x>0</x> <y>0</y> <width>600</width> - <height>1622</height> + <height>1739</height> </rect> </property> - <layout class="QVBoxLayout" name="verticalLayout_4"> + <layout class="QVBoxLayout" name="verticalLayout_5"> <item> <widget class="QLabel" name="headerLabel"> <property name="text"> @@ -454,7 +454,50 @@ <property name="title"> <string>File Preview</string> </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Refresh Timeout:</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="previewRefreshTimeoutSpinBox"> + <property name="toolTip"> + <string>Enter the timeout in milliseconds until the preview is refreshed</string> + </property> + <property name="suffix"> + <string> ms</string> + </property> + <property name="minimum"> + <number>500</number> + </property> + <property name="maximum"> + <number>5000</number> + </property> + <property name="singleStep"> + <number>500</number> + </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> + </layout> + </item> <item> <widget class="QGroupBox" name="groupBox_12"> <property name="title"> @@ -464,7 +507,7 @@ <item> <widget class="QLabel" name="label_12"> <property name="text"> - <string>Extensions:</string> + <string>File Extensions:</string> </property> </widget> </item> @@ -483,50 +526,119 @@ <property name="title"> <string>Markdown Files</string> </property> - <layout class="QGridLayout" name="gridLayout_4"> - <item row="0" column="0"> - <widget class="QLabel" name="label_11"> - <property name="text"> - <string>Extensions:</string> - </property> - </widget> - </item> - <item row="0" column="1" colspan="2"> - <widget class="QLineEdit" name="previewMarkdownExtensionsEdit"> - <property name="toolTip"> - <string>Enter the filename extensions of Markdown files that may be previewed (separated by a space)</string> - </property> - </widget> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <layout class="QGridLayout" name="gridLayout_4"> + <item row="0" column="0"> + <widget class="QLabel" name="label_11"> + <property name="text"> + <string>File Extensions:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="previewMarkdownExtensionsEdit"> + <property name="toolTip"> + <string>Enter the filename extensions of Markdown files that may be previewed (separated by a space)</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>HTML Format:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="previewMarkdownHTMLFormatComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="toolTip"> + <string>Select the HTML format to be generated</string> + </property> + </widget> + </item> + </layout> </item> - <item row="1" column="0" colspan="3"> - <widget class="QCheckBox" name="previewMarkdownNLtoBreakCheckBox"> - <property name="toolTip"> - <string>Select this to convert a new line character to an HTML &lt;br/&gt; tag.</string> - </property> - <property name="text"> - <string>Convert New Line to HTML Break</string> - </property> - </widget> + <item> + <layout class="QGridLayout" name="gridLayout_5"> + <item row="0" column="0"> + <widget class="QCheckBox" name="previewMarkdownNLtoBreakCheckBox"> + <property name="toolTip"> + <string>Select this to convert a new line character to an HTML &lt;br/&gt; tag.</string> + </property> + <property name="text"> + <string>Convert New Line to HTML Break</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="previewMarkdownMathJaxCheckBox"> + <property name="toolTip"> + <string>Select to enable Math support using MathJax</string> + </property> + <property name="text"> + <string>Enable Math support</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QCheckBox" name="previewMarkdownMermaidCheckBox"> + <property name="toolTip"> + <string>Select to enable Graph support using Mermaid</string> + </property> + <property name="text"> + <string>Enable Graph support</string> + </property> + </widget> + </item> + </layout> </item> - <item row="2" column="0" colspan="2"> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string>HTML Format:</string> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QComboBox" name="previewMarkdownHTMLFormatComboBox"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string>Select the HTML format to be generated</string> - </property> - </widget> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QCheckBox" name="previewMarkdownPyMdownCheckBox"> + <property name="toolTip"> + <string>Select to enable the use of the PyMdown extensions</string> + </property> + <property name="whatsThis"> + <string><b>Enable PyMdown Extensions</b> +<p>Select this entry to enable the use of the PyMdown extensions. These have to be installed with <code>pip install pymdown-extensions</code>.</p></string> + </property> + <property name="text"> + <string>Enable PyMdown Extensions</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="previewMarkdownPyMdownInstallPushButton"> + <property name="toolTip"> + <string>Press to install the PyMdown extensions</string> + </property> + <property name="text"> + <string>Install PyMdown Extensions</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> </item> </layout> </widget> @@ -540,7 +652,7 @@ <item row="0" column="0"> <widget class="QLabel" name="label_9"> <property name="text"> - <string>Extensions:</string> + <string>File Extensions:</string> </property> </widget> </item> @@ -602,7 +714,7 @@ <item> <widget class="QLabel" name="label_10"> <property name="text"> - <string>Extensions:</string> + <string>File Extensions:</string> </property> </widget> </item> @@ -656,10 +768,15 @@ <tabstop>addFileFilterButton</tabstop> <tabstop>editFileFilterButton</tabstop> <tabstop>deleteFileFilterButton</tabstop> + <tabstop>previewRefreshTimeoutSpinBox</tabstop> <tabstop>previewHtmlExtensionsEdit</tabstop> <tabstop>previewMarkdownExtensionsEdit</tabstop> + <tabstop>previewMarkdownHTMLFormatComboBox</tabstop> <tabstop>previewMarkdownNLtoBreakCheckBox</tabstop> - <tabstop>previewMarkdownHTMLFormatComboBox</tabstop> + <tabstop>previewMarkdownMathJaxCheckBox</tabstop> + <tabstop>previewMarkdownMermaidCheckBox</tabstop> + <tabstop>previewMarkdownPyMdownCheckBox</tabstop> + <tabstop>previewMarkdownPyMdownInstallPushButton</tabstop> <tabstop>previewRestExtensionsEdit</tabstop> <tabstop>previewRestSphinxCheckBox</tabstop> <tabstop>previewRestDocutilsHTMLFormatComboBox</tabstop>
--- a/eric6/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.py Fri Nov 01 16:11:27 2019 +0100 @@ -1,5 +1,8 @@ # -*- coding: utf-8 -*- +# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de> +# + """ Module implementing a dialog to set the tab and indentation width override for a language. @@ -14,7 +17,8 @@ class EditorLanguageTabIndentOverrideDialog( - QDialog, Ui_EditorLanguageTabIndentOverrideDialog): + QDialog, Ui_EditorLanguageTabIndentOverrideDialog +): """ Class implementing a dialog to set the tab and indentation width override for a language. @@ -24,16 +28,16 @@ """ Constructor - @param editMode flag indicating the edit mode (Note: in edit mode + @keyparam editMode flag indicating the edit mode (Note: in edit mode the language is fixed) @type bool - @param languages list of available languages + @keyparam languages list of available languages @type list of str - @param tabWidth tab width to be set + @keyparam tabWidth tab width to be set @type int - @param indentWidth indentation width to be set + @keyparam indentWidth indentation width to be set @type int - @param parent reference to the parent widget + @keyparam parent reference to the parent widget @type QWidget """ super(EditorLanguageTabIndentOverrideDialog, self).__init__(parent)
--- a/eric6/Preferences/ConfigurationPages/EditorSpellCheckingPage.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/EditorSpellCheckingPage.py Fri Nov 01 16:11:27 2019 +0100 @@ -55,8 +55,12 @@ self.stringsOnlyCheckBox.setChecked( Preferences.getEditor("SpellCheckStringsOnly")) + self.fullCheckUnknownCheckBox.setChecked( + Preferences.getEditor("FullSpellCheckUnknown")) self.minimumWordSizeSlider.setValue( Preferences.getEditor("SpellCheckingMinWordSize")) + self.spellCheckTextFilesLineEdit.setText( + " ".join(Preferences.getEditor("FullSpellCheckExtensions"))) self.initColour( "SpellingMarkers", self.spellingMarkerButton, @@ -89,7 +93,14 @@ Preferences.setEditor( "SpellCheckStringsOnly", self.stringsOnlyCheckBox.isChecked()) Preferences.setEditor( + "FullSpellCheckUnknown", + self.fullCheckUnknownCheckBox.isChecked()) + Preferences.setEditor( "SpellCheckingMinWordSize", self.minimumWordSizeSlider.value()) + Preferences.setEditor( + "FullSpellCheckExtensions", + [ext.strip() for ext in + self.spellCheckTextFilesLineEdit.text().split()]) self.saveColours(Preferences.setEditorColour)
--- a/eric6/Preferences/ConfigurationPages/EditorSpellCheckingPage.ui Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/EditorSpellCheckingPage.ui Fri Nov 01 16:11:27 2019 +0100 @@ -112,14 +112,28 @@ </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <widget class="QCheckBox" name="stringsOnlyCheckBox"> - <property name="toolTip"> - <string>Select to check strings only</string> - </property> - <property name="text"> - <string>Spell check strings only</string> - </property> - </widget> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QCheckBox" name="stringsOnlyCheckBox"> + <property name="toolTip"> + <string>Select to check strings only</string> + </property> + <property name="text"> + <string>Spell check strings only</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="fullCheckUnknownCheckBox"> + <property name="toolTip"> + <string>Select to perform a complete check of files without extension</string> + </property> + <property name="text"> + <string>Spell check unknown files</string> + </property> + </widget> + </item> + </layout> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout"> @@ -153,7 +167,7 @@ </widget> </item> <item> - <widget class="QLCDNumber" name="lCDNumber"> + <widget class="QLCDNumber" name="lcdNumber"> <property name="toolTip"> <string>Displays the minimum size of words to be checked</string> </property> @@ -170,6 +184,28 @@ </item> </layout> </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Textfiles:</string> + </property> + </widget> + </item> + <item> + <widget class="E5ClearableLineEdit" name="spellCheckTextFilesLineEdit"> + <property name="toolTip"> + <string>Enter the file extensions of pure text files (separated by a space)</string> + </property> + <property name="whatsThis"> + <string><b>Textfiles</b> +<p>Enter the file extension of pure text files. The complete contents of files with these extensions will be checked.</p></string> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> </item> @@ -365,12 +401,19 @@ <header>E5Gui/E5PathPicker.h</header> <container>1</container> </customwidget> + <customwidget> + <class>E5ClearableLineEdit</class> + <extends>QLineEdit</extends> + <header>E5Gui/E5LineEdit.h</header> + </customwidget> </customwidgets> <tabstops> <tabstop>checkingEnabledCheckBox</tabstop> <tabstop>defaultLanguageCombo</tabstop> <tabstop>stringsOnlyCheckBox</tabstop> + <tabstop>fullCheckUnknownCheckBox</tabstop> <tabstop>minimumWordSizeSlider</tabstop> + <tabstop>spellCheckTextFilesLineEdit</tabstop> <tabstop>spellingMarkerButton</tabstop> <tabstop>pwlPicker</tabstop> <tabstop>pelPicker</tabstop> @@ -382,7 +425,7 @@ <connection> <sender>minimumWordSizeSlider</sender> <signal>valueChanged(int)</signal> - <receiver>lCDNumber</receiver> + <receiver>lcdNumber</receiver> <slot>display(int)</slot> <hints> <hint type="sourcelabel">
--- a/eric6/Preferences/ConfigurationPages/WebBrowserVirusTotalPage.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/ConfigurationPages/WebBrowserVirusTotalPage.py Fri Nov 01 16:11:27 2019 +0100 @@ -11,12 +11,13 @@ from PyQt5.QtCore import pyqtSlot from .ConfigurationPageBase import ConfigurationPageBase -from .Ui_HelpVirusTotalPage import Ui_HelpVirusTotalPage +from .Ui_WebBrowserVirusTotalPage import Ui_WebBrowserVirusTotalPage import Preferences -class WebBrowserVirusTotalPage(ConfigurationPageBase, Ui_HelpVirusTotalPage): +class WebBrowserVirusTotalPage(ConfigurationPageBase, + Ui_WebBrowserVirusTotalPage): """ Class implementing VirusTotal configuration page (web browser variant). """
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Preferences/ConfigurationPages/WebBrowserVirusTotalPage.ui Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>WebBrowserVirusTotalPage</class> + <widget class="QWidget" name="WebBrowserVirusTotalPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>485</width> + <height>409</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QLabel" name="headerLabel"> + <property name="text"> + <string><b>Configure VirusTotal Interface</b></string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line17"> + <property name="frameShape"> + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="vtEnabledCheckBox"> + <property name="toolTip"> + <string>Select to enable the VirusTotal interface</string> + </property> + <property name="text"> + <string>Enable VirusTotal</string> + </property> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Service Key</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Enter your personal VirusTotal service key (s. <a href="http://virustotal.com">VirusTotal &copy;</a> for details):</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <property name="openExternalLinks"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="vtServiceKeyEdit"> + <property name="toolTip"> + <string>Enter the VirusTotal service key</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="testResultLabel"> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <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="testButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to test the validity of the service key</string> + </property> + <property name="text"> + <string>Test Service Key</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QCheckBox" name="vtSecureCheckBox"> + <property name="toolTip"> + <string>Select to use a secure (https) connection</string> + </property> + <property name="text"> + <string>Use secure (https) connections</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>74</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <tabstops> + <tabstop>vtEnabledCheckBox</tabstop> + <tabstop>vtServiceKeyEdit</tabstop> + <tabstop>testButton</tabstop> + <tabstop>vtSecureCheckBox</tabstop> + </tabstops> + <resources/> + <connections/> +</ui>
--- a/eric6/Preferences/__init__.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/Preferences/__init__.py Fri Nov 01 16:11:27 2019 +0100 @@ -232,6 +232,10 @@ "DownloadPath": "", "RequestDownloadFilename": True, "CheckErrorLog": True, + "MinimumMessageTypeSeverity": 2, # 0 = QtDebugMsg + # 1 = QtWarningMsg + # 2 = QtCriticalMsg, QtSystemMsg + # 3 = QtFatalMsg "LogStdErrColour": QColor(Qt.red), "NotificationsEnabled": True, @@ -458,6 +462,8 @@ "SpellCheckingDefaultLanguage": "en_US", "SpellCheckingPersonalWordList": "", "SpellCheckingPersonalExcludeList": "", + "FullSpellCheckExtensions": ["md", "markdown", "rst", "txt"], + "FullSpellCheckUnknown": False, "DefaultEncoding": "utf-8", "DefaultOpenFilter": QCoreApplication.translate( @@ -469,13 +475,17 @@ "ZoomFactor": 0, + "PreviewRefreshWaitTimer": 500, # wait time in milliseconds "PreviewHtmlFileNameExtensions": ["html", "htm", "svg", "asp", "kid"], "PreviewMarkdownFileNameExtensions": ["md", "markdown"], "PreviewRestFileNameExtensions": ["rst"], "PreviewQssFileNameExtensions": ["qss"], "PreviewRestUseSphinx": False, - "PreviewMarkdownNLtoBR": True, - "PreviewMarkdownHTMLFormat": "XHTML1", # XHTML1, HTML4, HTML5 + "PreviewMarkdownNLtoBR": False, + "PreviewMarkdownUsePyMdownExtensions": True, + "PreviewMarkdownMathJax": True, + "PreviewMarkdownMermaid": True, + "PreviewMarkdownHTMLFormat": "HTML5", # XHTML1, HTML4, HTML5 "PreviewRestDocutilsHTMLFormat": "HTML5", # HTML4, HTML5 "VirtualSpaceOptions": QsciScintilla.SCVS_NONE, @@ -1867,7 +1877,7 @@ "ProxyType/Ftp", "OpenOnStartup", "PerformVersionCheck", "RecentNumber", "NotificationTimeout", "SidebarDelay", "KeyboardInputInterval", - "BackgroundServiceProcesses"]: + "BackgroundServiceProcesses", "MinimumMessageTypeSeverity"]: return int(prefClass.settings.value( "UI/" + key, prefClass.uiDefaults[key])) elif key in ["ProxyPassword/Http", "ProxyPassword/Https", @@ -2035,14 +2045,16 @@ "PostScriptLevel", "EOLMode", "ZoomFactor", "WhitespaceSize", "OnlineSyntaxCheckInterval", "OnlineChangeTraceInterval", "WrapLongLinesMode", "WrapVisualFlag", "WrapIndentMode", - "WrapStartIndent", "CallTipsPosition", "VirtualSpaceOptions"]: + "WrapStartIndent", "CallTipsPosition", "VirtualSpaceOptions", + "PreviewRefreshWaitTimer"]: return int(prefClass.settings.value( "Editor/" + key, prefClass.editorDefaults[key])) elif key in ["AdditionalOpenFilters", "AdditionalSaveFilters", "PreviewMarkdownFileNameExtensions", "PreviewRestFileNameExtensions", "PreviewHtmlFileNameExtensions", - "PreviewQssFileNameExtensions"]: + "PreviewQssFileNameExtensions", + "FullSpellCheckExtensions"]: return toList(prefClass.settings.value( "Editor/" + key, prefClass.editorDefaults[key])) elif key in ["PythonBadIndentation"]:
--- a/eric6/QScintilla/Editor.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/QScintilla/Editor.py Fri Nov 01 16:11:27 2019 +0100 @@ -29,6 +29,7 @@ from .QsciScintillaCompat import QsciScintillaCompat, QSCINTILLA_VERSION from .EditorMarkerMap import EditorMarkerMap +from .SpellChecker import SpellChecker import Preferences import Utilities @@ -82,6 +83,8 @@ string is passed as a parameter. @signal encodingChanged(str) emitted when the editors encoding was set. The encoding name is passed as a parameter. + @signal spellLanguageChanged(str) emitted when the editor spell check + language was set. The language is passed as a parameter. @signal lastEditPositionAvailable() emitted when a last edit position is available @signal refreshed() emitted to signal a refresh of the editor contents @@ -110,6 +113,7 @@ languageChanged = pyqtSignal(str) eolChanged = pyqtSignal(str) encodingChanged = pyqtSignal(str) + spellLanguageChanged = pyqtSignal(str) lastEditPositionAvailable = pyqtSignal() refreshed = pyqtSignal() settingsRead = pyqtSignal() @@ -173,7 +177,7 @@ self.dbs = dbs self.taskViewer = tv - self.fileName = fn + self.__setFileName(fn) self.vm = vm self.filetype = filetype self.filetypeByFlag = False @@ -202,6 +206,7 @@ self.showingNotcoveredMarkers = False self.lexer_ = None + self.apiLanguage = '' self.__loadEditorConfig() @@ -209,7 +214,6 @@ self.__lexerReset = False self.completer = None self.encoding = self.__getEditorConfig("DefaultEncoding") - self.apiLanguage = '' self.lastModified = 0 self.line = -1 self.inReopenPrompt = False @@ -480,10 +484,13 @@ if editor is None: self.__checkLanguage() self.__checkEncoding() + self.__checkSpellLanguage() else: # it's a clone self.__languageChanged(editor.apiLanguage, propagate=False) self.__encodingChanged(editor.encoding, propagate=False) + self.__spellLanguageChanged(editor.getSpellingLanguage(), + propagate=False) self.setAcceptDrops(True) @@ -528,6 +535,22 @@ self.SCN_ZOOM.connect(self.__markerMap.update) self.__markerMap.update() + def __setFileName(self, name): + """ + Private method to set the file name of the current file. + + @param name name of the current file + @type str + """ + self.fileName = name + + if self.fileName: + self.__fileNameExtension = ( + os.path.splitext(self.fileName)[1][1:].lower() + ) + else: + self.__fileNameExtension = "" + def __registerImages(self): """ Private method to register images for autocompletion lists. @@ -576,6 +599,7 @@ editor.languageChanged.connect(self.languageChanged) editor.eolChanged.connect(self.__eolChanged) editor.encodingChanged.connect(self.__encodingChanged) + editor.spellLanguageChanged.connect(self.__spellLanguageChanged) def removeClone(self, editor): """ @@ -589,6 +613,7 @@ editor.languageChanged.disconnect(self.languageChanged) editor.eolChanged.disconnect(self.__eolChanged) editor.encodingChanged.disconnect(self.__encodingChanged) + editor.spellLanguageChanged.disconnect(self.__spellLanguageChanged) self.__clones.remove(editor) def isClone(self, editor): @@ -747,6 +772,8 @@ self.__menus["Eol"] = self.eolMenu self.encodingsMenu = self.__initContextMenuEncodings() self.__menus["Encodings"] = self.encodingsMenu + self.spellLanguagesMenu = self.__initContextMenuSpellLanguages() + self.__menus["SpellLanguages"] = self.spellLanguagesMenu self.menuActs["Undo"] = self.menu.addAction( UI.PixmapCache.getIcon("editUndo.png"), @@ -809,6 +836,8 @@ self.menuActs["SpellCheckRemove"] = self.menu.addAction( self.tr("Remove from dictionary"), self.__removeFromSpellingDictionary) + self.menuActs["SpellCheckLanguages"] = self.menu.addMenu( + self.spellLanguagesMenu) self.menu.addSeparator() self.menu.addAction( self.tr('Shorten empty lines'), self.shortenEmptyLines) @@ -1126,7 +1155,39 @@ menu.aboutToShow.connect(self.__showContextMenuEol) return menu - + + def __initContextMenuSpellLanguages(self): + """ + Private method to setup the spell checking languages context sub menu. + + @return reference to the generated menu + @rtype QMenu + """ + self.supportedSpellLanguages = {} + + menu = QMenu(self.tr("Spell Check Languages")) + + self.spellLanguagesActGrp = QActionGroup(self) + + self.noSpellLanguageAct = menu.addAction( + self.tr("No Language")) + self.noSpellLanguageAct.setCheckable(True) + self.noSpellLanguageAct.setData("") + self.spellLanguagesActGrp.addAction(self.noSpellLanguageAct) + menu.addSeparator() + + for language in sorted(SpellChecker.getAvailableLanguages()): + act = menu.addAction(language) + act.setCheckable(True) + act.setData(language) + self.supportedSpellLanguages[language] = act + self.spellLanguagesActGrp.addAction(act) + + menu.triggered.connect(self.__spellLanguagesMenuTriggered) + menu.aboutToShow.connect(self.__showContextMenuSpellLanguages) + + return menu + def __initContextMenuExporters(self): """ Private method used to setup the Exporters context sub menu. @@ -1597,7 +1658,52 @@ eol = self.getLineSeparator() self.eolChanged.emit(eol) self.inEolChanged = False - + + def __showContextMenuSpellLanguages(self): + """ + Private slot handling the aboutToShow signal of the spell check + languages context menu. + """ + self.showMenu.emit("SpellLanguage", self.spellLanguagesMenu, self) + + def __spellLanguagesMenuTriggered(self, act): + """ + Private method to handle the selection of a spell check language. + + @param act reference to the action that was triggered + @type QAction + """ + language = act.data() + self.__setSpellingLanguage(language) + self.spellLanguageChanged.emit(language) + + def __checkSpellLanguage(self): + """ + Private slot to check the selected spell check language action. + """ + language = self.getSpellingLanguage() + try: + self.supportedSpellLanguages[language].setChecked(True) + except (AttributeError, KeyError): + pass + + def __spellLanguageChanged(self, language, propagate=True): + """ + Private slot to handle a change of the spell check language. + + @param language new spell check language + @type str + @param propagate flag indicating to propagate the change + @type bool + """ + self.__setSpellingLanguage(language) + self.__checkSpellLanguage(language) + + if not self.__inSpellLanguageChanged and propagate: + self.__inSpellLanguageChanged = True + self.spellLanguageChanged.emit(language) + self.__inSpellLanguageChanged = False + def __bindLexer(self, filename, pyname=""): """ Private slot to set the correct lexer depending on language. @@ -3261,7 +3367,7 @@ if self.writeFile(fn): if saveas: self.__clearBreakpoints(self.fileName) - self.fileName = fn + self.__setFileName(fn) self.setModified(False) self.setReadOnly(False) self.setWindowTitle(self.fileName) @@ -3318,7 +3424,7 @@ """ self.__clearBreakpoints(fn) - self.fileName = fn + self.__setFileName(fn) self.setWindowTitle(self.fileName) self.__loadEditorConfig() @@ -5351,13 +5457,13 @@ self.menuActs["codeInfo"].setEnabled( self.vm.isEditorInfoSupported(self.getLanguage())) - from .SpellChecker import SpellChecker spellingAvailable = SpellChecker.isAvailable() self.menuActs["SpellCheck"].setEnabled(spellingAvailable) self.menuActs["SpellCheckSelection"].setEnabled( spellingAvailable and self.hasSelectedText()) self.menuActs["SpellCheckRemove"].setEnabled( spellingAvailable and self.spellingMenuPos >= 0) + self.menuActs["SpellCheckLanguages"].setEnabled(spellingAvailable) if self.menuActs["OpenRejections"]: if self.fileName: @@ -7548,6 +7654,18 @@ ## Spell checking related methods ####################################################################### + def getSpellingLanguage(self): + """ + Public method to get the current spelling language. + + @return current spelling language + @rtype str + """ + if self.spell: + return self.spell.getLanguage() + + return "" + def __setSpellingLanguage(self, language, pwl="", pel=""): """ Private slot to set the spell checking language. @@ -7568,7 +7686,6 @@ self.__spellCheckStringsOnly = Preferences.getEditor( "SpellCheckStringsOnly") if self.spell is None: - from .SpellChecker import SpellChecker self.spell = SpellChecker(self, self.spellingIndicator, checkRegion=self.isSpellCheckRegion) self.setSpellingForProject() @@ -7617,16 +7734,35 @@ Public method to check, if the given position is within a region, that should be spell checked. - @param pos position to be checked (integer) - @return flag indicating pos is in a spell check region (boolean) + For files with a configured full text file extension all regions will + be regarded as to be checked. Depending on configuration, all unknown + files (i.e. those without a file extension) will be checked fully as + well. + + @param pos position to be checked + @type int + @return flag indicating pos is in a spell check region + @rtype bool """ if self.__spellCheckStringsOnly: - style = self.styleAt(pos) - if self.lexer_ is not None: - return ( - self.lexer_.isCommentStyle(style) or - self.lexer_.isStringStyle(style) - ) + if ( + self.__fileNameExtension in + Preferences.getEditor("FullSpellCheckExtensions") + ): + return True + elif ( + not self.__fileNameExtension and + Preferences.getEditor("FullSpellCheckUnknown") + ): + return True + else: + style = self.styleAt(pos) + if self.lexer_ is not None: + return ( + self.lexer_.isCommentStyle(style) or + self.lexer_.isStringStyle(style) + ) + return True @pyqtSlot(int) @@ -8428,11 +8564,12 @@ """ if option in ("TabWidth", "IndentWidth"): overrides = Preferences.getEditor("TabIndentOverride") - if self.filetype in overrides: + language = self.filetype or self.apiLanguage + if language in overrides: if option == "TabWidth": - return overrides[self.filetype][0] + return overrides[language][0] elif option == "IndentWidth": - return overrides[self.filetype][1] + return overrides[language][1] return None
--- a/eric6/QScintilla/Exporters/ExporterHTML.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/QScintilla/Exporters/ExporterHTML.py Fri Nov 01 16:11:27 2019 +0100 @@ -525,56 +525,79 @@ ) return "" - try: - import mdx_mathjax # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ - except ImportError: - # mathjax doesn't require import statement if installed as - # extension - pass + from UI.Previewers import PreviewerHTMLStyles + from UI.Previewers import MarkdownExtensions + + extensions = [] + + text = self.editor.text() + + mermaidNeeded = False + if Preferences.getEditor("PreviewMarkdownMermaid"): + if MarkdownExtensions.MermaidRegex.search(text): + extensions.append(MarkdownExtensions.MermaidExtension()) + mermaidNeeded = True if Preferences.getEditor("PreviewMarkdownNLtoBR"): - extensions = ['fenced_code', 'nl2br', 'extra'] - else: - extensions = ['fenced_code', 'extra'] + extensions.append('nl2br') - # version 2.0 supports only extension names, not instances - if ( - markdown.version_info[0] > 2 or - (markdown.version_info[0] == 2 and - markdown.version_info[1] > 0) - ): - class _StrikeThroughExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported markdown, - and markdown import is lazy. + pyMdown = False + if Preferences.getEditor("PreviewMarkdownUsePyMdownExtensions"): + try: + import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ + # PyPI package is 'pymdown-extensions' - (see http://achinghead.com/ - python-markdown-adding-insert-delete.html this page for - details) - """ - DEL_RE = r'(~~)(.*?)~~' - - def extendMarkdown(self, md, md_globals): - # Create the del pattern - del_tag = markdown.inlinepatterns.SimpleTagPattern( - self.DEL_RE, 'del') - # Insert del pattern into markdown parser - md.inlinePatterns.add('del', del_tag, '>not_strong') + extensions.extend([ + 'toc', + 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', + 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', + 'pymdownx.tasklist', 'pymdownx.smartsymbols', + ]) + pyMdown = True + except ImportError: + pass + + if not pyMdown: + extensions.extend(['extra', 'toc']) - extensions.append(_StrikeThroughExtension()) + # version 2.0 supports only extension names, not instances + if ( + markdown.version_info[0] > 2 or + (markdown.version_info[0] == 2 and + markdown.version_info[1] > 0) + ): + extensions.append(MarkdownExtensions.SimplePatternExtension()) + + if Preferences.getEditor("PreviewMarkdownMathJax"): + mathjax = ( + "<script type='text/javascript' id='MathJax-script' async" + " src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/" + "tex-chtml.js'>\n" + "</script>\n" + ) + # prepare text for mathjax + text = ( + text + .replace(r"\(", r"\\(") + .replace(r"\)", r"\\)") + .replace(r"\[", r"\\[") + .replace(r"\]", r"\\]") + ) + else: + mathjax = "" + + if mermaidNeeded: + mermaid = ( + "<script type='text/javascript' id='Mermaid-script'" + " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n" + "</script>\n" + ) + else: + mermaid = "" htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower() - try: - body = markdown.markdown(self.editor.text(), - extensions=extensions + ['mathjax'], - output_format=htmlFormat) - except (ImportError, ValueError): - # markdown raises ValueError or ImportError, depends on version - # It is not clear, how to distinguish missing mathjax from other - # errors. So keep going without mathjax. - body = markdown.markdown(self.editor.text(), - extensions=extensions, - output_format=htmlFormat) + body = markdown.markdown(text, extensions=extensions, + output_format=htmlFormat) if htmlFormat == "xhtml1": head = ( @@ -602,8 +625,17 @@ '''<meta name="Generator" content="eric6" />\n''' '''<meta http-equiv="Content-Type" ''' '''content="text/html; charset=utf-8" />\n''' + '''{0}''' + '''{1}''' + '''<style type="text/css">''' + '''{2}''' + '''</style>\n''' '''</head>\n''' '''<body>\n''' + ).format( + mathjax, mermaid, + PreviewerHTMLStyles.css_markdown + + PreviewerHTMLStyles.css_pygments ) foot = '''\n</body>\n</html>\n'''
--- a/eric6/UI/Previewer.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/UI/Previewer.py Fri Nov 01 16:11:27 2019 +0100 @@ -10,7 +10,7 @@ import os -from PyQt5.QtCore import QTimer +from PyQt5.QtCore import pyqtSlot, QTimer from PyQt5.QtWidgets import QStackedWidget import Preferences @@ -41,7 +41,8 @@ # Don't update too often because the UI might become sluggish self.__typingTimer = QTimer() - self.__typingTimer.setInterval(500) # 500ms + self.__typingTimer.setInterval( + Preferences.getEditor("PreviewRefreshWaitTimer")) # default 500ms self.__typingTimer.timeout.connect(self.__processEditor) self.__vm.editorChangedEd.connect(self.__editorChanged) @@ -54,6 +55,14 @@ self.hide() + @pyqtSlot() + def preferencesChanged(self): + """ + Public slot handling a change of preferences. + """ + self.__typingTimer.setInterval( + Preferences.getEditor("PreviewRefreshWaitTimer")) + def show(self): """ Public method to show the preview widget.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/UI/Previewers/MarkdownExtensions.py Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing some Markdown extensions. +""" + +import re + +from markdown.extensions import Extension +from markdown.preprocessors import Preprocessor + +from markdown.inlinepatterns import SimpleTagInlineProcessor + +###################################################################### +## Code below is an enhanced copy of the Mermaid extension +## +## Original code Copyright 2018-2020 [Olivier Ruelle] +## License: GNU GPLv3 +###################################################################### + +MermaidRegex = re.compile( + r"^(?P<mermaid_sign>[\~\`]){3}[ \t]*[Mm]ermaid[ \t]*$" +) +MermaidRegexFullText = re.compile( + r"([\~\`]){3}[ \t]*[Mm]ermaid" +) + + +class MermaidPreprocessor(Preprocessor): + """ + Class implementing a markdown pre-processor for Mermaid. + """ + def run(self, lines): + """ + Public method to do the pre-processing. + + @param lines text lines to be processed + @type list of str + @return processed lines + @rtype list of str + """ + new_lines = [] + mermaid_sign = "" + m_start = None + m_end = None + in_mermaid_code = False + is_mermaid = False + old_line = "" + for line in lines: + # Wait for starting line with MermaidRegex + # (~~~ or ``` following by [mM]ermaid ) + if not in_mermaid_code: + m_start = MermaidRegex.match(line) + else: + m_end = re.match(r"^[" + mermaid_sign + "]{3}[ \t]*$", line) + if m_end: + in_mermaid_code = False + + if m_start: + in_mermaid_code = True + mermaid_sign = m_start.group("mermaid_sign") + if not re.match(r"^[\ \t]*$", old_line): + new_lines.append("") + if not is_mermaid: + is_mermaid = True + new_lines.append('<div class="mermaid">') + m_start = None + elif m_end: + new_lines.append('</div>') + new_lines.append("") + m_end = None + elif in_mermaid_code: + new_lines.append( + line.strip() + .replace("<", "<") + .replace(">", ">") + ) + else: + + new_lines.append(line) + + old_line = line + + if is_mermaid: + new_lines.append('') + new_lines.append( + '<script>mermaid.initialize({startOnLoad:true});</script>' + ) + + return new_lines + + +class MermaidExtension(Extension): + """ + Class implementing a Markdown Extension for Mermaid. + """ + def extendMarkdown(self, md, md_globals): + """ + Public method to register the extension. + + @param md reference to markdown + @param md_globals global config parameters + """ + md.preprocessors.register(MermaidPreprocessor(md), 'mermaid', 35) + md.registerExtension(self) + +###################################################################### +## Some extension to some basic additions +###################################################################### + + +class SimplePatternExtension(Extension): + """ + Class implementing a Markdown extension for ~, ~~, ^, ^^ and ==. + + Note: This is a very simple pattern extension that might conflict with + formulas set for MathJax. Use the 'pymdown-extensions' package in this + case. + """ + DEL_RE = r'(~~)(.+?)~~' + SUB_RE = r'(~)(.+?)~' + INS_RE = r'(\^\^)(.*?)\^\^' + SUP_RE = r'(\^)(.*?)\^' + MARK_RE = r'(==)(.*?)==' + + def extendMarkdown(self, md): + """ + Public method to register the extension. + + @param md reference to markdown + """ + md.inlinePatterns.register( + SimpleTagInlineProcessor(self.SUB_RE, 'sub'), 'subscript', 30) + md.inlinePatterns.register( + SimpleTagInlineProcessor(self.DEL_RE, 'del'), 'deleted', 40) + md.inlinePatterns.register( + SimpleTagInlineProcessor(self.SUP_RE, 'sup'), 'superscript', 30) + md.inlinePatterns.register( + SimpleTagInlineProcessor(self.INS_RE, 'ins'), 'inserted', 40) + md.inlinePatterns.register( + SimpleTagInlineProcessor(self.MARK_RE, 'mark'), 'mark', 40)
--- a/eric6/UI/Previewers/PreviewerHTML.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/UI/Previewers/PreviewerHTML.py Fri Nov 01 16:11:27 2019 +0100 @@ -211,6 +211,8 @@ self.ssiCheckBox.isChecked(), rootPath, Preferences.getEditor("PreviewRestUseSphinx"), Preferences.getEditor("PreviewMarkdownNLtoBR"), + Preferences.getEditor( + "PreviewMarkdownUsePyMdownExtensions"), Preferences.getEditor("PreviewMarkdownHTMLFormat"), Preferences.getEditor("PreviewRestDocutilsHTMLFormat")) @@ -338,25 +340,34 @@ self.__lock = threading.Lock() def process(self, filePath, language, text, ssiEnabled, rootPath, - useSphinx, convertNewLineToBreak, markdownHtmlFormat, - restDocutilsHtmlFormat): + useSphinx, convertNewLineToBreak, usePyMdownExtensions, + markdownHtmlFormat, restDocutilsHtmlFormat): """ Public method to convert the given text to HTML. - @param filePath file path of the text (string) - @param language language of the text (string) - @param text text to be processed (string) + @param filePath file path of the text + @type str + @param language language of the text + @type str + @param text text to be processed + @type str @param ssiEnabled flag indicating to do some (limited) SSI processing - (boolean) - @param rootPath root path to be used for SSI processing (str) + @type bool + @param rootPath root path to be used for SSI processing + @type str @param useSphinx flag indicating to use Sphinx to generate the - ReST preview (boolean) + ReST preview + @type bool @param convertNewLineToBreak flag indicating to convert new lines - to HTML break (Markdown only) (boolean) + to HTML break (Markdown only) + @type bool + @param usePyMdownExtensions flag indicating to enable the PyMdown + extensions, if they are available + @type bool @param markdownHtmlFormat HTML format to be generated by markdown - (string) + @type str @param restDocutilsHtmlFormat HTML format to be generated by docutils - (string) + @type str """ with self.__lock: self.__filePath = filePath @@ -367,6 +378,7 @@ self.__haveData = True self.__useSphinx = useSphinx self.__convertNewLineToBreak = convertNewLineToBreak + self.__usePyMdownExtensions = usePyMdownExtensions self.__markdownHtmlFormat = markdownHtmlFormat self.__restDocutilsHtmlFormat = restDocutilsHtmlFormat if not self.isRunning(): @@ -386,6 +398,7 @@ rootPath = self.__rootPath useSphinx = self.__useSphinx convertNewLineToBreak = self.__convertNewLineToBreak + usePyMdownExtensions = self.__usePyMdownExtensions markdownHtmlFormat = self.__markdownHtmlFormat restDocutilsHtmlFormat = self.__restDocutilsHtmlFormat @@ -393,7 +406,8 @@ html = self.__getHtml(language, text, ssiEnabled, filePath, rootPath, useSphinx, convertNewLineToBreak, - markdownHtmlFormat, restDocutilsHtmlFormat) + usePyMdownExtensions, markdownHtmlFormat, + restDocutilsHtmlFormat) with self.__lock: if not self.__haveData: @@ -402,27 +416,37 @@ # else - next iteration def __getHtml(self, language, text, ssiEnabled, filePath, rootPath, - useSphinx, convertNewLineToBreak, markdownHtmlFormat, - restDocutilsHtmlFormat): + useSphinx, convertNewLineToBreak, usePyMdownExtensions, + markdownHtmlFormat, restDocutilsHtmlFormat): """ Private method to process the given text depending upon the given language. - @param language language of the text (string) - @param text to be processed (string) + @param language language of the text + @type str + @param text to be processed + @type str @param ssiEnabled flag indicating to do some (limited) SSI processing - (boolean) - @param filePath file path of the text (string) - @param rootPath root path to be used for SSI processing (str) + @type bool + @param filePath file path of the text + @type str + @param rootPath root path to be used for SSI processing + @type str @param useSphinx flag indicating to use Sphinx to generate the - ReST preview (boolean) + ReST preview + @type bool @param convertNewLineToBreak flag indicating to convert new lines - to HTML break (Markdown only) (boolean) + to HTML break (Markdown only) + @type bool + @param usePyMdownExtensions flag indicating to enable the PyMdown + extensions, if they are available + @type bool @param markdownHtmlFormat HTML format to be generated by markdown - (string) + @type str @param restDocutilsHtmlFormat HTML format to be generated by docutils - (string) - @return processed HTML text (string) + @type str + @return processed HTML text + @rtype str """ if language == "HTML": if ssiEnabled: @@ -431,8 +455,9 @@ html = text return self.__processRootPath(html, rootPath) elif language == "Markdown": - return self.__convertMarkdown(text, convertNewLineToBreak, - markdownHtmlFormat) + return self.__convertMarkdown( + text, convertNewLineToBreak, usePyMdownExtensions, + markdownHtmlFormat) elif language == "ReST": return self.__convertReST(text, useSphinx, restDocutilsHtmlFormat) else: @@ -625,15 +650,23 @@ sys.stderr = origStderr return html - def __convertMarkdown(self, text, convertNewLineToBreak, htmlFormat): + def __convertMarkdown(self, text, convertNewLineToBreak, + usePyMdownExtensions, htmlFormat): """ Private method to convert Markdown text into HTML. - @param text text to be processed (string) + @param text text to be processed + @type str @param convertNewLineToBreak flag indicating to convert new lines - to HTML break (Markdown only) (boolean) - @param htmlFormat HTML format to be generated by markdown (string) - @return processed HTML (string) + to HTML break (Markdown only) + @type bool + @param usePyMdownExtensions flag indicating to enable the PyMdown + extensions, if they are available + @type bool + @param htmlFormat HTML format to be generated by markdown + @type str + @return processed HTML + @rtype str """ try: import markdown # __IGNORE_EXCEPTION__ @@ -645,49 +678,111 @@ """<a href="http://pythonhosted.org/Markdown/install.html">""" """installation instructions.</a></p>""") - try: - import mdx_mathjax # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ - except ImportError: - # mathjax doesn't require import statement if installed - # as extension - pass + from . import PreviewerHTMLStyles + from . import MarkdownExtensions + + extensions = [] + + mermaidNeeded = False + if Preferences.getEditor("PreviewMarkdownMermaid"): + if MarkdownExtensions.MermaidRegexFullText.search(text): + extensions.append(MarkdownExtensions.MermaidExtension()) + mermaidNeeded = True if convertNewLineToBreak: - extensions = ['fenced_code', 'nl2br', 'extra'] - else: - extensions = ['fenced_code', 'extra'] + extensions.append('nl2br') - # version 2.0 supports only extension names, not instances - if ( - markdown.version_info[0] > 2 or - (markdown.version_info[0] == 2 and - markdown.version_info[1] > 0) - ): - class _StrikeThroughExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported markdown, - and markdown import is lazy. + pyMdown = False + if usePyMdownExtensions: + try: + import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ + # PyPI package is 'pymdown-extensions' - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - DEL_RE = r'(~~)(.*?)~~' - - def extendMarkdown(self, md, md_globals): - # Create the del pattern - del_tag = markdown.inlinepatterns.SimpleTagPattern( - self.DEL_RE, 'del') - # Insert del pattern into markdown parser - md.inlinePatterns.add('del', del_tag, '>not_strong') + extensions.extend([ + 'toc', + 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', + 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', + 'pymdownx.tasklist', 'pymdownx.smartsymbols', + ]) + pyMdown = True + except ImportError: + pass + + if not pyMdown: + extensions.extend(['extra', 'toc']) - extensions.append(_StrikeThroughExtension()) + # version 2.0 supports only extension names, not instances + if ( + markdown.version_info[0] > 2 or + (markdown.version_info[0] == 2 and + markdown.version_info[1] > 0) + ): + extensions.append(MarkdownExtensions.SimplePatternExtension()) - try: - return markdown.markdown(text, extensions=extensions + ['mathjax'], - output_format=htmlFormat.lower()) - except (ImportError, ValueError): - # markdown raises ValueError or ImportError, depends on version - # It is not clear, how to distinguish missing mathjax from other - # errors. So keep going without mathjax. - return markdown.markdown(text, extensions=extensions, - output_format=htmlFormat.lower()) + if Preferences.getEditor("PreviewMarkdownMathJax"): + mathjax = ( + "<script type='text/javascript' id='MathJax-script' async" + " src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/" + "tex-chtml.js'>\n" + "</script>\n" + ) + # prepare text for mathjax + text = ( + text + .replace(r"\(", r"\\(") + .replace(r"\)", r"\\)") + .replace(r"\[", r"\\[") + .replace(r"\]", r"\\]") + ) + else: + mathjax = "" + + if mermaidNeeded: + mermaid = ( + "<script type='text/javascript' id='Mermaid-script'" + " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n" + "</script>\n" + ) + else: + mermaid = "" + + htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower() + body = markdown.markdown(text, extensions=extensions, + output_format=htmlFormat.lower()) + + if htmlFormat == "xhtml1": + head = ( + '''<!DOCTYPE html PUBLIC "-//W3C//DTD''' + ''' XHTML 1.0 Transitional//EN"\n''' + ''' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional''' + '''.dtd">\n''' + '''<html xmlns="http://www.w3.org/1999/xhtml">\n''' + ) + elif htmlFormat == "html5": + head = ( + '''<!DOCTYPE html>\n''' + '''<html lang="EN">\n''' + ) + else: + head = '<html lang="EN">\n' + head += '''<head>\n''' + head += ( + '''<meta name="Generator" content="eric6" />\n''' + '''<meta http-equiv="Content-Type" ''' + '''content="text/html; charset=utf-8" />\n''' + '''{0}''' + '''{1}''' + '''<style type="text/css">''' + '''{2}''' + '''</style>\n''' + '''</head>\n''' + '''<body>\n''' + ).format( + mathjax, mermaid, + PreviewerHTMLStyles.css_markdown + + PreviewerHTMLStyles.css_pygments + ) + + foot = '''\n</body>\n</html>\n''' + + return head + body + foot
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/UI/Previewers/PreviewerHTMLStyles.py Fri Nov 01 16:11:27 2019 +0100 @@ -0,0 +1,572 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing CSS styles for the Markdown preview. +""" + + +css_markdown = """ +@media (prefers-color-scheme: light) { + :root { + --font-color: #000; + --background-color: #fff; + --alt-backgroundcolor: #f8f8f8; + --frame-color: #333; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --font-color: #fff; + --background-color: #000; + --alt-backgroundcolor: #707070; + --frame-color: #ccc; + } +} + +html { + background-color: var(--background-color, #fff); +} + +body { + background-color: var(--background-color, #fff); + color: var(--font-color, #000); + font-family: sans-serif; + font-size:12px; + line-height:1.7; + word-wrap:break-word +} + +body>*:first-child { + margin-top:0 !important +} + +body>*:last-child { + margin-bottom:0 !important +} + +a.absent { + color:#c00 +} + +a.anchor { + display:block; + padding-right:6px; + padding-left:30px; + margin-left:-30px; + cursor:pointer; + position:absolute; + top:0; + left:0; + bottom:0 +} + +a.anchor:focus { + outline:none +} + +tt, code, pre { + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-size: 12px; +} + +h1, h2, h3, h4, h5, h6 { + margin:1em 0 6px; + padding:0; + font-weight:bold; + line-height:1.7; + cursor:text; + position:relative +} + +h1 .octicon-link, h2 .octicon-link, h3 .octicon-link, h4 .octicon-link, +h5 .octicon-link, h6 .octicon-link { + display:none; + color: var(--font-color, #000); +} + +h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, +h5:hover a.anchor, h6:hover a.anchor { + text-decoration:none; + line-height:1; + padding-left:8px; + margin-left:-30px; + top:15% +} + +h1:hover a.anchor .octicon-link, h2:hover a.anchor .octicon-link, +h3:hover a.anchor .octicon-link, h4:hover a.anchor .octicon-link, +h5:hover a.anchor .octicon-link, h6:hover a.anchor .octicon-link { + display:inline-block +} + +h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, +h5 tt, h5 code, h6 tt, h6 code { + font-size:inherit +} + +h1 { + font-size:2em; + border-bottom:1px solid #ddd +} + +h2 { + font-size:1.6em; + border-bottom:1px solid #eee +} + +h3 { + font-size:1.4em +} + +h4 { + font-size:1.2em +} + +h5 { + font-size:1em +} + +h6 { + color:#777; + font-size:1em +} + +p, blockquote, ul, ol, dl, table, pre { + margin:8px 0 +} + +hr { + background: rgba(216, 216, 216, 1); + border: 0 none; + color: #ccc; + height: 2px; + padding: 0; + margin: 8px 0; +} + +ul, ol { + padding-left:15px +} + +ul.no-list, ul.task-list, ol.no-list, ol.task-list { + list-style-type:none; +} + +ul ul, ul ol, ol ol, ol ul { + margin-top:0; + margin-bottom:0 +} + + +dl { + padding:0 +} + +dl dt { + font-size:14px; + font-weight:bold; + font-style:italic; + padding:0; + margin-top:8px +} + +dl dd { + margin-bottom:15px; + padding:0 8px +} + +blockquote { + border-left:4px solid #DDD; + padding:0 8px; + color:#777 +} + +blockquote>:first-child { + margin-top:0px +} + +blockquote>:last-child { + margin-bottom:0px +} + +table { + border-collapse: collapse; + border-spacing: 0; + overflow:auto; + display:block +} + +table th { + font-weight:bold +} + +table th, table td { + border:1px solid #ddd; + padding:3px 3px +} + +table tr { + border-top:1px solid #ccc; + background-color: var(--background-color, #fff); +} + +table tr:nth-child(2n) { + background-color:var(--alt-background-color, #f8f8f8); +} + +img { + max-width:100%; + -moz-box-sizing:border-box; + box-sizing:border-box +} + +span.frame { + display:block; + overflow:hidden +} + +span.frame>span { + border:1px solid #ddd; + display:block; + float:left; + overflow:hidden; + margin:6px 0 0; + padding:7px; + width:auto +} + +span.frame span img { + display:block; + float:left +} + +span.frame span span { + clear:both; + color:var(--frame-color, #333); + display:block; + padding:5px 0 0 +} + +span.align-center { + display:block; + overflow:hidden; + clear:both +} + +span.align-center>span { + display:block; + overflow:hidden; + margin:6px auto 0; + text-align:center +} + +span.align-center span img { + margin:0 auto; + text-align:center +} + +span.align-right { + display:block; + overflow:hidden; + clear:both +} + +span.align-right>span { + display:block; + overflow:hidden; + margin:6px 0 0; + text-align:right +} + +span.align-right span img { + margin:0; + text-align:right +} + +span.float-left { + display:block; + margin-right:6px; + overflow:hidden; + float:left +} + +span.float-left span { + margin:6px 0 0 +} + +span.float-right { + display:block; + margin-left:6px; + overflow:hidden; + float:right +} + +span.float-right>span { + display:block; + overflow:hidden; + margin:6px auto 0; + text-align:right +} + +code, tt { + margin:0; + border:1px solid #ddd; + background-color:var(--alt-background-color, #f8f8f8); + border-radius:3px; + max-width:100%; + display:inline-block; + overflow:auto; + vertical-align:middle; + line-height:1.1; + padding:0 +} + +code:before, code:after, tt:before, tt:after { + content:"\00a0" +} + +code { + white-space:nowrap +} + +pre>code { + margin:0; + padding:0; + white-space:pre; + border:none; + background:transparent +} + +.highlight pre, pre { + background-color:var(--alt-background-color, #f8f8f8); + border:1px solid #ddd; + font-size:12px; + line-height:16px; + overflow:auto; + padding:6px 6px; + border-radius:3px +} + +pre { + word-wrap:normal +} + +pre code, pre tt { + margin:0; + padding:0; + background-color:transparent; + border:none; + word-wrap:normal; + max-width:initial; + display:inline; + overflow:initial; + line-height:inherit +} + +pre code:before, pre code:after, pre tt:before, pre tt:after { + content:normal +} + +kbd { + border:1px solid gray; + font-size:1.2em; + box-shadow:1px 0 1px 0 #eee, 0 1px 0 1px #ccc, 0 2px 0 2px #444; + -webkit-border-radius:2px; + -moz-border-radius:2px; + border-radius:2px; + margin:2px 3px; + padding:1px 5px; + color: #000; + background-color: #fff +} +""" + + +css_pygments = """ +pre .hll { background-color: #ffffcc } + +/* Comment */ +pre .c { color: #999988; font-style: italic } + +/* Error */ +pre .err { color: #a61717; background-color: #e3d2d2 } + +/* Keyword */ +pre .k { font-weight: bold } + +/* Operator */ +pre .o { font-weight: bold } + +/* Comment.Multiline */ +pre .cm { color: #999988; font-style: italic } + +/* Comment.Preproc */ +pre .cp { color: #999999; font-weight: bold; font-style: italic } + +/* Comment.Single */ +pre .c1 { color: #999988; font-style: italic } + +/* Comment.Special */ +pre .cs { color: #999999; font-weight: bold; font-style: italic } + +/* Generic.Deleted */ +pre .gd { color: #000000; background-color: #ffdddd } + +/* Generic.Emph */ +pre .ge { font-style: italic } + +/* Generic.Error */ +pre .gr { color: #aa0000 } + +/* Generic.Heading */ +pre .gh { color: #999999 } + +/* Generic.Inserted */ +pre .gi { color: #000000; background-color: #ddffdd } + +/* Generic.Output */ +pre .go { color: #888888 } + +/* Generic.Prompt */ +pre .gp { color: #555555 } + +/* Generic.Strong */ +pre .gs { font-weight: bold } + +/* Generic.Subheading */ +pre .gu { color: #aaaaaa } + +/* Generic.Traceback */ +pre .gt { color: #aa0000 } + +/* Keyword.Constant */ +pre .kc { font-weight: bold } + +/* Keyword.Declaration */ +pre .kd { font-weight: bold } + +/* Keyword.Namespace */ +pre .kn { font-weight: bold } + +/* Keyword.Pseudo */ +pre .kp { font-weight: bold } + +/* Keyword.Reserved */ +pre .kr { font-weight: bold } + +/* Keyword.Type */ +pre .kt { color: #445588; font-weight: bold } + +/* Literal.Number */ +pre .m { color: #009999 } + +/* Literal.String */ +pre .s { color: #d01040 } + +/* Name.Attribute */ +pre .na { color: #008080 } + +/* Name.Builtin */ +pre .nb { color: #0086B3 } + +/* Name.Class */ +pre .nc { color: #445588; font-weight: bold } + +/* Name.Constant */ +pre .no { color: #008080 } + +/* Name.Decorator */ +pre .nd { color: #3c5d5d; font-weight: bold } + +/* Name.Entity */ +pre .ni { color: #800080 } + +/* Name.Exception */ +pre .ne { color: #990000; font-weight: bold } + +/* Name.Function */ +pre .nf { color: #990000; font-weight: bold } + +/* Name.Label */ +pre .nl { color: #990000; font-weight: bold } + +/* Name.Namespace */ +pre .nn { color: #555555 } + +/* Name.Tag */ +pre .nt { color: #000080 } + +/* Name.Variable */ +pre .nv { color: #008080 } + +/* Operator.Word */ +pre .ow { font-weight: bold } + +/* Text.Whitespace */ +pre .w { color: #bbbbbb } + +/* Literal.Number.Float */ +pre .mf { color: #009999 } + +/* Literal.Number.Hex */ +pre .mh { color: #009999 } + +/* Literal.Number.Integer */ +pre .mi { color: #009999 } + +/* Literal.Number.Oct */ +pre .mo { color: #009999 } + +/* Literal.String.Backtick */ +pre .sb { color: #d01040 } + +/* Literal.String.Char */ +pre .sc { color: #d01040 } + +/* Literal.String.Doc */ +pre .sd { color: #d01040 } + +/* Literal.String.Double */ +pre .s2 { color: #d01040 } + +/* Literal.String.Escape */ +pre .se { color: #d01040 } + +/* Literal.String.Heredoc */ +pre .sh { color: #d01040 } + +/* Literal.String.Interpol */ +pre .si { color: #d01040 } + +/* Literal.String.Other */ +pre .sx { color: #d01040 } + +/* Literal.String.Regex */ +pre .sr { color: #009926 } + +/* Literal.String.Single */ +pre .s1 { color: #d01040 } + +/* Literal.String.Symbol */ +pre .ss { color: #990073 } + +/* Name.Builtin.Pseudo */ +pre .bp { color: #999999 } + +/* Name.Variable.Class */ +pre .vc { color: #008080 } + +/* Name.Variable.Global */ +pre .vg { color: #008080 } + +/* Name.Variable.Instance */ +pre .vi { color: #008080 } + +/* Literal.Number.Integer.Long */ +pre .il { color: #009999 } + +"""
--- a/eric6/UI/UserInterface.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/UI/UserInterface.py Fri Nov 01 16:11:27 2019 +0100 @@ -68,13 +68,16 @@ appendStderr = pyqtSignal(str) appendStdout = pyqtSignal(str) - def __init__(self, stderr): + def __init__(self, stderr, parent=None): """ Constructor @param stderr flag indicating stderr is being redirected - """ - super(Redirector, self).__init__() + @type bool + @param parent reference to the parent object + @type QObject + """ + super(Redirector, self).__init__(parent) self.stderr = stderr self.buffer = '' @@ -300,8 +303,8 @@ self.shell.setDebuggerUI(self.debuggerUI) # Generate the redirection helpers - self.stdout = Redirector(False) - self.stderr = Redirector(True) + self.stdout = Redirector(False, self) + self.stderr = Redirector(True, self) # set a few dialog members for non-modal dialogs created on demand self.programsDialog = None @@ -482,6 +485,7 @@ self.preferencesChanged.connect(self.debugViewer.preferencesChanged) self.preferencesChanged.connect( self.backgroundService.preferencesOrProjectChanged) + self.preferencesChanged.connect(self.__previewer.preferencesChanged) if self.browser is not None: self.browser.sourceFile[str].connect(
--- a/eric6/WebBrowser/Network/NetworkManager.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/WebBrowser/Network/NetworkManager.py Fri Nov 01 16:11:27 2019 +0100 @@ -29,7 +29,6 @@ from .NetworkUrlInterceptor import NetworkUrlInterceptor from ..Tools.WebBrowserTools import readAllFileContents, pixmapToDataUrl -from Globals import qVersionTuple from Utilities.AutoSaver import AutoSaver import Preferences @@ -79,25 +78,12 @@ self.authenticationRequired.connect( lambda reply, auth: self.authentication(reply.url(), auth)) - if qVersionTuple() >= (5, 12, 0): - from PyQt5.QtWebEngineCore import QWebEngineUrlScheme - scheme = QWebEngineUrlScheme(b"eric") - scheme.setSyntax(QWebEngineUrlScheme.Syntax.Path) - scheme.setFlags(QWebEngineUrlScheme.SecureScheme | - QWebEngineUrlScheme.ContentSecurityPolicyIgnored) - QWebEngineUrlScheme.registerScheme(scheme) from .EricSchemeHandler import EricSchemeHandler self.__ericSchemeHandler = EricSchemeHandler() WebBrowserWindow.webProfile().installUrlSchemeHandler( QByteArray(b"eric"), self.__ericSchemeHandler) if engine: - if qVersionTuple() >= (5, 12, 0): - from PyQt5.QtWebEngineCore import QWebEngineUrlScheme - scheme = QWebEngineUrlScheme(b"qthelp") - scheme.setSyntax(QWebEngineUrlScheme.Syntax.Path) - scheme.setFlags(QWebEngineUrlScheme.SecureScheme) - QWebEngineUrlScheme.registerScheme(scheme) from .QtHelpSchemeHandler import QtHelpSchemeHandler self.__qtHelpSchemeHandler = QtHelpSchemeHandler(engine) WebBrowserWindow.webProfile().installUrlSchemeHandler(
--- a/eric6/eric6.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/eric6.py Fri Nov 01 16:11:27 2019 +0100 @@ -26,18 +26,13 @@ sys.path.insert(1, os.path.dirname(__file__)) try: - from PyQt5.QtCore import pyqt5_enable_new_onexit_scheme - # __IGNORE_EXCEPTION__ - pyqt5_enable_new_onexit_scheme(True) -except ImportError: try: - try: - from PyQt5 import sip # __IGNORE_EXCEPTION__ - except ImportError: - import sip - sip.setdestroyonexit(False) - except AttributeError: - pass + from PyQt5 import sip # __IGNORE_EXCEPTION__ + except ImportError: + import sip + sip.setdestroyonexit(False) +except AttributeError: + pass import traceback import time
--- a/eric6/eric6_browser.py Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/eric6_browser.py Fri Nov 01 16:11:27 2019 +0100 @@ -20,7 +20,7 @@ try: try: - from PyQt5 import sip + from PyQt5 import sip # __IGNORE_EXCEPTION__ except ImportError: import sip sip.setdestroyonexit(False) @@ -68,7 +68,7 @@ sys.exit(100) import Globals -from Globals import AppInfo +from Globals import AppInfo, qVersionTuple from E5Gui.E5Application import E5Application @@ -159,6 +159,20 @@ # set the library paths for plugins Startup.setLibraryPaths() + if qVersionTuple() >= (5, 12, 0): + from PyQt5.QtWebEngineCore import QWebEngineUrlScheme + scheme = QWebEngineUrlScheme(b"eric") + scheme.setSyntax(QWebEngineUrlScheme.Syntax.Path) + scheme.setFlags(QWebEngineUrlScheme.SecureScheme | + QWebEngineUrlScheme.ContentSecurityPolicyIgnored) + QWebEngineUrlScheme.registerScheme(scheme) + if "--qthelp" in sys.argv and qVersionTuple() >= (5, 12, 0): + from PyQt5.QtWebEngineCore import QWebEngineUrlScheme + scheme = QWebEngineUrlScheme(b"qthelp") + scheme.setSyntax(QWebEngineUrlScheme.Syntax.Path) + scheme.setFlags(QWebEngineUrlScheme.SecureScheme) + QWebEngineUrlScheme.registerScheme(scheme) + app = E5Application(sys.argv) if "--private" not in sys.argv: client = WebBrowserSingleApplicationClient()
--- a/eric6/i18n/eric6_cs.ts Thu Oct 03 11:12:50 2019 +0200 +++ b/eric6/i18n/eric6_cs.ts Fri Nov 01 16:11:27 2019 +0100 @@ -1393,17 +1393,17 @@ <translation>Ověřit protokol chyb při spuštění</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="246"/> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="270"/> <source>Keyboard Input Interval</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="252"/> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="276"/> <source>Enter the keyboard input interval, '0' for default</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="261"/> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="285"/> <source> ms</source> <translation type="unfinished"> ms</translation> </message> @@ -1428,22 +1428,22 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="258"/> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="282"/> <source>System Default</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="290"/> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="314"/> <source>Background Services</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="308"/> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="332"/> <source>max. Processes:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="318"/> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="342"/> <source>Automatic</source> <translation type="unfinished"></translation> </message> @@ -1462,6 +1462,36 @@ <source>Use Global Menu Bar</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="245"/> + <source>Minimum Severity for message dialog:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="258"/> + <source>Select the minimum message severity shown</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="38"/> + <source>Debug</source> + <translation type="unfinished">Debug</translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="39"/> + <source>Warning</source> + <translation type="unfinished">Varování</translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="40"/> + <source>Critical</source> + <translation type="unfinished">Kritický</translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="41"/> + <source>Fatal Error</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>AuthenticationDialog</name> @@ -10938,925 +10968,930 @@ <context> <name>Editor</name> <message> - <location filename="../QScintilla/Editor.py" line="2999"/> + <location filename="../QScintilla/Editor.py" line="3105"/> <source>Open File</source> <translation>Otevřít soubor</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="751"/> - <source>Undo</source> - <translation>Vrátit</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="754"/> - <source>Redo</source> - <translation>Znovu použít</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="757"/> - <source>Revert to last saved state</source> - <translation>Vrátit k poslednímu uloženému stavu</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="761"/> - <source>Cut</source> - <translation>Vyjmout</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="764"/> - <source>Copy</source> - <translation>Kopírovat</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="767"/> - <source>Paste</source> - <translation>Vložit</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="775"/> - <source>Indent</source> - <translation>Odsadit</translation> - </message> - <message> <location filename="../QScintilla/Editor.py" line="778"/> - <source>Unindent</source> - <translation>Zrušit odsazení</translation> + <source>Undo</source> + <translation>Vrátit</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="781"/> - <source>Comment</source> - <translation>Vytvořit komentář</translation> + <source>Redo</source> + <translation>Znovu použít</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="784"/> - <source>Uncomment</source> - <translation>Zrušit komentář</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="787"/> - <source>Stream Comment</source> - <translation>Proudový komentář</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="790"/> - <source>Box Comment</source> - <translation>Obdélníkový komentář</translation> + <source>Revert to last saved state</source> + <translation>Vrátit k poslednímu uloženému stavu</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="788"/> + <source>Cut</source> + <translation>Vyjmout</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="791"/> + <source>Copy</source> + <translation>Kopírovat</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="794"/> + <source>Paste</source> + <translation>Vložit</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="802"/> + <source>Indent</source> + <translation>Odsadit</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="805"/> + <source>Unindent</source> + <translation>Zrušit odsazení</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="808"/> + <source>Comment</source> + <translation>Vytvořit komentář</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="811"/> + <source>Uncomment</source> + <translation>Zrušit komentář</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="814"/> + <source>Stream Comment</source> + <translation>Proudový komentář</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="817"/> + <source>Box Comment</source> + <translation>Obdélníkový komentář</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="821"/> <source>Select to brace</source> <translation>Vybrat až po závorku</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="796"/> + <location filename="../QScintilla/Editor.py" line="823"/> <source>Select all</source> <translation>Vybrat vše</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="797"/> + <location filename="../QScintilla/Editor.py" line="824"/> <source>Deselect all</source> <translation>Zrušit celý výběr</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="813"/> + <location filename="../QScintilla/Editor.py" line="842"/> <source>Shorten empty lines</source> <translation>Zkrátit prázdné řádky</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="820"/> + <location filename="../QScintilla/Editor.py" line="849"/> <source>Use Monospaced Font</source> <translation>Použít neporoporcionální font</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="825"/> + <location filename="../QScintilla/Editor.py" line="854"/> <source>Autosave enabled</source> <translation>Zapnout autosave</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="868"/> + <location filename="../QScintilla/Editor.py" line="897"/> <source>Close</source> <translation>Zavřít</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="874"/> + <location filename="../QScintilla/Editor.py" line="903"/> <source>Save</source> <translation>Uložit</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="877"/> + <location filename="../QScintilla/Editor.py" line="906"/> <source>Save As...</source> <translation>Uložit jako...</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="893"/> - <source>Print</source> - <translation>Tisk</translation> - </message> - <message> <location filename="../QScintilla/Editor.py" line="922"/> + <source>Print</source> + <translation>Tisk</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="951"/> <source>Complete from Document</source> <translation type="unfinished">z dokumentu</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="924"/> + <location filename="../QScintilla/Editor.py" line="953"/> <source>Complete from APIs</source> <translation type="unfinished">z API</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="926"/> + <location filename="../QScintilla/Editor.py" line="955"/> <source>Complete from Document and APIs</source> <translation type="unfinished">z dokumentu a API</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="940"/> + <location filename="../QScintilla/Editor.py" line="969"/> <source>Check</source> <translation>Zkontrolovat</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="960"/> + <location filename="../QScintilla/Editor.py" line="989"/> <source>Show</source> <translation>Zobrazit</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="962"/> + <location filename="../QScintilla/Editor.py" line="991"/> <source>Code metrics...</source> <translation>Metrika kódu...</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="963"/> - <source>Code coverage...</source> - <translation>Pokrytí kódu...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="965"/> - <source>Show code coverage annotations</source> - <translation>Zobrazit poznámky pokrytí kódu</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="968"/> - <source>Hide code coverage annotations</source> - <translation>Skrýt poznámky pokrytí kódu</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="971"/> - <source>Profile data...</source> - <translation>Profilovat data...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="984"/> - <source>Diagrams</source> - <translation>Diagramy</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="986"/> - <source>Class Diagram...</source> - <translation>Diagram třídy...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="988"/> - <source>Package Diagram...</source> - <translation>Diagram balíčku...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="990"/> - <source>Imports Diagram...</source> - <translation>Diagram importů...</translation> - </message> - <message> <location filename="../QScintilla/Editor.py" line="992"/> - <source>Application Diagram...</source> - <translation>Diagram aplikace...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1010"/> - <source>Languages</source> - <translation>Jazyky</translation> + <source>Code coverage...</source> + <translation>Pokrytí kódu...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="994"/> + <source>Show code coverage annotations</source> + <translation>Zobrazit poznámky pokrytí kódu</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="997"/> + <source>Hide code coverage annotations</source> + <translation>Skrýt poznámky pokrytí kódu</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1000"/> + <source>Profile data...</source> + <translation>Profilovat data...</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="1013"/> - <source>No Language</source> - <translation>Žádný jazyk</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1158"/> - <source>Toggle bookmark</source> - <translation>Přepnout záložku</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1160"/> - <source>Next bookmark</source> - <translation>Následující záložka</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1162"/> - <source>Previous bookmark</source> - <translation>Předchozí záložka</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1164"/> - <source>Clear all bookmarks</source> - <translation>Zrušit všechny záložky</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1238"/> - <source>Goto syntax error</source> - <translation>Jít na chybu syntaxe</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1242"/> - <source>Show syntax error message</source> - <translation>Zobrazit hlášení syntaktické chyby</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1247"/> - <source>Clear syntax error</source> - <translation>Zrušit chybu syntaxe</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1173"/> - <source>Toggle breakpoint</source> - <translation>Přepnout breakpoint</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1175"/> - <source>Toggle temporary breakpoint</source> - <translation>Přepnout dočasný breakpoint</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1178"/> - <source>Edit breakpoint...</source> - <translation>Editovat breakpoint...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="5500"/> - <source>Enable breakpoint</source> - <translation>Aktivovat breakpoint</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1183"/> - <source>Next breakpoint</source> - <translation>Následující breakpoint</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1185"/> - <source>Previous breakpoint</source> - <translation>Předchozí breakpoint</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1190"/> - <source>Clear all breakpoints</source> - <translation>Zrušit všechny breakpointy</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1269"/> - <source>Next uncovered line</source> - <translation>Následující odkrytá řádka</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1273"/> - <source>Previous uncovered line</source> - <translation>Předchozí odkrytá řádka</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1278"/> - <source>Next task</source> - <translation>Následující úloha</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1282"/> - <source>Previous task</source> - <translation>Předchozí úloha</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1848"/> - <source>Modification of Read Only file</source> - <translation>Modifikace souboru otevřeného jen pro čtení</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1848"/> - <source>You are attempting to change a read only file. Please save to a different file first.</source> - <translation>Pokoušíte se změnit soubor, který je otevřen jen pro čtení. Prosím, uložte jej nejdříve do jiného souboru.</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="2556"/> - <source>Printing...</source> - <translation>Tisk...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="2573"/> - <source>Printing completed</source> - <translation>Tisk je hotov</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="2575"/> - <source>Error while printing</source> - <translation>Chyba během tisku</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="2578"/> - <source>Printing aborted</source> - <translation>Tisk byl zrušen</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="3188"/> - <source>Save File</source> - <translation>Uložit soubor</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="2939"/> - <source>File Modified</source> - <translation>Soubor je modifikován</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="4665"/> - <source>Autocompletion</source> - <translation>Autodoplňování</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="4665"/> - <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="5503"/> - <source>Disable breakpoint</source> - <translation>Deaktivovat breakpoint</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="5878"/> - <source>Code Coverage</source> - <translation>Pokrytí kódu</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="5878"/> - <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="5941"/> - <source>Show Code Coverage Annotations</source> - <translation>Zobrazit poznámky pokrytí kódu</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="5934"/> - <source>All lines have been covered.</source> - <translation>Všechny řádky byly pokryty.</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="5941"/> - <source>There is no coverage file available.</source> - <translation>Soubor s pokrytím není dostupný.</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6058"/> - <source>Profile Data</source> - <translation>Profilovat data</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6058"/> - <source>Please select a profile file</source> - <translation>Prosím, vyberte soubor s profilem</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6220"/> - <source>Syntax Error</source> - <translation>Chyba syntaxe</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6220"/> - <source>No syntax error message available.</source> - <translation>Hlášení syntaktické chyby není dostupné.</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6611"/> - <source>Macro Name</source> - <translation>Název makra</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6611"/> - <source>Select a macro name:</source> - <translation>Vyberte název makra:</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6639"/> - <source>Load macro file</source> - <translation>Načíst soubor makra</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6682"/> - <source>Macro files (*.macro)</source> - <translation>Macro soubory (*.macro)</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6662"/> - <source>Error loading macro</source> - <translation>Chyba při načítání makra</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6682"/> - <source>Save macro file</source> - <translation>Uložit soubor s makrem</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6699"/> - <source>Save macro</source> - <translation>Uložit makro</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6715"/> - <source>Error saving macro</source> - <translation>Chyba při ukládání makra</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6728"/> - <source>Start Macro Recording</source> - <translation>Spustit záznam makra</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6728"/> - <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="6754"/> - <source>Macro Recording</source> - <translation>Záznam makra</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6754"/> - <source>Enter name of the macro:</source> - <translation>Vložte název makra:</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6894"/> - <source>File changed</source> - <translation>Soubor změněn</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7200"/> - <source>Drop Error</source> - <translation>Zahodit chybu</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7221"/> - <source>Resources</source> - <translation>Zdroje</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7223"/> - <source>Add file...</source> - <translation>Přidat soubor...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7225"/> - <source>Add files...</source> - <translation>Přidat soubory...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7227"/> - <source>Add aliased file...</source> - <translation>Přidat zástupce souboru...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7230"/> - <source>Add localized resource...</source> - <translation>Přidat lokalizované resource...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7234"/> - <source>Add resource frame</source> - <translation>Přidat resource frame</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7253"/> - <source>Add file resource</source> - <translation>Přidat soubor resource</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7269"/> - <source>Add file resources</source> - <translation>Přidat soubory resource</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7296"/> - <source>Add aliased file resource</source> - <translation>Přidat zástupce souboru resource</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7362"/> - <source>Package Diagram</source> - <translation>Diagram balíčku</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7362"/> - <source>Include class attributes?</source> - <translation>Včetně atributů třídy?</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7398"/> - <source>Application Diagram</source> - <translation>Diagram aplikace</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7398"/> - <source>Include module names?</source> - <translation>Včetně jmen modulů?</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1136"/> - <source>Export as</source> - <translation>Exportovat jako</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1332"/> - <source>Export source</source> - <translation>Export zdroj</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1332"/> - <source>No export format given. Aborting...</source> - <translation>Nebyl zadán forám exportu. Zrušeno....</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7384"/> - <source>Imports Diagram</source> - <translation>Importovat diagram</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7384"/> - <source>Include imports from external modules?</source> - <translation>Zahrnout importy z externích modulů?</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="844"/> - <source>Calltip</source> - <translation>Rychlé tipy</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="890"/> - <source>Print Preview</source> - <translation>Náhled tisku</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="449"/> - <source><b>A Source Editor Window</b><p>This window is used to display and edit a source file. You can open as many of these as you like. The name of the file is displayed in the window's titlebar.</p><p>In order to set breakpoints just click in the space between the line numbers and the fold markers. Via the context menu of the margins they may be edited.</p><p>In order to set bookmarks just Shift click in the space between the line numbers and the fold markers.</p><p>These actions can be reversed via the context menu.</p><p>Ctrl clicking on a syntax error marker shows some info about this error.</p></source> - <translation><b>Okno editoru zdrojového kódu</b><p>V tomto okně se zobrazuje a edituje soubor se zdrojovým kódem. Můžete otevřít oken podle libosti. Jméno souboru se zobrazuje v titlebaru okna.</p><p>Kliknutím do prostoru mezi čísly řádku a značkami skládání nastavíte breakpoint. Přes kontextové menu je pak lze editovat.</p><p>Záložka se vkládá kliknutím na stejné místo se stisknutou klávesou Shift.</p><p>Tyto akce mohou být navráceny zpět i opětovným kliknutím nebo přes kontextové menu.</p></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="829"/> - <source>Typing aids enabled</source> - <translation>Pomůcky při psaní zapnuty</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1100"/> - <source>End-of-Line Type</source> - <translation>Typ Konec-řádku</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1104"/> - <source>Unix</source> - <translation>Unix</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1111"/> - <source>Windows</source> - <translation></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1118"/> - <source>Macintosh</source> - <translation>Macintosh</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1059"/> - <source>Encodings</source> - <translation>Kódování</translation> + <source>Diagrams</source> + <translation>Diagramy</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1015"/> + <source>Class Diagram...</source> + <translation>Diagram třídy...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1017"/> + <source>Package Diagram...</source> + <translation>Diagram balíčku...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1019"/> + <source>Imports Diagram...</source> + <translation>Diagram importů...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1021"/> + <source>Application Diagram...</source> + <translation>Diagram aplikace...</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="1039"/> - <source>Guessed</source> - <translation>Odhadem</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1347"/> - <source>Alternatives</source> - <translation>Alternativy</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1363"/> - <source>Pygments Lexer</source> - <translation></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1363"/> - <source>Select the Pygments lexer to apply.</source> - <translation>Použít Pygments lexer.</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7697"/> - <source>Check spelling...</source> - <translation>Zatrhnout kontrolu...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="805"/> - <source>Check spelling of selection...</source> - <translation>Zatrhnout výběr kontroly...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7700"/> - <source>Add to dictionary</source> - <translation>Přidat do slovníku</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7702"/> - <source>Ignore All</source> - <translation>Ignorovat vše</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="809"/> - <source>Remove from dictionary</source> - <translation>Odebrat ze slovníku</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="360"/> - <source><p>The size of the file <b>{0}</b> is <b>{1} KB</b>. Do you really want to load it?</p></source> - <translation><p>Velikost souboru <b>{0}</b> je <b>{1} KB</b>. Opravdu jej chcete načíst?</p></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1324"/> - <source><p>No exporter available for the export format <b>{0}</b>. Aborting...</p></source> - <translation><p>Pro formát exportu <b>{0}</b> není exportér dostupný. Zrušeno.</p></translation> + <source>Languages</source> + <translation>Jazyky</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1172"/> + <source>No Language</source> + <translation>Žádný jazyk</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1219"/> + <source>Toggle bookmark</source> + <translation>Přepnout záložku</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1221"/> + <source>Next bookmark</source> + <translation>Následující záložka</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1223"/> + <source>Previous bookmark</source> + <translation>Předchozí záložka</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1225"/> + <source>Clear all bookmarks</source> + <translation>Zrušit všechny záložky</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1299"/> + <source>Goto syntax error</source> + <translation>Jít na chybu syntaxe</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1303"/> + <source>Show syntax error message</source> + <translation>Zobrazit hlášení syntaktické chyby</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1308"/> + <source>Clear syntax error</source> + <translation>Zrušit chybu syntaxe</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1234"/> + <source>Toggle breakpoint</source> + <translation>Přepnout breakpoint</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1236"/> + <source>Toggle temporary breakpoint</source> + <translation>Přepnout dočasný breakpoint</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1239"/> + <source>Edit breakpoint...</source> + <translation>Editovat breakpoint...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="5606"/> + <source>Enable breakpoint</source> + <translation>Aktivovat breakpoint</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1244"/> + <source>Next breakpoint</source> + <translation>Následující breakpoint</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1246"/> + <source>Previous breakpoint</source> + <translation>Předchozí breakpoint</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1251"/> + <source>Clear all breakpoints</source> + <translation>Zrušit všechny breakpointy</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1330"/> + <source>Next uncovered line</source> + <translation>Následující odkrytá řádka</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1334"/> + <source>Previous uncovered line</source> + <translation>Předchozí odkrytá řádka</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1339"/> + <source>Next task</source> + <translation>Následující úloha</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="1343"/> + <source>Previous task</source> + <translation>Předchozí úloha</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1954"/> + <source>Modification of Read Only file</source> + <translation>Modifikace souboru otevřeného jen pro čtení</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1954"/> + <source>You are attempting to change a read only file. Please save to a different file first.</source> + <translation>Pokoušíte se změnit soubor, který je otevřen jen pro čtení. Prosím, uložte jej nejdříve do jiného souboru.</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="2662"/> + <source>Printing...</source> + <translation>Tisk...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="2679"/> + <source>Printing completed</source> + <translation>Tisk je hotov</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="2681"/> + <source>Error while printing</source> + <translation>Chyba během tisku</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="2684"/> + <source>Printing aborted</source> + <translation>Tisk byl zrušen</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="3294"/> + <source>Save File</source> + <translation>Uložit soubor</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="3045"/> + <source>File Modified</source> + <translation>Soubor je modifikován</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="4771"/> + <source>Autocompletion</source> + <translation>Autodoplňování</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="4771"/> + <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="5609"/> + <source>Disable breakpoint</source> + <translation>Deaktivovat breakpoint</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="5984"/> + <source>Code Coverage</source> + <translation>Pokrytí kódu</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="5984"/> + <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="6047"/> + <source>Show Code Coverage Annotations</source> + <translation>Zobrazit poznámky pokrytí kódu</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6040"/> + <source>All lines have been covered.</source> + <translation>Všechny řádky byly pokryty.</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6047"/> + <source>There is no coverage file available.</source> + <translation>Soubor s pokrytím není dostupný.</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6164"/> + <source>Profile Data</source> + <translation>Profilovat data</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6164"/> + <source>Please select a profile file</source> + <translation>Prosím, vyberte soubor s profilem</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6326"/> + <source>Syntax Error</source> + <translation>Chyba syntaxe</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6326"/> + <source>No syntax error message available.</source> + <translation>Hlášení syntaktické chyby není dostupné.</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6717"/> + <source>Macro Name</source> + <translation>Název makra</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6717"/> + <source>Select a macro name:</source> + <translation>Vyberte název makra:</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6745"/> + <source>Load macro file</source> + <translation>Načíst soubor makra</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6788"/> + <source>Macro files (*.macro)</source> + <translation>Macro soubory (*.macro)</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6768"/> + <source>Error loading macro</source> + <translation>Chyba při načítání makra</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6788"/> + <source>Save macro file</source> + <translation>Uložit soubor s makrem</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6805"/> + <source>Save macro</source> + <translation>Uložit makro</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6821"/> + <source>Error saving macro</source> + <translation>Chyba při ukládání makra</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6834"/> + <source>Start Macro Recording</source> + <translation>Spustit záznam makra</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6834"/> + <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="6860"/> + <source>Macro Recording</source> + <translation>Záznam makra</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6860"/> + <source>Enter name of the macro:</source> + <translation>Vložte název makra:</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7000"/> + <source>File changed</source> + <translation>Soubor změněn</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7306"/> + <source>Drop Error</source> + <translation>Zahodit chybu</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7327"/> + <source>Resources</source> + <translation>Zdroje</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7329"/> + <source>Add file...</source> + <translation>Přidat soubor...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7331"/> + <source>Add files...</source> + <translation>Přidat soubory...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7333"/> + <source>Add aliased file...</source> + <translation>Přidat zástupce souboru...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7336"/> + <source>Add localized resource...</source> + <translation>Přidat lokalizované resource...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7340"/> + <source>Add resource frame</source> + <translation>Přidat resource frame</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7359"/> + <source>Add file resource</source> + <translation>Přidat soubor resource</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7375"/> + <source>Add file resources</source> + <translation>Přidat soubory resource</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7402"/> + <source>Add aliased file resource</source> + <translation>Přidat zástupce souboru resource</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7468"/> + <source>Package Diagram</source> + <translation>Diagram balíčku</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7468"/> + <source>Include class attributes?</source> + <translation>Včetně atributů třídy?</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7504"/> + <source>Application Diagram</source> + <translation>Diagram aplikace</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7504"/> + <source>Include module names?</source> + <translation>Včetně jmen modulů?</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1197"/> + <source>Export as</source> + <translation>Exportovat jako</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1393"/> + <source>Export source</source> + <translation>Export zdroj</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1393"/> + <source>No export format given. Aborting...</source> + <translation>Nebyl zadán forám exportu. Zrušeno....</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7490"/> + <source>Imports Diagram</source> + <translation>Importovat diagram</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7490"/> + <source>Include imports from external modules?</source> + <translation>Zahrnout importy z externích modulů?</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="873"/> + <source>Calltip</source> + <translation>Rychlé tipy</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="919"/> + <source>Print Preview</source> + <translation>Náhled tisku</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="453"/> + <source><b>A Source Editor Window</b><p>This window is used to display and edit a source file. You can open as many of these as you like. The name of the file is displayed in the window's titlebar.</p><p>In order to set breakpoints just click in the space between the line numbers and the fold markers. Via the context menu of the margins they may be edited.</p><p>In order to set bookmarks just Shift click in the space between the line numbers and the fold markers.</p><p>These actions can be reversed via the context menu.</p><p>Ctrl clicking on a syntax error marker shows some info about this error.</p></source> + <translation><b>Okno editoru zdrojového kódu</b><p>V tomto okně se zobrazuje a edituje soubor se zdrojovým kódem. Můžete otevřít oken podle libosti. Jméno souboru se zobrazuje v titlebaru okna.</p><p>Kliknutím do prostoru mezi čísly řádku a značkami skládání nastavíte breakpoint. Přes kontextové menu je pak lze editovat.</p><p>Záložka se vkládá kliknutím na stejné místo se stisknutou klávesou Shift.</p><p>Tyto akce mohou být navráceny zpět i opětovným kliknutím nebo přes kontextové menu.</p></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="858"/> + <source>Typing aids enabled</source> + <translation>Pomůcky při psaní zapnuty</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1129"/> + <source>End-of-Line Type</source> + <translation>Typ Konec-řádku</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1133"/> + <source>Unix</source> + <translation>Unix</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1140"/> + <source>Windows</source> + <translation></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1147"/> + <source>Macintosh</source> + <translation>Macintosh</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1088"/> + <source>Encodings</source> + <translation>Kódování</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1068"/> + <source>Guessed</source> + <translation>Odhadem</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1408"/> + <source>Alternatives</source> + <translation>Alternativy</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1424"/> + <source>Pygments Lexer</source> + <translation></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1424"/> + <source>Select the Pygments lexer to apply.</source> + <translation>Použít Pygments lexer.</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7833"/> + <source>Check spelling...</source> + <translation>Zatrhnout kontrolu...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="832"/> + <source>Check spelling of selection...</source> + <translation>Zatrhnout výběr kontroly...</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7836"/> + <source>Add to dictionary</source> + <translation>Přidat do slovníku</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="7838"/> + <source>Ignore All</source> + <translation>Ignorovat vše</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="836"/> + <source>Remove from dictionary</source> + <translation>Odebrat ze slovníku</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="364"/> + <source><p>The size of the file <b>{0}</b> is <b>{1} KB</b>. Do you really want to load it?</p></source> + <translation><p>Velikost souboru <b>{0}</b> je <b>{1} KB</b>. Opravdu jej chcete načíst?</p></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1385"/> + <source><p>No exporter available for the export format <b>{0}</b>. Aborting...</p></source> + <translation><p>Pro formát exportu <b>{0}</b> není exportér dostupný. Zrušeno.</p></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1404"/> <source>Alternatives ({0})</source> <translation>Alternativy ({0})</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="2939"/> + <location filename="../QScintilla/Editor.py" line="3045"/> <source><p>The file <b>{0}</b> has unsaved changes.</p></source> <translation><p>Soubor <b>{0}</b> obsahuje neuložené změny.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="2999"/> + <location filename="../QScintilla/Editor.py" line="3105"/> <source><p>The file <b>{0}</b> could not be opened.</p><p>Reason: {1}</p></source> <translation><p>Soubor <b>{0}</b> nemůže být přejmenován.<br />Důvod: {1}</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="3125"/> + <location filename="../QScintilla/Editor.py" line="3231"/> <source><p>The file <b>{0}</b> could not be saved.<br/>Reason: {1}</p></source> <translation><p>Soubor <b>{0}</b> nemůže být přejmenován.<br />Důvod: {1}</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6653"/> + <location filename="../QScintilla/Editor.py" line="6759"/> <source><p>The macro file <b>{0}</b> could not be read.</p></source> <translation><p>Soubor s makrem <b>{0}</b> nelze načíst.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6662"/> + <location filename="../QScintilla/Editor.py" line="6768"/> <source><p>The macro file <b>{0}</b> is corrupt.</p></source> <translation><p>Soubor s makrem <b>{0}</b> je poškozen.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6715"/> + <location filename="../QScintilla/Editor.py" line="6821"/> <source><p>The macro file <b>{0}</b> could not be written.</p></source> <translation><p>So souboru s makrem <b>{0}</b> nelze zapisovat.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7059"/> + <location filename="../QScintilla/Editor.py" line="7165"/> <source>{0} (ro)</source> <translation>{0} (ro)</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7200"/> + <location filename="../QScintilla/Editor.py" line="7306"/> <source><p><b>{0}</b> is not a file.</p></source> <translation><p><b>{0}</b> není soubor.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7296"/> + <location filename="../QScintilla/Editor.py" line="7402"/> <source>Alias for file <b>{0}</b>:</source> <translation>Zástupce pro soubor <b>{0}</b>:</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="1252"/> + <location filename="../QScintilla/Editor.py" line="1313"/> <source>Next warning</source> <translation>Následující varování</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="1256"/> + <location filename="../QScintilla/Editor.py" line="1317"/> <source>Previous warning</source> <translation>Předchozí varování</translation> </message> <message> + <location filename="../QScintilla/Editor.py" line="1321"/> + <source>Show warning message</source> + <translation>Zobrazit varování</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1325"/> + <source>Clear warnings</source> + <translation>Vyčistit varování</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="3294"/> + <source><p>The file <b>{0}</b> already exists. Overwrite it?</p></source> + <translation type="unfinished"><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6805"/> + <source><p>The macro file <b>{0}</b> already exists. Overwrite it?</p></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6605"/> + <source>Warning: {0}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6612"/> + <source>Error: {0}</source> + <translation type="unfinished">Chyby: {0}</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6996"/> + <source><br><b>Warning:</b> You will lose your changes upon reopening it.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="915"/> + <source>Open 'rejection' file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1025"/> + <source>Load Diagram...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1348"/> + <source>Next change</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1352"/> + <source>Previous change</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="8254"/> + <source>Sort Lines</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="8254"/> + <source>The selection contains illegal data for a numerical sort.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6540"/> + <source>Warning</source> + <translation type="unfinished">Varování</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6540"/> + <source>No warning messages available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6602"/> + <source>Style: {0}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="889"/> + <source>New Document View</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="892"/> + <source>New Document View (with new split)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="979"/> + <source>Tools</source> + <translation type="unfinished">Nástroje</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1110"/> + <source>Re-Open With Encoding</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="6990"/> + <source><p>The file <b>{0}</b> has been changed while it was opened in eric6. Reread it?</p></source> + <translation type="unfinished"><p>Soubor <b>{0}</b> byl změněn po té co již byl načten do eric5. Znovu načíst?</p> {0}?} {6.?}</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="865"/> + <source>Automatic Completion enabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="945"/> + <source>Complete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="4901"/> + <source>Auto-Completion Provider</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="4901"/> + <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="5176"/> + <source>Call-Tips Provider</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="5176"/> + <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="8343"/> + <source>Register Mouse Click Handler</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="8343"/> + <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="909"/> + <source>Save Copy...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="948"/> + <source>Clear Completions Cache</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="875"/> + <source>Code Info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1356"/> + <source>Clear changes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="798"/> + <source>Execute Selection In Console</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="8464"/> + <source>EditorConfig Properties</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="8464"/> + <source><p>The EditorConfig properties for file <b>{0}</b> could not be loaded.</p></source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../QScintilla/Editor.py" line="1260"/> - <source>Show warning message</source> - <translation>Zobrazit varování</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1264"/> - <source>Clear warnings</source> - <translation>Vyčistit varování</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="3188"/> - <source><p>The file <b>{0}</b> already exists. Overwrite it?</p></source> - <translation type="unfinished"><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6699"/> - <source><p>The macro file <b>{0}</b> already exists. Overwrite it?</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6499"/> - <source>Warning: {0}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6506"/> - <source>Error: {0}</source> - <translation type="unfinished">Chyby: {0}</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6890"/> - <source><br><b>Warning:</b> You will lose your changes upon reopening it.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="886"/> - <source>Open 'rejection' file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="996"/> - <source>Load Diagram...</source> + <source>Toggle all folds</source> + <translation type="unfinished">Složit/rozložit všechna skládání</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1265"/> + <source>Toggle all folds (including children)</source> + <translation type="unfinished">Složit/rozložit všechna skládání (i s podsložkami)</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1270"/> + <source>Toggle current fold</source> + <translation type="unfinished">Složit/rozložit aktuální složený blok</translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1276"/> + <source>Expand (including children)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../QScintilla/Editor.py" line="1281"/> + <source>Collapse (including children)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../QScintilla/Editor.py" line="1287"/> - <source>Next change</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1291"/> - <source>Previous change</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="8118"/> - <source>Sort Lines</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="8118"/> - <source>The selection contains illegal data for a numerical sort.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6434"/> - <source>Warning</source> - <translation type="unfinished">Varování</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6434"/> - <source>No warning messages available.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6496"/> - <source>Style: {0}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="860"/> - <source>New Document View</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="863"/> - <source>New Document View (with new split)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="950"/> - <source>Tools</source> - <translation type="unfinished">Nástroje</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1081"/> - <source>Re-Open With Encoding</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="6884"/> - <source><p>The file <b>{0}</b> has been changed while it was opened in eric6. Reread it?</p></source> - <translation type="unfinished"><p>Soubor <b>{0}</b> byl změněn po té co již byl načten do eric5. Znovu načíst?</p> {0}?} {6.?}</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="836"/> - <source>Automatic Completion enabled</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="916"/> - <source>Complete</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="4795"/> - <source>Auto-Completion Provider</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="4795"/> - <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="5070"/> - <source>Call-Tips Provider</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="5070"/> - <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="8207"/> - <source>Register Mouse Click Handler</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="8207"/> - <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="880"/> - <source>Save Copy...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="919"/> - <source>Clear Completions Cache</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="846"/> - <source>Code Info</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1295"/> - <source>Clear changes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="771"/> - <source>Execute Selection In Console</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="8328"/> - <source>EditorConfig Properties</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="8328"/> - <source><p>The EditorConfig properties for file <b>{0}</b> could not be loaded.</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1199"/> - <source>Toggle all folds</source> - <translation type="unfinished">Složit/rozložit všechna skládání</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1204"/> - <source>Toggle all folds (including children)</source> - <translation type="unfinished">Složit/rozložit všechna skládání (i s podsložkami)</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1209"/> - <source>Toggle current fold</source> - <translation type="unfinished">Složit/rozložit aktuální složený blok</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1215"/> - <source>Expand (including children)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1220"/> - <source>Collapse (including children)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="1226"/> <source>Clear all folds</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../QScintilla/Editor.py" line="1168"/> + <source>Spell Check Languages</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>EditorAPIsPage</name> @@ -12897,22 +12932,22 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="283"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="313"/> <source>Add File Filter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="243"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="273"/> <source>A Save File Filter must contain exactly one wildcard pattern. Yours contains {0}.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="252"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="282"/> <source>A File Filter must contain at least one wildcard pattern.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="283"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.py" line="313"/> <source>Enter the file filter entry:</source> <translation type="unfinished"></translation> </message> @@ -12927,82 +12962,77 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="474"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="517"/> <source>Enter the filename extensions of HTML files that may be previewed (separated by a space)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="497"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="542"/> <source>Enter the filename extensions of Markdown files that may be previewed (separated by a space)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="550"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="662"/> <source>Enter the filename extensions of ReStructuredText files that may be previewed (separated by a space)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="612"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="724"/> <source>Enter the filename extensions of Qt Stylesheet files that may be previewed (separated by a space)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="557"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="669"/> <source>Select to use 'sphinx' to generate the ReST preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="560"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="672"/> <source>Use 'sphinx' for ReST preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="461"/> - <source>HTML Files</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="605"/> - <source>Extensions:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="484"/> - <source>Markdown Files</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="504"/> - <source>Select this to convert a new line character to an HTML &lt;br/&gt; tag.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="507"/> - <source>Convert New Line to HTML Break</source> + <source>HTML Files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="527"/> + <source>Markdown Files</source> <translation type="unfinished"></translation> </message> <message> <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="573"/> + <source>Select this to convert a new line character to an HTML &lt;br/&gt; tag.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="576"/> + <source>Convert New Line to HTML Break</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="685"/> <source>HTML Format:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="586"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="698"/> <source>Select the HTML format to be generated</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="537"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="649"/> <source>ReST Files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="567"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="679"/> <source>Docutils</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="599"/> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="711"/> <source>QSS Files</source> <translation type="unfinished"></translation> </message> @@ -13016,6 +13046,72 @@ <source>Insert final newline upon save</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="607"/> + <source>Select to enable the use of the PyMdown extensions</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="610"/> + <source><b>Enable PyMdown Extensions</b> +<p>Select this entry to enable the use of the PyMdown extensions. These have to be installed with <code>pip install pymdown-extensions</code>.</p></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="614"/> + <source>Enable PyMdown Extensions</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="583"/> + <source>Select to enable Math support using MathJax</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="586"/> + <source>Enable Math support</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="593"/> + <source>Select to enable Graph support using Mermaid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="596"/> + <source>Enable Graph support</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="463"/> + <source>Refresh Timeout:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="470"/> + <source>Enter the timeout in milliseconds until the preview is refreshed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="473"/> + <source> ms</source> + <translation type="unfinished"> ms</translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="717"/> + <source>File Extensions:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="621"/> + <source>Press to install the PyMdown extensions</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="624"/> + <source>Install PyMdown Extensions</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>EditorGeneralPage</name> @@ -14422,27 +14518,27 @@ <context> <name>EditorSpellCheckingPage</name> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="293"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="329"/> <source>Select to enable spellchecking</source> <translation>Vybrat pro zapnutí kontroly pravopisu</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="117"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="119"/> <source>Select to check strings only</source> <translation>Vybrat pro kontrolu jen stringů</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="129"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="143"/> <source>Minimum word size:</source> <translation>Minimální délka slova:</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="136"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="150"/> <source>Move to set the minimum size of words to be checked</source> <translation>Posunout pro nastavení minimální délky slov, které se kontrolují</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="158"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="172"/> <source>Displays the minimum size of words to be checked</source> <translation>Zobrazuje minimální délku slov, které se kontrolují</translation> </message> @@ -14457,12 +14553,12 @@ <translation>Vybrat výchozí jazyk</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="185"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="221"/> <source>Marker Colour:</source> <translation>Barva značky:</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="198"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="234"/> <source>Select the colour for the spelling markers.</source> <translation>Vybraz barvu značek kontroly.</translation> </message> @@ -14487,57 +14583,57 @@ <translation>Nastavení kontroly</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="120"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="122"/> <source>Spell check strings only</source> <translation>Kontrolovat jen stringy</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="179"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="215"/> <source>Colours</source> <translation>Barvy</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="224"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="260"/> <source>Personal lists</source> <translation>Vlastní seznamy</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="230"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="266"/> <source>Personal word list file:</source> <translation>Soubor s vlastním seznamerm slov:</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="250"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="286"/> <source>Personal exclude list file:</source> <translation>Soubor s vlastním seznamem vyřazených:</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="270"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="306"/> <source><b>Note:</b> leave these entries empty to use the default</source> <translation><b>Poznámka:</b> pro použití výchozí hodnoty ponechte prázdné</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="277"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="313"/> <source><b>Note:</b> valid for all newly opened editors</source> <translation><b>Poznámka:</b> platné pro všechny nově otevřené editory</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="287"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="323"/> <source>Automatic spell checking</source> <translation>Automatická kontrola pravopisu</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="296"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="332"/> <source>Automatic spell checking enabled</source> <translation>Automatická kontrola pravopisu zapnuta</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="305"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="341"/> <source>Amount of lines to autocheck at once:</source> <translation>Počet řádek kontrolovaných najednou:</translation> </message> <message> - <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="312"/> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="348"/> <source>Enter the number of lines to check per go. Higher values increase checking speed but decrease GUI responsivenes</source> <translation>Zadejte počet řádek, které se budou kontrolovat najednou. Vyšší hodnota zvyšuje rychlost kontroly ale snižuje GUI plynulost</translation> </message> @@ -14556,6 +14652,32 @@ <source>Spell checking enabled</source> <translation>Kontrola pravopisu zapnuta</translation> </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="129"/> + <source>Select to perform a complete check of files without extension</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="132"/> + <source>Spell check unknown files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="192"/> + <source>Textfiles:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="199"/> + <source>Enter the file extensions of pure text files (separated by a space)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="202"/> + <source><b>Textfiles</b> +<p>Enter the file extension of pure text files. The complete contents of files with these extensions will be checked.</p></source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>EditorStylesPage</name> @@ -21730,11 +21852,6 @@ <context> <name>GitPage</name> <message> - <location filename="../Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.ui" line="14"/> - <source>Select to perform an expensive copy detection</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.ui" line="20"/> <source><b>Configure Git Interface</b></source> <translation type="unfinished"></translation> @@ -45807,27 +45924,27 @@ <context> <name>MicroPythonDevice</name> <message> - <location filename="../MicroPython/MicroPythonDevices.py" line="194"/> + <location filename="../MicroPython/MicroPythonDevices.py" line="207"/> <source>Unsupported Device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicroPythonDevices.py" line="204"/> + <location filename="../MicroPython/MicroPythonDevices.py" line="217"/> <source>REPL is not supported by this device.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicroPythonDevices.py" line="223"/> + <location filename="../MicroPython/MicroPythonDevices.py" line="236"/> <source>Plotter is not supported by this device.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicroPythonDevices.py" line="242"/> + <location filename="../MicroPython/MicroPythonDevices.py" line="255"/> <source>Running scripts is not supported by this device.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicroPythonDevices.py" line="262"/> + <location filename="../MicroPython/MicroPythonDevices.py" line="275"/> <source>File Manager is not supported by this device.</source> <translation type="unfinished"></translation> </message> @@ -46598,75 +46715,70 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicrobitDevices.py" line="218"/> - <source>Flash Default MicroPython Firmware</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../MicroPython/MicrobitDevices.py" line="207"/> - <source>Flash Custom MicroPython Firmware</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../MicroPython/MicrobitDevices.py" line="258"/> - <source>Flash Script</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../MicroPython/MicrobitDevices.py" line="171"/> - <source>Flash the current script to the selected device.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../MicroPython/MicrobitDevices.py" line="300"/> <source>Save Script as 'main.py'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicrobitDevices.py" line="176"/> + <location filename="../MicroPython/MicrobitDevices.py" line="173"/> <source>Save the current script as 'main.py' on the connected device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicrobitDevices.py" line="180"/> + <location filename="../MicroPython/MicrobitDevices.py" line="177"/> <source>Reset micro:bit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicrobitDevices.py" line="183"/> - <source>Install 'uflash'</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../MicroPython/MicrobitDevices.py" line="258"/> - <source>'uflash' Output</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../MicroPython/MicrobitDevices.py" line="207"/> + <location filename="../MicroPython/MicrobitDevices.py" line="201"/> <source>MicroPython Firmware Files (*.hex);;All Files (*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicrobitDevices.py" line="235"/> - <source>The current editor does not contain a Python script. Flash it anyway?</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../MicroPython/MicrobitDevices.py" line="285"/> + <location filename="../MicroPython/MicrobitDevices.py" line="246"/> <source>The script is empty. Aborting.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicrobitDevices.py" line="275"/> + <location filename="../MicroPython/MicrobitDevices.py" line="236"/> <source>The current editor does not contain a Python script. Write it anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../MicroPython/MicrobitDevices.py" line="300"/> + <location filename="../MicroPython/MicrobitDevices.py" line="274"/> <source><p>The script could not be saved to the device.</p><p>Reason: {0}</p></source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../MicroPython/MicrobitDevices.py" line="201"/> + <source>Flash MicroPython Firmware</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/MicrobitDevices.py" line="233"/> + <source>Save Script</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/MicrobitDevices.py" line="190"/> + <source>The BBC micro:bit is not ready for flashing. See the <a href="https://microbit.org/guide/firmware/">micro:bit web site</a> for details.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/MicrobitDevices.py" line="263"/> + <source>Save Script as '{0}'</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/MicrobitDevices.py" line="254"/> + <source>Enter a file name on the device:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/MicrobitDevices.py" line="168"/> + <source>Save the current script to the selected device</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>MicrosoftEngine</name> @@ -48408,47 +48520,47 @@ <context> <name>NetworkManager</name> <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="202"/> + <location filename="../WebBrowser/Network/NetworkManager.py" line="188"/> <source>SSL Certificate Error</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../WebBrowser/Network/NetworkManager.py" line="189"/> + <source><b>{0}</b><p>The page you are trying to access has errors in the SSL certificate.</p><ul><li>{1}</li></ul><p>Would you like to make an exception?</p></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../WebBrowser/Network/NetworkManager.py" line="199"/> + <source>&Permanent accept</source> + <translation type="unfinished">Akce&ptovat natrvalo</translation> + </message> + <message> + <location filename="../WebBrowser/Network/NetworkManager.py" line="201"/> + <source>&Temporary accept</source> + <translation type="unfinished">Akcep&tovat dočasně</translation> + </message> + <message> <location filename="../WebBrowser/Network/NetworkManager.py" line="203"/> - <source><b>{0}</b><p>The page you are trying to access has errors in the SSL certificate.</p><ul><li>{1}</li></ul><p>Would you like to make an exception?</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="213"/> - <source>&Permanent accept</source> - <translation type="unfinished">Akce&ptovat natrvalo</translation> - </message> - <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="215"/> - <source>&Temporary accept</source> - <translation type="unfinished">Akcep&tovat dočasně</translation> - </message> - <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="217"/> <source>&Reject</source> <translation type="unfinished">&Odmítnout</translation> </message> <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="251"/> + <location filename="../WebBrowser/Network/NetworkManager.py" line="237"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation type="unfinished"><b>Zadejte uživatelské jméno a heslo pro {0}', realm '{1}'</b></translation> </message> <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="255"/> + <location filename="../WebBrowser/Network/NetworkManager.py" line="241"/> <source><b>Enter username and password for '{0}'</b></source> <translation type="unfinished"><b>Zadejte uživatelské jméno a heslo pro '{0}'</b></translation> </message> <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="303"/> + <location filename="../WebBrowser/Network/NetworkManager.py" line="289"/> <source>Authentication required</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../WebBrowser/Network/NetworkManager.py" line="304"/> + <location filename="../WebBrowser/Network/NetworkManager.py" line="290"/> <source>Authentication is required to access:</source> <translation type="unfinished"></translation> </message> @@ -51919,17 +52031,17 @@ <context> <name>Preferences</name> <message> - <location filename="../Preferences/__init__.py" line="1596"/> + <location filename="../Preferences/__init__.py" line="1606"/> <source>Export Preferences</source> <translation>Předvolby exportu</translation> </message> <message> - <location filename="../Preferences/__init__.py" line="1624"/> + <location filename="../Preferences/__init__.py" line="1634"/> <source>Import Preferences</source> <translation>Předvolby importu</translation> </message> <message> - <location filename="../Preferences/__init__.py" line="1624"/> + <location filename="../Preferences/__init__.py" line="1634"/> <source>Properties File (*.ini);;All Files (*)</source> <translation type="unfinished"></translation> </message> @@ -51958,27 +52070,27 @@ <context> <name>PreviewProcessingThread</name> <message> - <location filename="../UI/Previewers/PreviewerHTML.py" line="439"/> + <location filename="../UI/Previewers/PreviewerHTML.py" line="464"/> <source><p>No preview available for this type of file.</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UI/Previewers/PreviewerHTML.py" line="606"/> + <location filename="../UI/Previewers/PreviewerHTML.py" line="631"/> <source><p>ReStructuredText preview requires the <b>python-docutils</b> package.<br/>Install it with your package manager, 'pip install docutils' or see <a href="http://pypi.python.org/pypi/docutils">this page.</a></p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UI/Previewers/PreviewerHTML.py" line="549"/> + <location filename="../UI/Previewers/PreviewerHTML.py" line="574"/> <source><p>ReStructuredText preview requires the <b>sphinx</b> package.<br/>Install it with your package manager,'pip install Sphinx' or see <a href="http://pypi.python.org/pypi/Sphinx">this page.</a></p><p>Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UI/Previewers/PreviewerHTML.py" line="641"/> + <location filename="../UI/Previewers/PreviewerHTML.py" line="674"/> <source><p>Markdown preview requires the <b>Markdown</b> package.<br/>Install it with your package manager, 'pip install Markdown' or see <a href="http://pythonhosted.org/Markdown/install.html">installation instructions.</a></p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UI/Previewers/PreviewerHTML.py" line="621"/> + <location filename="../UI/Previewers/PreviewerHTML.py" line="646"/> <source><p>Docutils returned an error:</p><p>{0}</p></source> <translation type="unfinished"></translation> </message> @@ -52011,12 +52123,12 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../UI/Previewers/PreviewerHTML.py" line="252"/> + <location filename="../UI/Previewers/PreviewerHTML.py" line="254"/> <source>Preview - {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../UI/Previewers/PreviewerHTML.py" line="254"/> + <location filename="../UI/Previewers/PreviewerHTML.py" line="256"/> <source>Preview</source> <translation type="unfinished"></translation> </message> @@ -55931,6 +56043,29 @@ </message> </context> <context> + <name>PyBoardDevice</name> + <message> + <location filename="../MicroPython/PyBoardDevices.py" line="70"/> + <source>PyBoard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/PyBoardDevices.py" line="159"/> + <source>Workspace Directory</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/PyBoardDevices.py" line="159"/> + <source>Python files for PyBoard devices are stored on the device. Therefore, to edit these files you need to have the device plugged in. Until you plug in a device, the standard directory will be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../MicroPython/PyBoardDevices.py" line="186"/> + <source>MicroPython Install Instructions</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>PyCoverageDialog</name> <message> <location filename="../DataViews/PyCoverageDialog.ui" line="20"/> @@ -76605,693 +76740,693 @@ <context> <name>UserInterface</name> <message> - <location filename="../UI/UserInterface.py" line="271"/> + <location filename="../UI/UserInterface.py" line="274"/> <source>Generating Main User Interface...</source> <translation>Generování hlavního uživatelského rozhraní...</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="321"/> + <location filename="../UI/UserInterface.py" line="324"/> <source>Setting up connections...</source> <translation>Nastavení připojení...</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="573"/> + <location filename="../UI/UserInterface.py" line="577"/> <source>Initializing Tools...</source> <translation>Inicializace nástrojů...</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="583"/> + <location filename="../UI/UserInterface.py" line="587"/> <source>Registering Objects...</source> <translation>Registrování objektů...</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="616"/> - <source>Initializing Actions...</source> - <translation>Inicializace akcí...</translation> - </message> - <message> - <location filename="../UI/UserInterface.py" line="618"/> - <source>Initializing Menus...</source> - <translation>Inicializace menu...</translation> - </message> - <message> <location filename="../UI/UserInterface.py" line="620"/> - <source>Initializing Toolbars...</source> - <translation>Inicializace nástrojových lišt...</translation> + <source>Initializing Actions...</source> + <translation>Inicializace akcí...</translation> </message> <message> <location filename="../UI/UserInterface.py" line="622"/> + <source>Initializing Menus...</source> + <translation>Inicializace menu...</translation> + </message> + <message> + <location filename="../UI/UserInterface.py" line="624"/> + <source>Initializing Toolbars...</source> + <translation>Inicializace nástrojových lišt...</translation> + </message> + <message> + <location filename="../UI/UserInterface.py" line="626"/> <source>Initializing Statusbar...</source> <translation>Inicializace statusbaru...</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="649"/> + <location filename="../UI/UserInterface.py" line="653"/> <source>Initializing Single Application Server...</source> <translation>Inicializace jednouživatelského aplikačního serveru...</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1630"/> + <location filename="../UI/UserInterface.py" line="1634"/> <source>Project-Viewer</source> <translation>Prohlížeč projektu</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1665"/> + <location filename="../UI/UserInterface.py" line="1669"/> <source>Debug-Viewer</source> <translation>Prohlížeč debugeru</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1717"/> + <location filename="../UI/UserInterface.py" line="1721"/> <source>Log-Viewer</source> <translation>Prohlížeč logu</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1735"/> + <location filename="../UI/UserInterface.py" line="1739"/> <source>Task-Viewer</source> <translation>Prohlížeč úloh</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1754"/> + <location filename="../UI/UserInterface.py" line="1758"/> <source>Template-Viewer</source> <translation>Prohlížeč šablon</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1683"/> + <location filename="../UI/UserInterface.py" line="1687"/> <source>Shell</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1700"/> + <location filename="../UI/UserInterface.py" line="1704"/> <source>File-Browser</source> <translation>Browser souborů</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1518"/> + <location filename="../UI/UserInterface.py" line="1522"/> <source>Quit</source> <translation>Konec</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1518"/> + <location filename="../UI/UserInterface.py" line="1522"/> <source>&Quit</source> <translation>&Konec</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1518"/> + <location filename="../UI/UserInterface.py" line="1522"/> <source>Ctrl+Q</source> <comment>File|Quit</comment> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1524"/> + <location filename="../UI/UserInterface.py" line="1528"/> <source>Quit the IDE</source> <translation>Ukončit IDE</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1525"/> + <location filename="../UI/UserInterface.py" line="1529"/> <source><b>Quit the IDE</b><p>This quits the IDE. Any unsaved changes may be saved first. Any Python program being debugged will be stopped and the preferences will be written to disc.</p></source> <translation><b>Ukončit IDE</b><p>Ukončí se IDE. Nejdříve by se měly uložit neuložené změny. Python programy běžící v debug procesu budou ukončeny a nastavení budou uložena.</p></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1596"/> + <location filename="../UI/UserInterface.py" line="1600"/> <source>Edit Profile</source> <translation>Editační profil</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1602"/> + <location filename="../UI/UserInterface.py" line="1606"/> <source>Activate the edit view profile</source> <translation>Aktivovat profil editace</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1604"/> + <location filename="../UI/UserInterface.py" line="1608"/> <source><b>Edit Profile</b><p>Activate the "Edit View Profile". Windows being shown, if this profile is active, may be configured with the "View Profile Configuration" dialog.</p></source> <translation><b>Editační profil</b><p>Aktivování skupiny 'Editační profil'. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu 'Konfigurace profilu pohledů'.</p></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1613"/> + <location filename="../UI/UserInterface.py" line="1617"/> <source>Debug Profile</source> <translation>Debugovací profil</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1619"/> + <location filename="../UI/UserInterface.py" line="1623"/> <source>Activate the debug view profile</source> <translation>Aktivovat debugovací profil</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1621"/> + <location filename="../UI/UserInterface.py" line="1625"/> <source><b>Debug Profile</b><p>Activate the "Debug View Profile". Windows being shown, if this profile is active, may be configured with the "View Profile Configuration" dialog.</p></source> <translation><b>Debugovací profil</b><p>Aktivování skupiny 'Debugovací profil'. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu 'Konfigurace profilu pohledů'.</p></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1630"/> + <location filename="../UI/UserInterface.py" line="1634"/> <source>&Project-Viewer</source> <translation>Prohlížeč &projektu</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1630"/> + <location filename="../UI/UserInterface.py" line="1634"/> <source>Alt+Shift+P</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1665"/> + <location filename="../UI/UserInterface.py" line="1669"/> <source>Alt+Shift+D</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1683"/> + <location filename="../UI/UserInterface.py" line="1687"/> <source>&Shell</source> <translation>&Shell</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1683"/> + <location filename="../UI/UserInterface.py" line="1687"/> <source>Alt+Shift+S</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1700"/> + <location filename="../UI/UserInterface.py" line="1704"/> <source>Alt+Shift+F</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1717"/> + <location filename="../UI/UserInterface.py" line="1721"/> <source>Alt+Shift+G</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1735"/> + <location filename="../UI/UserInterface.py" line="1739"/> <source>Alt+Shift+T</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="1647"/> + <location filename="../UI/UserInterface.py" line="1651"/> <source>Alt+Shift+M</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="2002"/> + <location filename="../UI/UserInterface.py" line="2006"/> <source>What's This?</source> <translation>Co je to?</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="2002"/> + <location filename="../UI/UserInterface.py" line="2006"/> <source>&What's This?</source> <translation>&Co je to?</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="2002"/> + <location filename="../UI/UserInterface.py" line="2006"/> <source>Shift+F1</source> <translation></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="2008"/> + <location filename="../UI/UserInterface.py" line="2012"/> <source>Context sensitive help</source> <translation>Kontextově senzitivní nápověda</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="2009"/> + <location filename="../UI/UserInterface.py" line="2013"/> <source><b>Display context sensitive help</b><p>In What's This? mode, the mouse cursor shows an arrow with a question mark, and you can click on the interface elements to get a short description of what they do and how to use them. In dialogs, this feature can be accessed using the context help button in the titlebar.</p></source> <translation><b>Zobrazit kontextově senzitivní nápovědu</b><p>V režimu "Co je to?" se nad různými prvky aplikace u kurzoru zobrazí otazník. Když pak kliknete na tyto prvky, zobrazí se krátký popis co daný prvek znamená a jak jej použít. V dialogových oknech se tato funkce spustí tlačítkem kontextové nápovědy na horní liště.</p></translation> </message> <message> - <location filename="../UI/UserInterface.py" line="2020"/> + <location filename="../UI/UserInterface.py" line="2024"/> <source>Helpviewer</source> <translation>Prohlížeč nápovědy</translation> </message> <message> - <location filename="../UI/UserInterface.py" line="2020"/> + <location filename="../UI/UserInterface.py" line="2024"/> <source>&Helpviewer...</source> <translation>Pro&hlížeč nápovědy...</translation> </message>