2017-11-14 10:55:33 +13:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# --!-- coding: utf8 --!--
|
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
from PyQt5.QtCore import Qt
|
|
|
|
from PyQt5.QtWidgets import qApp, QMessageBox
|
|
|
|
from PyQt5.QtGui import QCursor
|
|
|
|
|
|
|
|
from manuskript.converters import abstractConverter
|
2022-05-17 21:43:22 +12:00
|
|
|
from manuskript.functions import mainWindow, safeTranslate
|
2017-11-14 10:55:33 +13:00
|
|
|
|
2019-10-15 01:36:06 +13:00
|
|
|
import logging
|
|
|
|
LOGGER = logging.getLogger(__name__)
|
2017-11-14 10:55:33 +13:00
|
|
|
|
|
|
|
class pandocConverter(abstractConverter):
|
|
|
|
|
|
|
|
name = "pandoc"
|
|
|
|
cmd = "pandoc"
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def isValid(self):
|
|
|
|
if self.path() != None:
|
|
|
|
return 2
|
|
|
|
elif self.customPath() and os.path.exists(self.customPath):
|
|
|
|
return 1
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def customPath(self):
|
|
|
|
settings = QSettings()
|
|
|
|
return settings.value("Exporters/{}_customPath".format(self.name), "")
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def path(self):
|
|
|
|
return shutil.which(self.cmd)
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def convert(self, src, _from="markdown", to="html", args=None, outputfile=None):
|
|
|
|
if not self.isValid:
|
2019-10-15 01:36:06 +13:00
|
|
|
LOGGER.error("pandocConverter is called but not valid.")
|
2017-11-14 10:55:33 +13:00
|
|
|
return ""
|
|
|
|
|
|
|
|
cmd = [self.runCmd()]
|
|
|
|
|
|
|
|
cmd += ["--from={}".format(_from)]
|
|
|
|
cmd += ["--to={}".format(to)]
|
|
|
|
|
|
|
|
if args:
|
|
|
|
cmd += args
|
|
|
|
|
|
|
|
if outputfile:
|
|
|
|
cmd.append("--output={}".format(outputfile))
|
|
|
|
|
|
|
|
qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
|
|
|
|
|
|
|
|
p = subprocess.Popen(
|
|
|
|
cmd,
|
|
|
|
stdin=subprocess.PIPE,
|
|
|
|
stdout=subprocess.PIPE,
|
|
|
|
stderr=subprocess.PIPE
|
|
|
|
)
|
|
|
|
|
|
|
|
if not type(src) == bytes:
|
|
|
|
src = src.encode("utf-8") # assumes utf-8
|
|
|
|
|
|
|
|
stdout, stderr = p.communicate(src)
|
|
|
|
|
|
|
|
qApp.restoreOverrideCursor()
|
|
|
|
|
|
|
|
if stderr:
|
|
|
|
err = stderr.decode("utf-8")
|
2019-10-15 01:36:06 +13:00
|
|
|
LOGGER.error(err)
|
2017-11-14 10:55:33 +13:00
|
|
|
QMessageBox.critical(mainWindow().dialog,
|
2022-05-17 21:43:22 +12:00
|
|
|
safeTranslate(qApp, "Export", "Error"), err)
|
2017-11-14 10:55:33 +13:00
|
|
|
return None
|
|
|
|
|
|
|
|
return stdout.decode("utf-8")
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def runCmd(self):
|
|
|
|
if self.isValid() == 2:
|
|
|
|
return self.cmd
|
|
|
|
elif self.isValid() == 1:
|
|
|
|
return self.customPath
|