From 4ddb95ff678769540f29ba4b3385559d85af7d11 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Sat, 4 Nov 2017 08:01:45 +0100 Subject: [PATCH 1/3] Removes MultiMarkDown exporter. See #186. --- manuskript/exporter/__init__.py | 6 ++---- manuskript/exporter/mmd.py | 28 ---------------------------- 2 files changed, 2 insertions(+), 32 deletions(-) delete mode 100644 manuskript/exporter/mmd.py diff --git a/manuskript/exporter/__init__.py b/manuskript/exporter/__init__.py index b8e7df47..c9edb188 100644 --- a/manuskript/exporter/__init__.py +++ b/manuskript/exporter/__init__.py @@ -2,13 +2,11 @@ # --!-- coding: utf8 --!-- from manuskript.exporter.manuskript import manuskriptExporter -from manuskript.exporter.mmd import mmdExporter from manuskript.exporter.pandoc import pandocExporter exporters = [ manuskriptExporter(), - pandocExporter(), - mmdExporter() + pandocExporter() ] def getExporterByName(name): @@ -16,4 +14,4 @@ def getExporterByName(name): if e.name == name: return e - return None \ No newline at end of file + return None diff --git a/manuskript/exporter/mmd.py b/manuskript/exporter/mmd.py deleted file mode 100644 index fbe5baec..00000000 --- a/manuskript/exporter/mmd.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -# --!-- coding: utf8 --!-- -from PyQt5.QtWidgets import qApp - -from manuskript.exporter.basic import basicExporter, basicFormat - - -class mmdExporter(basicExporter): - - name = "MultiMarkdown" - description = qApp.translate("Export", """

A superset of markdown.

-

Website: http://fletcherpenney.net/multimarkdown/

- """) - exportTo = [ - basicFormat("HTML", "A little known format modestly used. You know, web sites for example.", "text-html"), - basicFormat("latex", "", "text-x-tex"), - basicFormat("Flat XML", "", "text-xml"), - basicFormat("ePub", "Books that don't kill trees.", icon="application-epub+zip"), - ] - cmd = "multimarkdown" - - def version(self): - if self.isValid(): - r = self.run(["-v"]) - return r.split("\n")[1] - else: - return "" - From fc1bd40c21fa206bc4c8067591545e55c5e57fb3 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Sat, 4 Nov 2017 08:26:42 +0100 Subject: [PATCH 2/3] Uses instead of (#186) --- manuskript/exporter/pandoc/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manuskript/exporter/pandoc/__init__.py b/manuskript/exporter/pandoc/__init__.py index d36e78d8..d03e017f 100644 --- a/manuskript/exporter/pandoc/__init__.py +++ b/manuskript/exporter/pandoc/__init__.py @@ -40,7 +40,7 @@ class pandocExporter(basicExporter): def version(self): if self.isValid(): - r = self.run(["-v"]) + r = self.run(["--version"]) return r.split("\n")[0] else: return "" From b520b12d7a6968344354bfaa071bb92e42f00705 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Mon, 6 Nov 2017 10:05:20 +0100 Subject: [PATCH 3/3] Adds a tip if pandoc is not installed. #190 --- manuskript/exporter/basic.py | 4 +++- manuskript/exporter/pandoc/__init__.py | 2 ++ manuskript/functions.py | 6 ++++++ manuskript/mainWindow.py | 3 +-- manuskript/ui/exporters/exporter.py | 18 ++++++++++++++---- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/manuskript/exporter/basic.py b/manuskript/exporter/basic.py index 5acbe9e0..0cf6100a 100644 --- a/manuskript/exporter/basic.py +++ b/manuskript/exporter/basic.py @@ -19,6 +19,8 @@ class basicExporter: cmd = "" customPath = "" icon = "" + absentTip = "" # A tip displayed when exporter is absent. + absentURL = "" # URL to open if exporter is absent. def __init__(self): settings = QSettings() @@ -129,7 +131,7 @@ class basicFormat: @classmethod def isValid(cls): return True - + @classmethod def projectPath(cls): return os.path.dirname(os.path.abspath(mainWindow().currentProject)) diff --git a/manuskript/exporter/pandoc/__init__.py b/manuskript/exporter/pandoc/__init__.py index d03e017f..55df7178 100644 --- a/manuskript/exporter/pandoc/__init__.py +++ b/manuskript/exporter/pandoc/__init__.py @@ -22,6 +22,8 @@ class pandocExporter(basicExporter):

Website: http://pandoc.org/

""") cmd = "pandoc" + absentTip = "Install pandoc to benefit from a wide range of export formats (DocX, ePub, PDF, etc.)" + absentURL = "http://pandoc.org/installing.html" def __init__(self): basicExporter.__init__(self) diff --git a/manuskript/functions.py b/manuskript/functions.py index b7873ad7..f708f9ab 100644 --- a/manuskript/functions.py +++ b/manuskript/functions.py @@ -6,7 +6,9 @@ import re from random import * from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QRegExp, QDir +from PyQt5.QtCore import QUrl from PyQt5.QtGui import QBrush, QIcon, QPainter, QColor, QImage, QPixmap +from PyQt5.QtGui import QDesktopServices from PyQt5.QtWidgets import qApp, QTextEdit from manuskript.enums import Outline @@ -355,3 +357,7 @@ def customIcons(): ] return sorted(r) + +def openURL(url): + QDesktopServices.openUrl(QUrl(url)) + diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index b47892e5..4996c09f 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -1142,8 +1142,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): w.setDict(settings.dict) def openPyEnchantWebPage(self): - from PyQt5.QtGui import QDesktopServices - QDesktopServices.openUrl(QUrl("http://pythonhosted.org/pyenchant/")) + F.openURL("http://pythonhosted.org/pyenchant/") def toggleSpellcheck(self, val): settings.spellcheck = val diff --git a/manuskript/ui/exporters/exporter.py b/manuskript/ui/exporters/exporter.py index da1628c2..a219efa2 100644 --- a/manuskript/ui/exporters/exporter.py +++ b/manuskript/ui/exporters/exporter.py @@ -5,10 +5,10 @@ import os from PyQt5.QtCore import Qt from PyQt5.QtGui import QBrush, QColor, QIcon -from PyQt5.QtWidgets import QWidget +from PyQt5.QtWidgets import QWidget, QStyle from manuskript import exporter -from manuskript.functions import lightBlue, writablePath +from manuskript.functions import lightBlue, writablePath, openURL from manuskript.ui.exporters.exporter_ui import Ui_exporter from manuskript.ui.exporters.exportersManager import exportersManager @@ -42,7 +42,7 @@ class exporterDialog(QWidget, Ui_exporter): self.cmbExporters.clear() for E in exporter.exporters: - if not E.isValid(): + if not E.isValid() and not E.absentTip: continue self.cmbExporters.addItem(QIcon(E.icon), E.name) @@ -51,6 +51,10 @@ class exporterDialog(QWidget, Ui_exporter): item = self.cmbExporters.model().item(self.cmbExporters.count() - 1) item.setFlags(Qt.ItemIsEnabled) + if not E.isValid() and E.absentTip: + self.cmbExporters.addItem(self.style().standardIcon(QStyle.SP_MessageBoxWarning), E.absentTip, "::URL::" + E.absentURL) + continue + for f in E.exportTo: if not f.isValid(): @@ -60,6 +64,12 @@ class exporterDialog(QWidget, Ui_exporter): self.cmbExporters.addItem(QIcon.fromTheme(f.icon), name, E.name) def updateUi(self, index): + + # We check if we have an URL to open + data = self.cmbExporters.currentData() + if data and data[:7] == "::URL::" and data[7:]: + openURL(data[7:]) + E, F = self.getSelectedExporter() if not E or not F or not F.implemented: @@ -142,4 +152,4 @@ class exporterDialog(QWidget, Ui_exporter): item.widget().deleteLater() l.addWidget(widget) - widget.setParent(group) \ No newline at end of file + widget.setParent(group)