Adds: import with pandoc through either OPML or markdown. #200

This commit is contained in:
Olivier Keshavjee 2017-11-08 23:46:18 +01:00
parent 34b55b511c
commit 9c99d186e5
2 changed files with 51 additions and 10 deletions

View file

@ -1,7 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# --!-- coding: utf8 --!-- # --!-- coding: utf8 --!--
from manuskript.importer.abstractImporter import abstractImporter
from manuskript.importer.abstractImporter import abstractImporter from manuskript.importer.abstractImporter import abstractImporter
from manuskript.models.outlineModel import outlineItem from manuskript.models.outlineModel import outlineItem
from manuskript.enums import Outline from manuskript.enums import Outline
@ -62,9 +61,12 @@ class markdownImporter(abstractImporter):
``` ```
""" """
# Read file if not fromString:
with open(filePath, "r") as f: # Read file
txt = f.read() with open(filePath, "r") as f:
txt = f.read()
else:
txt = fromString
items = [] items = []

View file

@ -4,6 +4,9 @@
from manuskript.importer.abstractImporter import abstractImporter from manuskript.importer.abstractImporter import abstractImporter
from manuskript.exporter.pandoc import pandocExporter from manuskript.exporter.pandoc import pandocExporter
from manuskript.importer.opmlImporter import opmlImporter from manuskript.importer.opmlImporter import opmlImporter
from manuskript.importer.markdownImporter import markdownImporter
from PyQt5.QtWidgets import qApp
class pandocImporter(abstractImporter): class pandocImporter(abstractImporter):
@ -13,21 +16,57 @@ class pandocImporter(abstractImporter):
def isValid(cls): def isValid(cls):
return pandocExporter().isValid() return pandocExporter().isValid()
@classmethod def startImport(self, filePath, parentItem, settingsWidget):
def startImport(cls, filePath, parentItem, settingsWidget):
formatTo = self.getSetting("formatTo").value().lower()
# pandoc --from=markdown filename --to=opml --standalone # pandoc --from=markdown filename --to=opml --standalone
args = [ args = [
"--from={}".format(cls.formatFrom), "--from={}".format(self.formatFrom),
filePath, filePath,
"--to=opml", "--to={}".format(formatTo),
"--standalone" "--standalone"
] ]
r = pandocExporter().run(args) r = pandocExporter().run(args)
return opmlImporter.startImport("", parentItem, if formatTo == "opml":
settingsWidget, fromString=r) 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/>&nbsp;"""))
self.addSetting("formatTo", "combo",
qApp.translate("Import", "Import using:"),
vals="markdown|OPML")
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
class markdownPandocImporter(pandocImporter): class markdownPandocImporter(pandocImporter):