Fri, 25 Oct 2019 20:15:51 +0200
PreviewerHTML, ExporterHTML:
- enhanced the Markdown generated HTML with an embedded style sheet.
--- a/eric6.e4p Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6.e4p Fri Oct 25 20:15:51 2019 +0200 @@ -1198,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>
--- a/eric6/APIs/Python3/eric6.api Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6/APIs/Python3/eric6.api Fri Oct 25 20:15:51 2019 +0200 @@ -7430,14 +7430,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._CaretExtension.INS_RE?7 -eric6.QScintilla.Exporters.ExporterHTML._CaretExtension.SUP_RE?7 -eric6.QScintilla.Exporters.ExporterHTML._CaretExtension.extendMarkdown?4(md, md_globals) -eric6.QScintilla.Exporters.ExporterHTML._MarkExtension.MARK_RE?7 -eric6.QScintilla.Exporters.ExporterHTML._MarkExtension.extendMarkdown?4(md, md_globals) -eric6.QScintilla.Exporters.ExporterHTML._TildeExtension.DEL_RE?7 -eric6.QScintilla.Exporters.ExporterHTML._TildeExtension.SUB_RE?7 -eric6.QScintilla.Exporters.ExporterHTML._TildeExtension.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() @@ -8837,6 +8829,16 @@ 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, usePyMdownExtensions, markdownHtmlFormat, restDocutilsHtmlFormat) eric6.UI.Previewers.PreviewerHTML.PreviewProcessingThread.run?4() @@ -8848,14 +8850,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._CaretExtension.INS_RE?7 -eric6.UI.Previewers.PreviewerHTML._CaretExtension.SUP_RE?7 -eric6.UI.Previewers.PreviewerHTML._CaretExtension.extendMarkdown?4(md, md_globals) -eric6.UI.Previewers.PreviewerHTML._MarkExtension.MARK_RE?7 -eric6.UI.Previewers.PreviewerHTML._MarkExtension.extendMarkdown?4(md, md_globals) -eric6.UI.Previewers.PreviewerHTML._TildeExtension.DEL_RE?7 -eric6.UI.Previewers.PreviewerHTML._TildeExtension.SUB_RE?7 -eric6.UI.Previewers.PreviewerHTML._TildeExtension.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
--- a/eric6/APIs/Python3/eric6.bas Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6/APIs/Python3/eric6.bas Fri Oct 25 20:15:51 2019 +0200 @@ -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 @@ -803,6 +805,7 @@ ShortcutsDialog QDialog Ui_ShortcutsDialog ShortcutsReader XMLStreamReaderBase ShortcutsWriter XMLStreamWriterBase +SimplePatternExtension Extension SingleApplicationServer QLocalServer SiteInfoDialog QDialog Ui_SiteInfoDialog SiteInfoWidget QMenu @@ -1025,6 +1028,3 @@ ZoomManager QObject ZoomValuesDialog QDialog Ui_ZoomValuesDialog ZoomValuesModel QAbstractTableModel -_CaretExtension markdown.Extension -_MarkExtension markdown.Extension -_TildeExtension markdown.Extension
--- a/eric6/Documentation/Help/source.qhp Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6/Documentation/Help/source.qhp Fri Oct 25 20:15:51 2019 +0200 @@ -937,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"> @@ -9501,6 +9503,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" /> @@ -9574,6 +9577,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" /> @@ -11052,6 +11059,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" /> @@ -12988,6 +12996,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__" /> @@ -16888,21 +16898,9 @@ <keyword name="ZoomValuesModel.headerData" id="ZoomValuesModel.headerData" ref="eric6.WebBrowser.ZoomManager.ZoomValuesModel.html#ZoomValuesModel.headerData" /> <keyword name="ZoomValuesModel.removeRows" id="ZoomValuesModel.removeRows" ref="eric6.WebBrowser.ZoomManager.ZoomValuesModel.html#ZoomValuesModel.removeRows" /> <keyword name="ZoomValuesModel.rowCount" id="ZoomValuesModel.rowCount" ref="eric6.WebBrowser.ZoomManager.ZoomValuesModel.html#ZoomValuesModel.rowCount" /> - <keyword name="_CaretExtension" id="_CaretExtension" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_CaretExtension" /> - <keyword name="_CaretExtension" id="_CaretExtension" ref="eric6.UI.Previewers.PreviewerHTML.html#_CaretExtension" /> - <keyword name="_CaretExtension.extendMarkdown" id="_CaretExtension.extendMarkdown" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_CaretExtension.extendMarkdown" /> - <keyword name="_CaretExtension.extendMarkdown" id="_CaretExtension.extendMarkdown" ref="eric6.UI.Previewers.PreviewerHTML.html#_CaretExtension.extendMarkdown" /> <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="_MarkExtension" id="_MarkExtension" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_MarkExtension" /> - <keyword name="_MarkExtension" id="_MarkExtension" ref="eric6.UI.Previewers.PreviewerHTML.html#_MarkExtension" /> - <keyword name="_MarkExtension.extendMarkdown" id="_MarkExtension.extendMarkdown" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_MarkExtension.extendMarkdown" /> - <keyword name="_MarkExtension.extendMarkdown" id="_MarkExtension.extendMarkdown" ref="eric6.UI.Previewers.PreviewerHTML.html#_MarkExtension.extendMarkdown" /> - <keyword name="_TildeExtension" id="_TildeExtension" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_TildeExtension" /> - <keyword name="_TildeExtension" id="_TildeExtension" ref="eric6.UI.Previewers.PreviewerHTML.html#_TildeExtension" /> - <keyword name="_TildeExtension.extendMarkdown" id="_TildeExtension.extendMarkdown" ref="eric6.QScintilla.Exporters.ExporterHTML.html#_TildeExtension.extendMarkdown" /> - <keyword name="_TildeExtension.extendMarkdown" id="_TildeExtension.extendMarkdown" ref="eric6.UI.Previewers.PreviewerHTML.html#_TildeExtension.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" /> @@ -18583,7 +18581,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.QScintilla.Exporters.ExporterHTML.html Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6/Documentation/Source/eric6.QScintilla.Exporters.ExporterHTML.html Fri Oct 25 20:15:51 2019 +0200 @@ -42,18 +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="#_CaretExtension">_CaretExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> -<tr> -<td><a href="#_MarkExtension">_MarkExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> -<tr> -<td><a href="#_TildeExtension">_TildeExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> </table> <h3>Functions</h3> @@ -262,139 +250,4 @@ </dl> <div align="right"><a href="#top">Up</a></div> <hr /> -<hr /> -<a NAME="_CaretExtension" ID="_CaretExtension"></a> -<h2>_CaretExtension</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>INS_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="#_CaretExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_CaretExtension.extendMarkdown" ID="_CaretExtension.extendMarkdown"></a> -<h4>_CaretExtension.extendMarkdown</h4> -<b>extendMarkdown</b>(<i>md, md_globals</i>) - -<div align="right"><a href="#top">Up</a></div> -<hr /> -<hr /> -<a NAME="_MarkExtension" ID="_MarkExtension"></a> -<h2>_MarkExtension</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>MARK_RE</td></tr> -</table> -<h3>Class Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Methods</h3> - -<table> - -<tr> -<td><a href="#_MarkExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_MarkExtension.extendMarkdown" ID="_MarkExtension.extendMarkdown"></a> -<h4>_MarkExtension.extendMarkdown</h4> -<b>extendMarkdown</b>(<i>md, md_globals</i>) - -<div align="right"><a href="#top">Up</a></div> -<hr /> -<hr /> -<a NAME="_TildeExtension" ID="_TildeExtension"></a> -<h2>_TildeExtension</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><tr><td>SUB_RE</td></tr> -</table> -<h3>Class Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Methods</h3> - -<table> - -<tr> -<td><a href="#_TildeExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_TildeExtension.extendMarkdown" ID="_TildeExtension.extendMarkdown"></a> -<h4>_TildeExtension.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.MarkdownExtensions.html Fri Oct 25 20:15:51 2019 +0200 @@ -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 24 19:34:53 2019 +0200 +++ b/eric6/Documentation/Source/eric6.UI.Previewers.PreviewerHTML.html Fri Oct 25 20:15:51 2019 +0200 @@ -42,18 +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="#_CaretExtension">_CaretExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> -<tr> -<td><a href="#_MarkExtension">_MarkExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> -<tr> -<td><a href="#_TildeExtension">_TildeExtension</a></td> -<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td> -</tr> </table> <h3>Functions</h3> @@ -716,139 +704,4 @@ </p> <div align="right"><a href="#top">Up</a></div> <hr /> -<hr /> -<a NAME="_CaretExtension" ID="_CaretExtension"></a> -<h2>_CaretExtension</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>INS_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="#_CaretExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_CaretExtension.extendMarkdown" ID="_CaretExtension.extendMarkdown"></a> -<h4>_CaretExtension.extendMarkdown</h4> -<b>extendMarkdown</b>(<i>md, md_globals</i>) - -<div align="right"><a href="#top">Up</a></div> -<hr /> -<hr /> -<a NAME="_MarkExtension" ID="_MarkExtension"></a> -<h2>_MarkExtension</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>MARK_RE</td></tr> -</table> -<h3>Class Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Methods</h3> - -<table> - -<tr> -<td><a href="#_MarkExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_MarkExtension.extendMarkdown" ID="_MarkExtension.extendMarkdown"></a> -<h4>_MarkExtension.extendMarkdown</h4> -<b>extendMarkdown</b>(<i>md, md_globals</i>) - -<div align="right"><a href="#top">Up</a></div> -<hr /> -<hr /> -<a NAME="_TildeExtension" ID="_TildeExtension"></a> -<h2>_TildeExtension</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><tr><td>SUB_RE</td></tr> -</table> -<h3>Class Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Methods</h3> - -<table> - -<tr> -<td><a href="#_TildeExtension.extendMarkdown">extendMarkdown</a></td> -<td></td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="_TildeExtension.extendMarkdown" ID="_TildeExtension.extendMarkdown"></a> -<h4>_TildeExtension.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 Oct 25 20:15:51 2019 +0200 @@ -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/index-eric6.UI.Previewers.html Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6/Documentation/Source/index-eric6.UI.Previewers.html Fri Oct 25 20:15:51 2019 +0200 @@ -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/QScintilla/Exporters/ExporterHTML.py Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6/QScintilla/Exporters/ExporterHTML.py Fri Oct 25 20:15:51 2019 +0200 @@ -525,14 +525,18 @@ ) return "" + from UI.Previewers import PreviewerHTMLStyles + from UI.Previewers import MarkdownExtensions + extensions = [] + text = self.editor.text() + + mermaidNeeded = False if Preferences.getEditor("PreviewMarkdownMermaid"): - try: - import md_mermaid # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ - extensions.append("md_mermaid") - except ImportError: - pass + if MarkdownExtensions.MermaidRegex.search(text): + extensions.append(MarkdownExtensions.MermaidExtension()) + mermaidNeeded = True if Preferences.getEditor("PreviewMarkdownNLtoBR"): extensions.append('nl2br') @@ -544,6 +548,7 @@ # PyPI package is 'pymdown-extensions' extensions.extend([ + 'toc', 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', 'pymdownx.tasklist', 'pymdownx.smartsymbols', @@ -561,76 +566,7 @@ (markdown.version_info[0] == 2 and markdown.version_info[1] > 0) ): - class _TildeExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - DEL_RE = r'(~~)(.+?)~~' - SUB_RE = r'(~)(.+?)~' - - def extendMarkdown(self, md, md_globals): - # Create the sub pattern and insert it into markdown - # parser - sub_tag = markdown.inlinepatterns.SimpleTagPattern( - self.SUB_RE, 'sub') - md.inlinePatterns.add('sub', sub_tag, '>not_strong') - - # Create the del pattern and insert it into markdown - # parser - del_tag = markdown.inlinepatterns.SimpleTagPattern( - self.DEL_RE, 'del') - md.inlinePatterns.add('del', del_tag, '>not_strong') - - class _CaretExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - INS_RE = r'(\^\^)(.*?)\^\^' - SUP_RE = r'(\^)(.*?)\^' - - def extendMarkdown(self, md, md_globals): - # Create the sup pattern and insert it into markdown - # parser - sup_tag = markdown.inlinepatterns.SimpleTagPattern( - self.SUP_RE, 'sup') - md.inlinePatterns.add('sup', sup_tag, '>not_strong') - - # Create the ins pattern and insert it into markdown - # parser - ins_tag = markdown.inlinepatterns.SimpleTagPattern( - self.INS_RE, 'ins') - md.inlinePatterns.add('ins', ins_tag, '>not_strong') - - class _MarkExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - MARK_RE = r'(==)(.*?)==' - - def extendMarkdown(self, md, md_globals): - # Create the mark pattern and insert it into markdown - # parser - mark_tag = markdown.inlinepatterns.SimpleTagPattern( - self.MARK_RE, 'mark') - md.inlinePatterns.add('mark', mark_tag, '>not_strong') - - extensions.extend([ - _TildeExtension(), _CaretExtension(), _MarkExtension() - ]) - - text = self.editor.text() + extensions.append(MarkdownExtensions.SimplePatternExtension()) if Preferences.getEditor("PreviewMarkdownMathJax"): mathjax = ( @@ -650,7 +586,7 @@ else: mathjax = "" - if Preferences.getEditor("PreviewMarkdownMermaid"): + if mermaidNeeded: mermaid = ( "<script type='text/javascript' id='Mermaid-script'" " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n" @@ -691,9 +627,16 @@ '''content="text/html; charset=utf-8" />\n''' '''{0}''' '''{1}''' + '''<style type="text/css">''' + '''{2}''' + '''</style>\n''' '''</head>\n''' '''<body>\n''' - ).format(mathjax, mermaid) + ).format( + mathjax, mermaid, + PreviewerHTMLStyles.css_markdown + + PreviewerHTMLStyles.css_pygments + ) foot = '''\n</body>\n</html>\n'''
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/UI/Previewers/MarkdownExtensions.py Fri Oct 25 20:15:51 2019 +0200 @@ -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 24 19:34:53 2019 +0200 +++ b/eric6/UI/Previewers/PreviewerHTML.py Fri Oct 25 20:15:51 2019 +0200 @@ -678,14 +678,16 @@ """<a href="http://pythonhosted.org/Markdown/install.html">""" """installation instructions.</a></p>""") + from . import PreviewerHTMLStyles + from . import MarkdownExtensions + extensions = [] + mermaidNeeded = False if Preferences.getEditor("PreviewMarkdownMermaid"): - try: - import md_mermaid # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ - extensions.append("md_mermaid") - except ImportError: - pass + if MarkdownExtensions.MermaidRegexFullText.search(text): + extensions.append(MarkdownExtensions.MermaidExtension()) + mermaidNeeded = True if convertNewLineToBreak: extensions.append('nl2br') @@ -697,6 +699,7 @@ # PyPI package is 'pymdown-extensions' extensions.extend([ + 'toc', 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', 'pymdownx.tasklist', 'pymdownx.smartsymbols', @@ -714,74 +717,7 @@ (markdown.version_info[0] == 2 and markdown.version_info[1] > 0) ): - class _TildeExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - DEL_RE = r'(~~)(.+?)~~' - SUB_RE = r'(~)(.+?)~' - - def extendMarkdown(self, md, md_globals): - # Create the sub pattern and insert it into markdown - # parser - sub_tag = markdown.inlinepatterns.SimpleTagPattern( - self.SUB_RE, 'sub') - md.inlinePatterns.add('sub', sub_tag, '>not_strong') - - # Create the del pattern and insert it into markdown - # parser - del_tag = markdown.inlinepatterns.SimpleTagPattern( - self.DEL_RE, 'del') - md.inlinePatterns.add('del', del_tag, '>not_strong') - - class _CaretExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - INS_RE = r'(\^\^)(.*?)\^\^' - SUP_RE = r'(\^)(.*?)\^' - - def extendMarkdown(self, md, md_globals): - # Create the sup pattern and insert it into markdown - # parser - sup_tag = markdown.inlinepatterns.SimpleTagPattern( - self.SUP_RE, 'sup') - md.inlinePatterns.add('sup', sup_tag, '>not_strong') - - # Create the ins pattern and insert it into markdown - # parser - ins_tag = markdown.inlinepatterns.SimpleTagPattern( - self.INS_RE, 'ins') - md.inlinePatterns.add('ins', ins_tag, '>not_strong') - - class _MarkExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - MARK_RE = r'(==)(.*?)==' - - def extendMarkdown(self, md, md_globals): - # Create the mark pattern and insert it into markdown - # parser - mark_tag = markdown.inlinepatterns.SimpleTagPattern( - self.MARK_RE, 'mark') - md.inlinePatterns.add('mark', mark_tag, '>not_strong') - - extensions.extend([ - _TildeExtension(), _CaretExtension(), _MarkExtension() - ]) + extensions.append(MarkdownExtensions.SimplePatternExtension()) if Preferences.getEditor("PreviewMarkdownMathJax"): mathjax = ( @@ -801,7 +737,7 @@ else: mathjax = "" - if Preferences.getEditor("PreviewMarkdownMermaid"): + if mermaidNeeded: mermaid = ( "<script type='text/javascript' id='Mermaid-script'" " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n" @@ -836,9 +772,16 @@ '''content="text/html; charset=utf-8" />\n''' '''{0}''' '''{1}''' + '''<style type="text/css">''' + '''{2}''' + '''</style>\n''' '''</head>\n''' '''<body>\n''' - ).format(mathjax, mermaid) + ).format( + mathjax, mermaid, + PreviewerHTMLStyles.css_markdown + + PreviewerHTMLStyles.css_pygments + ) foot = '''\n</body>\n</html>\n'''
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/UI/Previewers/PreviewerHTMLStyles.py Fri Oct 25 20:15:51 2019 +0200 @@ -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 } + +"""