From a7d2ca24a581b299e0238b2562f161f6feffe0b2 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 22:56:30 +0200 Subject: [PATCH] Deleted the rest of the no longer needed code --- nw/common.py | 8 - nw/constants/__init__.py | 3 +- nw/constants/constants.py | 28 -- nw/gui/dialogs/export.py | 718 -------------------------------------- requirements.txt | 2 - 5 files changed, 1 insertion(+), 758 deletions(-) delete mode 100644 nw/gui/dialogs/export.py diff --git a/nw/common.py b/nw/common.py index 9f4b8011..bd535a71 100644 --- a/nw/common.py +++ b/nw/common.py @@ -172,11 +172,3 @@ def splitVersionNumber(vString): vInt = vMajor*10000 + vMinor*100 + vPatch return [vMajor, vMinor, vPatch, vInt] - -def packageRefURL(packName): - from nw.constants import nwDependencies - if packName in nwDependencies.PACKS.keys(): - return "%s" % ( - nwDependencies.PACKS[packName]["site"], packName - ) - return packName diff --git a/nw/constants/__init__.py b/nw/constants/__init__.py index eeab86cc..1abd529c 100644 --- a/nw/constants/__init__.py +++ b/nw/constants/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from nw.constants.iso import isoLanguage, isoCountry from nw.constants.constants import ( - nwConst, nwFiles, nwKeyWords, nwLabels, nwDependencies, nwQuotes, nwUnicode + nwConst, nwFiles, nwKeyWords, nwLabels, nwQuotes, nwUnicode ) from nw.constants.enum import ( nwAlert, nwDocAction, nwItemClass, nwItemLayout, nwItemType, nwOutline @@ -14,7 +14,6 @@ __all__ = [ "nwFiles", "nwKeyWords", "nwLabels", - "nwDependencies", "nwQuotes", "nwUnicode", "nwAlert", diff --git a/nw/constants/constants.py b/nw/constants/constants.py index 33a6fc15..3b61fccc 100644 --- a/nw/constants/constants.py +++ b/nw/constants/constants.py @@ -142,34 +142,6 @@ class nwLabels(): # END Class nwLabels -class nwDependencies(): - """Python package dependencies and their reference links. - """ - PACKS = { - "pyqt5" : { - "site" : "", - "docs" : "", - }, - "lxml" : { - "site" : "", - "docs" : "", - }, - "pyenchant" : { - "site" : "", - "docs" : "", - }, - "latexcodec" : { - "site" : "https://pypi.org/project/latexcodec/", - "docs" : "https://latexcodec.readthedocs.io/en/latest/", - }, - "pypandoc" : { - "site" : "https://pypi.org/project/pypandoc/", - "docs" : "https://pypi.org/project/pypandoc/", - }, - } - -# END Class nwDependencies - class nwQuotes(): """Allowed quotation marks. Source: https://en.wikipedia.org/wiki/Quotation_mark diff --git a/nw/gui/dialogs/export.py b/nw/gui/dialogs/export.py deleted file mode 100644 index 2d67e482..00000000 --- a/nw/gui/dialogs/export.py +++ /dev/null @@ -1,718 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter GUI Export Tools - - novelWriter – GUI Export Tools -================================ - Tool for exporting project files to other formats - - File History: - Created: 2019-10-13 [0.2.3] - - This file is a part of novelWriter - Copyright 2020, Veronica Berglyd Olsen - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -""" - -import logging -import time -import nw - -from os import path - -from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QWidget, QTabWidget, QGridLayout, - QGroupBox, QCheckBox, QLabel, QComboBox, QLineEdit, QPushButton, - QFileDialog, QProgressBar, QSpinBox, QMessageBox -) - -from nw.convert import TextFile, HtmlFile, MarkdownFile, LaTeXFile, ConcatFile -from nw.common import packageRefURL -from nw.constants import nwFiles, nwItemType, nwAlert - -logger = logging.getLogger(__name__) - -class GuiExport(QDialog): - - def __init__(self, theParent, theProject): - QDialog.__init__(self, theParent) - - logger.debug("Initialising GuiExport ...") - - self.mainConf = nw.CONFIG - self.theParent = theParent - self.theProject = theProject - self.optState = self.theProject.optState - - self.outerBox = QHBoxLayout() - self.innerBox = QVBoxLayout() - self.setWindowTitle("Export Project") - self.setLayout(self.outerBox) - - self.guiDeco = self.theParent.theTheme.loadDecoration("export",(64,64)) - - self.tabMain = GuiExportMain(self.theParent, self.theProject) - self.tabPandoc = GuiExportPandoc(self.theParent, self.theProject) - - self.tabWidget = QTabWidget() - self.tabWidget.addTab(self.tabMain, "Settings") - self.tabWidget.addTab(self.tabPandoc, "Pandoc") - - self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) - self.outerBox.addLayout(self.innerBox) - - self.doExportForm = QGridLayout() - self.doExportForm.setContentsMargins(10,5,0,10) - - self.exportButton = QPushButton("Export") - self.exportButton.clicked.connect(self._doExport) - - self.closeButton = QPushButton("Close") - self.closeButton.clicked.connect(self._doClose) - - self.exportStatus = QLabel("Ready ...") - self.exportProgress = QProgressBar(self) - - self.doExportForm.addWidget(self.exportStatus, 0, 0, 1, 3) - self.doExportForm.addWidget(self.exportProgress, 1, 0) - self.doExportForm.addWidget(self.exportButton, 1, 1) - self.doExportForm.addWidget(self.closeButton, 1, 2) - - self.innerBox.addWidget(self.tabWidget) - self.innerBox.addLayout(self.doExportForm) - - self.rejected.connect(self._doClose) - self.show() - - logger.debug("GuiExport initialisation complete") - - return - - ## - # Buttons - ## - - def _doExport(self): - - logger.verbose("GuiExport export button clicked") - - wNovel = self.tabMain.expNovel.isChecked() - wNotes = self.tabMain.expNotes.isChecked() - eFormat = self.tabMain.outputFormat.currentData() - fixWidth = self.tabMain.fixedWidth.value() - wComments = self.tabMain.expComments.isChecked() - wKeywords = self.tabMain.expKeywords.isChecked() - chFormat = self.tabMain.chapterFormat.text() - unFormat = self.tabMain.unnumFormat.text() - scFormat = self.tabMain.sceneFormat.text() - seFormat = self.tabMain.sectionFormat.text() - saveTo = self.tabMain.exportPath.text() - hScene = self.tabMain.hideScene.isChecked() - hSection = self.tabMain.hideSection.isChecked() - - pFormat = self.tabPandoc.outputFormat.currentData() - tFormat = GuiExportPandoc.FMT_VIA[pFormat] - - if saveTo.startswith("~"): - saveTo = path.expanduser(saveTo) - - exportDir = path.dirname(saveTo) - if not path.isdir(exportDir): - self.theParent.makeAlert("The export folder does not exist.",nwAlert.ERROR) - self.exportStatus.setText("Export failed ...") - return False - - nItems = len(self.theProject.projTree) - if eFormat == GuiExportMain.FMT_PDOC: - nItems += int(0.2*nItems) - self.exportProgress.setMinimum(0) - self.exportProgress.setMaximum(nItems) - self.exportProgress.setValue(0) - - if not wNovel and not wNotes: - self.exportStatus.setText("Nothing to export ...") - return False - - outFile = None - if eFormat == GuiExportMain.FMT_TXT: - outFile = TextFile(self.theProject, self.theParent) - elif eFormat == GuiExportMain.FMT_MD: - outFile = MarkdownFile(self.theProject, self.theParent) - elif eFormat == GuiExportMain.FMT_HTML: - outFile = HtmlFile(self.theProject, self.theParent) - elif eFormat == GuiExportMain.FMT_TEX: - outFile = LaTeXFile(self.theProject, self.theParent) - elif eFormat == GuiExportMain.FMT_NWD: - outFile = ConcatFile(self.theProject, self.theParent) - elif eFormat == GuiExportMain.FMT_PDOC: - if tFormat == "html": - outFile = HtmlFile(self.theProject, self.theParent) - elif tFormat == "markdown": - outFile = MarkdownFile(self.theProject, self.theParent) - - if outFile is None: - return False - - if outFile.openFile(saveTo): - outFile.setComments(wComments) - outFile.setKeywords(wKeywords) - outFile.setExportNovel(wNovel) - outFile.setExportNotes(wNotes) - outFile.setWordWrap(fixWidth) - outFile.setChapterFormat(chFormat) - outFile.setUnNumberedFormat(unFormat) - outFile.setSceneFormat(scFormat, hScene) - outFile.setSectionFormat(seFormat, hSection) - else: - self.exportStatus.setText("Failed to open file for writing ...") - return False - - time.sleep(0.5) - - nDone = 0 - for tItem in self.theProject.projTree: - - self.exportProgress.setValue(nDone) - self.exportStatus.setText("Exporting: %s" % tItem.itemName) - logger.verbose("Exporting: %s" % tItem.itemName) - - if tItem is not None and tItem.itemType == nwItemType.FILE: - outFile.addText(tItem.itemHandle) - - nDone += 1 - - outFile.closeFile() - self.exportProgress.setValue(nDone) - self.exportStatus.setText("Export to %s complete" % outFile.fileName) - logger.verbose("Export to %s complete" % outFile.fileName) - - if eFormat == GuiExportMain.FMT_TEX: - # Check that encoding was successful - if outFile.texCodecFail: - self.theParent.makeAlert(( - "Failed to escape unicode characters while writing LaTeX " - "file. The generated .tex file may not build properly. " - "Make sure the python package '{package:s}' is installed " - "and working." - ).format( - package = packageRefURL("latexcodec") - ), nwAlert.WARN) - - if eFormat != GuiExportMain.FMT_PDOC: - return True - - # If we've reached this point, we're also running Pandoc - - if self._callPandoc(saveTo, tFormat, pFormat): - self.exportProgress.setValue(nItems) - self.exportStatus.setText("Pandoc conversion complete") - logger.verbose("Pandoc conversion complete") - else: - self.exportProgress.setValue(nItems) - self.exportStatus.setText("Pandoc conversion failed") - logger.verbose("Pandoc conversion failed") - return False - - return True - - def _callPandoc(self, inFile, inFmt, outFmt): - - pFmt = { - GuiExportPandoc.FMT_ODT : "odt", - GuiExportPandoc.FMT_DOCX : "docx", - GuiExportPandoc.FMT_EPUB2 : "epub2", - GuiExportPandoc.FMT_EPUB3 : "epub3", - GuiExportPandoc.FMT_ZIM : "zimwiki", - } - - try: - import pypandoc - except: - self.theParent.makeAlert(( - "Could not load the '{package:s}' package. " - "Make sure it is installed, and try again." - ).format( - package = packageRefURL("pypandoc") - ), nwAlert.ERROR) - return False - - outFile = path.splitext(inFile)[0]+GuiExportPandoc.FMT_EXT[outFmt] - fileName = path.basename(outFile) - - if path.isfile(outFile) and self.mainConf.showGUI: - msgBox = QMessageBox() - msgRes = msgBox.question( - self.theParent, "Overwrite", - ("File '%s' already exists.
Do you want to overwrite it?" % fileName) - ) - if msgRes != QMessageBox.Yes: - return False - - try: - pypandoc.convert_file( - source_file = inFile, - format = inFmt, - outputfile = outFile, - to = pFmt[outFmt], - extra_args = (), - encoding = "utf-8", - filters = None - ) - except Exception as e: - self.theParent.makeAlert( - ["Failed to convert file using pypandoc + Pandoc.", - str(e)], nwAlert.ERROR - ) - return False - - return True - - def _doClose(self): - - logger.verbose("GuiExport close button clicked") - - # General Settings - wNovel = self.tabMain.expNovel.isChecked() - wNotes = self.tabMain.expNotes.isChecked() - eFormat = self.tabMain.outputFormat.currentData() - fixWidth = self.tabMain.fixedWidth.value() - wComments = self.tabMain.expComments.isChecked() - wKeywords = self.tabMain.expKeywords.isChecked() - chFormat = self.tabMain.chapterFormat.text() - unFormat = self.tabMain.unnumFormat.text() - scFormat = self.tabMain.sceneFormat.text() - seFormat = self.tabMain.sectionFormat.text() - saveTo = self.tabMain.exportPath.text() - hScene = self.tabMain.hideScene.isChecked() - hSection = self.tabMain.hideSection.isChecked() - - if saveTo.startswith("~"): - saveTo = path.expanduser(saveTo) - - self.optState.setValue("GuiExport", "wNovel", wNovel) - self.optState.setValue("GuiExport", "wNotes", wNotes) - self.optState.setValue("GuiExport", "eFormat", eFormat) - self.optState.setValue("GuiExport", "fixWidth", fixWidth) - self.optState.setValue("GuiExport", "wComments", wComments) - self.optState.setValue("GuiExport", "wKeywords", wKeywords) - self.optState.setValue("GuiExport", "chFormat", chFormat) - self.optState.setValue("GuiExport", "unFormat", unFormat) - self.optState.setValue("GuiExport", "scFormat", scFormat) - self.optState.setValue("GuiExport", "seFormat", seFormat) - self.optState.setValue("GuiExport", "saveTo", saveTo) - self.optState.setValue("GuiExport", "hScene", hScene) - self.optState.setValue("GuiExport", "hSection", hSection) - - # Pandoc Settings - pFormat = self.tabPandoc.outputFormat.currentData() - - self.optState.setValue("GuiExport", "pFormat", pFormat) - - self.optState.saveSettings() - self.close() - - return - -# END Class GuiExport - -class GuiExportMain(QWidget): - - FMT_NWD = 1 # novelWriter markdown - FMT_TXT = 2 # Plain text file - FMT_MD = 3 # Markdown file - FMT_HTML = 4 # HTML file - FMT_TEX = 5 # LaTeX file - FMT_PDOC = 6 # Pass to pandoc - FMT_EXT = { - FMT_NWD : ".nwd", - FMT_TXT : ".txt", - FMT_MD : ".md", - FMT_HTML : ".htm", - FMT_TEX : ".tex", - FMT_PDOC : ".tmp", - } - FMT_HELP = { - FMT_NWD : ( - "Exports a document using the novelWriter markdown format. " - "The files selected by the filters are appended as-is, " - "including comments and other settings." - ), - FMT_TXT : ( - "Exports a plain text file. All formatting is stripped and " - "comments are in square brackets." - ), - FMT_MD : ( - "Exports a standard markdown file. Comments are converted " - "to preformatted text blocks." - ), - FMT_HTML : ( - "Exports a plain html5 file. Comments are wrapped in " - "blocks with a yellow background colour." - ), - FMT_TEX : ( - "Exports a LaTeX file that can be compiled to PDF using " - "for instance PDFLaTeX. Comments are exported as LaTeX " - "comments." - ), - FMT_PDOC : ( - "Exports first to markdown or html5. The file is then " - "passed on to Pandoc for a second stage. Use the Pandoc " - "tab for settings up the conversion." - ), - } - - def __init__(self, theParent, theProject): - QWidget.__init__(self, theParent) - - self.theParent = theParent - self.theProject = theProject - self.theTheme = theParent.theTheme - self.outerBox = QGridLayout() - self.optState = self.theProject.optState - self.currFormat = self.FMT_TXT - - # Select Files - self.guiFiles = QGroupBox("Selection", self) - self.guiFilesForm = QGridLayout(self) - self.guiFiles.setLayout(self.guiFilesForm) - - self.expNovel = QCheckBox("Novel files",self) - self.expNovel.setChecked( - self.optState.getBool("GuiExport", "wNovel", True) - ) - self.expNovel.setToolTip("Include all novel files in the exported document") - - self.expNotes = QCheckBox("Note files",self) - self.expNotes.setChecked( - self.optState.getBool("GuiExport", "wNotes", False) - ) - self.expNotes.setToolTip("Include all note files in the exported document") - - self.expComments = QCheckBox("Comments",self) - self.expComments.setChecked( - self.optState.getBool("GuiExport", "wComments", False) - ) - self.expComments.setToolTip("Export comments from all files") - - self.expKeywords = QCheckBox("Keywords",self) - self.expKeywords.setChecked( - self.optState.getBool("GuiExport", "wKeywords", False) - ) - self.expKeywords.setToolTip("Export @keywords from all files") - - self.guiFilesForm.addWidget(self.expNovel, 0, 1) - self.guiFilesForm.addWidget(self.expComments, 0, 2) - self.guiFilesForm.addWidget(self.expNotes, 1, 1) - self.guiFilesForm.addWidget(self.expKeywords, 1, 2) - self.guiFilesForm.setRowStretch(2, 1) - - # Chapter Settings - self.guiChapters = QGroupBox("Chapter Headings", self) - self.guiChaptersForm = QGridLayout(self) - self.guiChapters.setLayout(self.guiChaptersForm) - - self.chapterFormat = QLineEdit() - self.chapterFormat.setMaxLength(200) - self.chapterFormat.setText( - self.optState.getString("GuiExport", "chFormat", "Chapter %numword%") - ) - self.chapterFormat.setToolTip("Available formats: %num%, %numword%, %title%") - self.chapterFormat.setMinimumWidth(250) - - self.unnumFormat = QLineEdit() - self.unnumFormat.setMaxLength(200) - self.unnumFormat.setText( - self.optState.getString("GuiExport", "unFormat", "%title%") - ) - self.unnumFormat.setToolTip("Available formats: %title%") - self.unnumFormat.setMinimumWidth(250) - - self.guiChaptersForm.addWidget(QLabel("Numbered"), 0, 0) - self.guiChaptersForm.addWidget(self.chapterFormat, 0, 1) - self.guiChaptersForm.addWidget(QLabel("Unnumbered"), 1, 0) - self.guiChaptersForm.addWidget(self.unnumFormat, 1, 1) - - # Scene and Section Settings - self.guiScenes = QGroupBox("Other Headings", self) - self.guiScenesForm = QGridLayout(self) - self.guiScenes.setLayout(self.guiScenesForm) - - self.sceneFormat = QLineEdit() - self.sceneFormat.setMaxLength(200) - self.sceneFormat.setText( - self.optState.getString("GuiExport", "scFormat", "* * *") - ) - self.sceneFormat.setToolTip("Available formats: %title%") - self.sceneFormat.setMinimumWidth(100) - - self.sectionFormat = QLineEdit() - self.sectionFormat.setMaxLength(200) - self.sectionFormat.setText( - self.optState.getString("GuiExport", "seFormat", "") - ) - self.sectionFormat.setToolTip("Available formats: %title%") - self.sectionFormat.setMinimumWidth(100) - - self.hideScene = QCheckBox("Skip",self) - self.hideScene.setChecked( - self.optState.getBool("GuiExport", "hScene", False) - ) - self.hideScene.setToolTip("Skip scene titles in export") - - self.hideSection = QCheckBox("Skip",self) - self.hideSection.setChecked( - self.optState.getBool("GuiExport", "hSection", False) - ) - self.hideSection.setToolTip("Skip section titles in export") - - self.guiScenesForm.addWidget(QLabel("Scenes"), 0, 0) - self.guiScenesForm.addWidget(self.sceneFormat, 0, 1) - self.guiScenesForm.addWidget(self.hideScene, 0, 2) - self.guiScenesForm.addWidget(QLabel("Sections"), 1, 0) - self.guiScenesForm.addWidget(self.sectionFormat, 1, 1) - self.guiScenesForm.addWidget(self.hideSection, 1, 2) - - # Output Path - self.exportTo = QGroupBox("Export Folder", self) - self.exportToForm = QGridLayout(self) - self.exportTo.setLayout(self.exportToForm) - - self.exportPath = QLineEdit( - self.optState.getString("GuiExport", "saveTo", "") - ) - self.exportGetPath = QPushButton(self.theTheme.getIcon("folder"),"") - self.exportGetPath.clicked.connect(self._exportFolder) - - self.exportToForm.addWidget(QLabel("Save to"), 0, 0) - self.exportToForm.addWidget(self.exportPath, 0, 1) - self.exportToForm.addWidget(self.exportGetPath, 0, 2) - - # Output Format - self.guiOutput = QGroupBox("Export", self) - self.guiOutputForm = QGridLayout(self) - self.guiOutput.setLayout(self.guiOutputForm) - - self.outputHelp = QLabel("") - self.outputHelp.setWordWrap(True) - self.outputHelp.setMinimumHeight(55) - self.outputHelp.setAlignment(Qt.AlignTop) - - self.outputFormat = QComboBox(self) - self.outputFormat.addItem("novelWriter Markdown (.nwd)", self.FMT_NWD) - self.outputFormat.addItem("Plain Text (.txt)", self.FMT_TXT) - self.outputFormat.addItem("Markdown (.md)", self.FMT_MD) - self.outputFormat.addItem("HTML5 (.htm)", self.FMT_HTML) - self.outputFormat.addItem("LaTeX for PDF (.tex)", self.FMT_TEX) - self.outputFormat.addItem("Pandoc via Markdown or HTML", self.FMT_PDOC) - self.outputFormat.currentIndexChanged.connect(self._updateFormat) - - optIdx = self.outputFormat.findData( - self.optState.getInt("GuiExport", "eFormat", 1) - ) - if optIdx == -1: - self.outputFormat.setCurrentIndex(1) - self._updateFormat(1) - else: - self.outputFormat.setCurrentIndex(optIdx) - self._updateFormat(optIdx) - - self.guiOutputForm.addWidget(QLabel("Format"), 0, 0) - self.guiOutputForm.addWidget(self.outputFormat, 0, 1) - self.guiOutputForm.addWidget(self.outputHelp, 1, 0, 1, 3) - self.guiOutputForm.setColumnStretch(2, 1) - - # Additional Settings - self.addSettings = QGroupBox("Additional Settings (Format Dependent)", self) - self.addSettingsForm = QGridLayout(self) - self.addSettings.setLayout(self.addSettingsForm) - - self.fixedWidth = QSpinBox(self) - self.fixedWidth.setMinimum(0) - self.fixedWidth.setMaximum(999) - self.fixedWidth.setSingleStep(1) - self.fixedWidth.setValue( - self.optState.getInt("GuiExport", "fixWidth", 80) - ) - self.fixedWidth.setToolTip( - "Applies to .txt and .md files. A value of '0' disables the feature." - ) - - self.addSettingsForm.addWidget(QLabel("Fixed width"), 0, 0) - self.addSettingsForm.addWidget(self.fixedWidth, 0, 1) - self.addSettingsForm.setColumnStretch(2, 1) - - # Assemble - self.outerBox.addWidget(self.guiOutput, 0, 0, 1, 2) - self.outerBox.addWidget(self.guiFiles, 0, 2) - self.outerBox.addWidget(self.guiChapters, 1, 0, 1, 2) - self.outerBox.addWidget(self.guiScenes, 1, 2) - self.outerBox.addWidget(self.addSettings, 2, 0, 1, 3) - self.outerBox.addWidget(self.exportTo, 3, 0, 1, 3) - self.outerBox.setColumnStretch(0, 1) - self.outerBox.setColumnStretch(1, 1) - self.outerBox.setColumnStretch(2, 1) - self.setLayout(self.outerBox) - - return - - ## - # Internal Functions - ## - - def _updateFormat(self, currIdx): - """Update help text under output format selection and file - extension in file box - """ - if currIdx == -1: - self.outputHelp.setText("") - else: - self.currFormat = self.outputFormat.itemData(currIdx) - self.outputHelp.setText("%s" % self.FMT_HELP[self.currFormat]) - self._checkFileExtension() - return - - def _exportFolder(self): - - currDir = self.exportPath.text() - if not path.isdir(currDir): - currDir = "" - - extFilter = [ - "novelWriter document files (*.nwd)", - "Text files (*.txt)", - "Markdown files (*.md)", - "HTML files (*.htm *.html)", - "LaTeX files (*.tex)", - "All files (*.*)", - ] - - dlgOpt = QFileDialog.Options() - dlgOpt |= QFileDialog.DontUseNativeDialog - saveTo = QFileDialog.getSaveFileName( - self, "Export File", self.exportPath.text(), - options=dlgOpt, filter=";;".join(extFilter) - ) - if saveTo: - self.exportPath.setText(saveTo[0]) - self._checkFileExtension() - return True - - return False - - def _checkFileExtension(self): - saveTo = self.exportPath.text() - if saveTo.startswith("~"): - saveTo = path.expanduser(saveTo) - fileBits = path.splitext(saveTo) - if self.currFormat > 0 and fileBits[0].strip() != "": - saveTo = fileBits[0]+self.FMT_EXT[self.currFormat] - self.exportPath.setText(saveTo) - return - -# END Class GuiExportMain - -class GuiExportPandoc(QWidget): - - FMT_ODT = 1 - FMT_DOCX = 2 - FMT_EPUB2 = 4 - FMT_EPUB3 = 5 - FMT_ZIM = 6 - FMT_EXT = { - FMT_ODT : ".odt", - FMT_DOCX : ".docx", - FMT_EPUB2 : ".epub", - FMT_EPUB3 : ".epub", - FMT_ZIM : ".txt", - } - FMT_VIA = { - FMT_ODT : "html", - FMT_DOCX : "html", - FMT_EPUB2 : "markdown", - FMT_EPUB3 : "markdown", - FMT_ZIM : "markdown", - } - - def __init__(self, theParent, theProject): - QWidget.__init__(self, theParent) - - self.theParent = theParent - self.theProject = theProject - self.outerBox = QGridLayout() - self.optState = self.theProject.optState - - try: - import pypandoc - self.hasPyPan = True - except: - self.hasPyPan = False - - # Information - self.guiInfo = QGroupBox("Information", self) - self.guiInfoBox = QVBoxLayout(self) - self.guiInfo.setLayout(self.guiInfoBox) - - self.infoHelp = QLabel("") - self.infoHelp.setWordWrap(True) - self.infoHelp.setMinimumHeight(55) - self.infoHelp.setAlignment(Qt.AlignTop) - - self.guiInfoBox.addWidget(self.infoHelp) - - if self.hasPyPan: - self.infoHelp.setText(( - "Additional export to other document formats than in the Settings tab is provided " - "by Pandoc. the project is first exported to Markdown or HTML, depending on final " - "format, and then processed by Pandoc into the desired format." - )) - else: - self.infoHelp.setText(( - "The Python package 'pypandoc' is not installed or isn't working. This package is " - "required for interfacing with Pandoc. Please install it before proceeding." - )) - - # Output Format - self.guiOutput = QGroupBox("Pandoc Format", self) - self.guiOutputForm = QGridLayout(self) - self.guiOutput.setLayout(self.guiOutputForm) - - self.outputFormat = QComboBox(self) - self.outputFormat.addItem("Open Office Document (.odt)", self.FMT_ODT) - self.outputFormat.addItem("Word Document (.docx)", self.FMT_DOCX) - self.outputFormat.addItem("ePUB eBook v2 (.epub2)", self.FMT_EPUB2) - self.outputFormat.addItem("ePUB eBook v3 (.epub3)", self.FMT_EPUB3) - self.outputFormat.addItem("Zim Wiki (.txt)", self.FMT_ZIM) - - optIdx = self.outputFormat.findData( - self.optState.getInt("GuiExport", "pFormat", 1) - ) - if optIdx == -1: - self.outputFormat.setCurrentIndex(1) - else: - self.outputFormat.setCurrentIndex(optIdx) - - self.guiOutputForm.addWidget(QLabel("Format"), 0, 0) - self.guiOutputForm.addWidget(self.outputFormat, 0, 1) - self.guiOutputForm.setColumnStretch(2, 1) - - # Assemble - self.outerBox.addWidget(self.guiInfo, 0, 0) - self.outerBox.addWidget(self.guiOutput, 1, 0) - self.outerBox.setRowStretch(2, 1) - self.setLayout(self.outerBox) - - return - -# END Class GuiExportPandoc diff --git a/requirements.txt b/requirements.txt index 648be38e..08fc42c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,3 @@ pyqt5 lxml pyenchant -latexcodec -pypandoc