2017-11-08 08:30:39 +13:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# --!-- coding: utf8 --!--
|
|
|
|
|
|
|
|
from manuskript.importer.abstractImporter import abstractImporter
|
|
|
|
from manuskript.exporter.pandoc import pandocExporter
|
|
|
|
from manuskript.importer.opmlImporter import opmlImporter
|
2017-11-09 11:46:18 +13:00
|
|
|
from manuskript.importer.markdownImporter import markdownImporter
|
|
|
|
from PyQt5.QtWidgets import qApp
|
|
|
|
|
2017-11-08 08:30:39 +13:00
|
|
|
|
|
|
|
class pandocImporter(abstractImporter):
|
|
|
|
|
|
|
|
formatFrom = ""
|
2017-11-09 23:25:24 +13:00
|
|
|
engine = "Pandoc"
|
2017-11-10 03:18:21 +13:00
|
|
|
extraArgs = []
|
2017-11-08 08:30:39 +13:00
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def isValid(cls):
|
|
|
|
return pandocExporter().isValid()
|
|
|
|
|
2017-11-09 11:46:18 +13:00
|
|
|
def startImport(self, filePath, parentItem, settingsWidget):
|
|
|
|
|
|
|
|
formatTo = self.getSetting("formatTo").value().lower()
|
2017-11-09 20:46:31 +13:00
|
|
|
wrap = self.getSetting("wrap").value().lower()
|
2017-11-08 08:30:39 +13:00
|
|
|
|
|
|
|
# pandoc --from=markdown filename --to=opml --standalone
|
|
|
|
args = [
|
2017-11-09 11:46:18 +13:00
|
|
|
"--from={}".format(self.formatFrom),
|
2017-11-08 08:30:39 +13:00
|
|
|
filePath,
|
2017-11-09 11:46:18 +13:00
|
|
|
"--to={}".format(formatTo),
|
2017-11-09 20:46:31 +13:00
|
|
|
"--wrap={}".format(wrap),
|
2017-11-08 08:30:39 +13:00
|
|
|
]
|
|
|
|
|
2017-11-10 03:18:21 +13:00
|
|
|
if formatTo == "opml":
|
|
|
|
args.append("--standalone")
|
|
|
|
|
|
|
|
args += self.extraArgs
|
|
|
|
|
2017-11-08 08:30:39 +13:00
|
|
|
r = pandocExporter().run(args)
|
|
|
|
|
2021-02-22 11:45:34 +13:00
|
|
|
if r == None:
|
2019-05-10 06:24:52 +12:00
|
|
|
return None
|
|
|
|
|
2017-11-09 11:46:18 +13:00
|
|
|
if formatTo == "opml":
|
|
|
|
return self.opmlImporter.startImport("", parentItem,
|
|
|
|
settingsWidget, fromString=r)
|
|
|
|
elif formatTo == "markdown":
|
|
|
|
return self.mdImporter.startImport(filePath, parentItem,
|
|
|
|
settingsWidget, fromString=r)
|
|
|
|
|
|
|
|
def settingsWidget(self, widget):
|
|
|
|
"""
|
|
|
|
Takes a QWidget that can be modified and must be returned.
|
|
|
|
"""
|
|
|
|
|
|
|
|
# Add group
|
|
|
|
group = self.addGroup(widget.toolBox.widget(0),
|
|
|
|
qApp.translate("Import", "Pandoc import"))
|
|
|
|
|
|
|
|
self.addSetting("info", "label",
|
|
|
|
qApp.translate("Import", """<b>Info:</b> Manuskript can
|
|
|
|
import from <b>markdown</b> or <b>OPML</b>. Pandoc will
|
|
|
|
convert your document to either (see option below), and
|
|
|
|
then it will be imported in manuskript. One or the other
|
|
|
|
might give better result depending on your document.
|
|
|
|
<br/> """))
|
|
|
|
|
|
|
|
self.addSetting("formatTo", "combo",
|
|
|
|
qApp.translate("Import", "Import using:"),
|
|
|
|
vals="markdown|OPML")
|
|
|
|
|
2017-11-09 20:46:31 +13:00
|
|
|
self.addSetting("wrap", "combo",
|
|
|
|
qApp.translate("Import", "Wrap lines:"),
|
2017-11-09 23:25:24 +13:00
|
|
|
vals="auto|none|preserve",
|
|
|
|
default="none",
|
|
|
|
tooltip=qApp.translate("Import", """<p>Should pandoc create
|
|
|
|
cosmetic / non-semantic line-breaks?</p><p>
|
|
|
|
<b>auto</b>: wraps at 72 characters.<br>
|
|
|
|
<b>none</b>: no line wrap.<br>
|
|
|
|
<b>preserve</b>: tries to preserves line wrap from the
|
|
|
|
original document.</p>"""))
|
2017-11-09 20:46:31 +13:00
|
|
|
|
2017-11-09 11:46:18 +13:00
|
|
|
for s in self.settings:
|
|
|
|
self.settings[s].widget(group)
|
|
|
|
|
|
|
|
self.mdImporter = markdownImporter()
|
|
|
|
widget = self.mdImporter.settingsWidget(widget)
|
|
|
|
self.opmlImporter = opmlImporter()
|
|
|
|
widget = self.opmlImporter.settingsWidget(widget)
|
|
|
|
|
|
|
|
return widget
|
2017-11-08 08:30:39 +13:00
|
|
|
|
|
|
|
|
|
|
|
class markdownPandocImporter(pandocImporter):
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
name = "Markdown"
|
2017-11-08 08:30:39 +13:00
|
|
|
description = "Markdown, using pandoc"
|
|
|
|
fileFormat = "Markdown files (*.md *.txt *)"
|
|
|
|
icon = "text-x-markdown"
|
|
|
|
formatFrom = "markdown"
|
|
|
|
|
|
|
|
class ePubPandocImporter(pandocImporter):
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
name = "ePub"
|
2017-11-08 08:30:39 +13:00
|
|
|
description = ""
|
|
|
|
fileFormat = "ePub files (*.epub)"
|
|
|
|
icon = "application-epub+zip"
|
|
|
|
formatFrom = "epub"
|
|
|
|
|
|
|
|
class docXPandocImporter(pandocImporter):
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
name = "DocX"
|
2017-11-08 08:30:39 +13:00
|
|
|
description = ""
|
|
|
|
fileFormat = "DocX files (*.docx)"
|
|
|
|
icon = "application-vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
|
|
formatFrom = "docx"
|
|
|
|
|
|
|
|
class odtPandocImporter(pandocImporter):
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
name = "ODT"
|
2017-11-08 08:30:39 +13:00
|
|
|
description = ""
|
|
|
|
fileFormat = "Open Document files (*.odt)"
|
|
|
|
icon = "application-vnd.oasis.opendocument.text"
|
|
|
|
formatFrom = "odt"
|
|
|
|
|
|
|
|
class rstPandocImporter(pandocImporter):
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
name = "reStructuredText"
|
2017-11-08 08:30:39 +13:00
|
|
|
description = ""
|
|
|
|
fileFormat = "reStructuredText files (*.rst)"
|
|
|
|
icon = "text-plain"
|
|
|
|
formatFrom = "rst"
|
|
|
|
|
|
|
|
class HTMLPandocImporter(pandocImporter):
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
name = "HTML"
|
2017-11-08 08:30:39 +13:00
|
|
|
description = ""
|
|
|
|
fileFormat = "HTML files (*.htm *.html)"
|
|
|
|
icon = "text-html"
|
|
|
|
formatFrom = "html"
|
|
|
|
|
|
|
|
class LaTeXPandocImporter(pandocImporter):
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
name = "LaTeX"
|
2017-11-08 08:30:39 +13:00
|
|
|
description = ""
|
|
|
|
fileFormat = "LaTeX files (*.tex)"
|
|
|
|
icon = "text-x-tex"
|
|
|
|
formatFrom = "latex"
|
|
|
|
|
2017-11-09 23:25:24 +13:00
|
|
|
class OPMLPandocImporter(pandocImporter):
|
|
|
|
|
|
|
|
name = "OPML"
|
|
|
|
description = ""
|
|
|
|
fileFormat = "OPML files (*.opml *.xml)"
|
|
|
|
icon = "text-x-opml+xml"
|
|
|
|
formatFrom = "opml"
|
|
|
|
|
2017-11-08 08:30:39 +13:00
|
|
|
|
|
|
|
|