diff --git a/nw/convert/textfile.py b/nw/convert/textfile.py index 08d5addf..c7bed1ab 100644 --- a/nw/convert/textfile.py +++ b/nw/convert/textfile.py @@ -94,6 +94,9 @@ class TextFile(): self._doOpenFile(filePath) + if self.outFile is None: + return False + return True def closeFile(self): @@ -125,7 +128,7 @@ class TextFile(): if self.winEnding: self.theConv.windowsEndings() - if self.theConv.theResult is not None: + if self.theConv.theResult is not None and self.outFile is not None: self.outFile.write(self.theConv.theResult) return True @@ -140,6 +143,10 @@ class TextFile(): """ try: self.outFile = open(filePath,mode="w+") + if self.winEnding: + self.outFile.write("\r\n\r\n") + else: + self.outFile.write("\n\n") except Exception as e: self.makeAlert(["Failed to open file.",str(e)], nwAlert.ERROR) return False @@ -149,7 +156,8 @@ class TextFile(): """This function closes a file, and is meant to be overloaded by the subclass for other file formats. """ - self.outFile.close() + if self.outFile is not None: + self.outFile.close() return True # END Class OutFile diff --git a/nw/convert/tokenizer.py b/nw/convert/tokenizer.py index 6b82d2f7..50166e27 100644 --- a/nw/convert/tokenizer.py +++ b/nw/convert/tokenizer.py @@ -221,7 +221,9 @@ class Tokenizer(): elif tType == self.T_HEAD3: tTemp = self._doFormatScene(tText) - if tTemp == self.fmtScene: + if tTemp == "": + self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) + elif tTemp == self.fmtScene: if self.firstScene: self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) else: @@ -231,10 +233,10 @@ class Tokenizer(): self.firstScene = False elif tType == self.T_HEAD4: - if self.noSection: + tTemp = self._doFormatSection(tText) + if tTemp == "": self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) else: - tTemp = self._doFormatSection(tText) self.theTokens[n] = (self.T_SEP,tTemp,None,self.A_LEFT) # For title page and partitions, we need to centre all text diff --git a/nw/gui/export.py b/nw/gui/export.py index f393d91e..c7dcf7d5 100644 --- a/nw/gui/export.py +++ b/nw/gui/export.py @@ -120,10 +120,13 @@ class GuiExport(QDialog): if outFile is None: return False - outFile.openFile(saveTo,"testfile") - outFile.setComments(wComments) - outFile.setExportNovel(wNovel) - outFile.setExportNotes(wNotes) + if outFile.openFile(saveTo,"testfile"): + outFile.setComments(wComments) + outFile.setExportNovel(wNovel) + outFile.setExportNotes(wNotes) + else: + self.exportStatus.setText("Failed to open file for writing ...") + return False nDone = 0 for tHandle in self.theProject.treeOrder: @@ -233,9 +236,9 @@ class GuiExportMain(QWidget): self.expNovel.setToolTip("Include all novel files in the exported document") self.expNotes.setToolTip("Include all note files in the exported document") self.expTOC.setToolTip("Generate a Table of Contents (ToC)") - self.expNovel.setChecked(self.optState.wNovel()) - self.expNotes.setChecked(self.optState.wNotes()) - self.expTOC.setChecked(self.optState.wTOC()) + self.expNovel.setChecked(self.optState.getSetting("wNovel")) + self.expNotes.setChecked(self.optState.getSetting("wNotes")) + self.expTOC.setChecked(self.optState.getSetting("wTOC")) self.guiFilesForm.addWidget(QLabel("Novel files"), 0, 0) self.guiFilesForm.addWidget(self.expNovel, 0, 1) @@ -245,16 +248,16 @@ class GuiExportMain(QWidget): self.guiFilesForm.addWidget(self.expTOC, 2, 1) # Chapter Settings - self.guiChapters = QGroupBox("Chapters", self) + self.guiChapters = QGroupBox("Chapter Heading", self) self.guiChaptersForm = QGridLayout(self) self.guiChapters.setLayout(self.guiChaptersForm) self.chapterFormat = QLineEdit() - self.chapterFormat.setText(self.optState.chFormat()) + self.chapterFormat.setText(self.optState.getSetting("chFormat")) self.chapterFormat.setToolTip("Available formats: %num%, %numword%, %title%, %label%") self.chapterFormat.setMinimumWidth(250) - self.guiChaptersForm.addWidget(QLabel("Format"), 0, 0) + self.guiChaptersForm.addWidget(QLabel("Numbered"), 0, 0) self.guiChaptersForm.addWidget(self.chapterFormat, 0, 1) # Output Format @@ -263,7 +266,7 @@ class GuiExportMain(QWidget): self.guiOutput.setLayout(self.guiOutputForm) self.outputComments = QCheckBox("include comments", self) - self.outputComments.setChecked(self.optState.wComments()) + self.outputComments.setChecked(self.optState.getSetting("wComments")) self.outputHelp = QLabel("") self.outputHelp.setWordWrap(True) @@ -279,7 +282,7 @@ class GuiExportMain(QWidget): # self.outputFormat.addItem("LaTeX (PDF)", self.FMT_TEX) self.outputFormat.currentIndexChanged.connect(self._updateFormatHelp) - optIdx = self.outputFormat.findData(self.optState.eFormat()) + optIdx = self.outputFormat.findData(self.optState.getSetting("eFormat")) if optIdx != -1: self.outputFormat.setCurrentIndex(optIdx) self._updateFormatHelp(optIdx) @@ -296,7 +299,7 @@ class GuiExportMain(QWidget): self.guiScenes.setLayout(self.guiScenesForm) self.sceneFormat = QLineEdit() - self.sceneFormat.setText(self.optState.scFormat()) + self.sceneFormat.setText(self.optState.getSetting("scFormat")) self.sceneFormat.setToolTip("Available formats: %title%") self.sceneFormat.setMinimumWidth(100) @@ -308,7 +311,7 @@ class GuiExportMain(QWidget): self.exportToForm = QGridLayout(self) self.exportTo.setLayout(self.exportToForm) - self.exportPath = QLineEdit(self.optState.saveTo()) + self.exportPath = QLineEdit(self.optState.getSetting("saveTo")) self.exportGetPath = QPushButton(self.theTheme.getIcon("folder"),"") self.exportGetPath.clicked.connect(self._exportFolder) @@ -368,7 +371,6 @@ class GuiExportMain(QWidget): class ExportLastState(): def __init__(self, theProject): - self.theProject = theProject self.theState = { "wNovel" : True, @@ -377,15 +379,18 @@ class ExportLastState(): "eFormat" : 2, "wComments" : False, "chFormat" : "Chapter %numword%", + "unFormat" : "%title%", "scFormat" : "* * *", + "seFormat" : "", "saveTo" : "", } + self.stringOpt = ("chFormat","unFormat","scFormat","seFormat","saveTo") + self.boolOpt = ("wNovel","wNotes","wTOC","wComments") + self.intOpt = ("eFormat") self.loadSettings() - return def loadSettings(self): - stateFile = path.join(self.theProject.projMeta, nwFiles.EXPORT_OPT) if path.isfile(stateFile): logger.debug("Loading export options file") @@ -397,11 +402,9 @@ class ExportLastState(): logger.error("Failed to load export options file") logger.error(str(e)) return False - return True def saveSettings(self): - stateFile = path.join(self.theProject.projMeta, nwFiles.EXPORT_OPT) logger.debug("Saving export options file") try: @@ -411,7 +414,6 @@ class ExportLastState(): logger.error("Failed to save export options file") logger.error(str(e)) return False - return True def setSetting(self, setName, setValue): @@ -421,28 +423,13 @@ class ExportLastState(): return False return True - def wNovel(self): - return checkBool(self.theState["wNovel"],False,False) - - def wNotes(self): - return checkBool(self.theState["wNotes"],False,False) - - def wTOC(self): - return checkBool(self.theState["wTOC"],False,False) - - def eFormat(self): - return checkInt(self.theState["eFormat"],1,False) - - def wComments(self): - return checkBool(self.theState["wComments"],False,False) - - def chFormat(self): - return checkString(self.theState["chFormat"],"Chapter %numword%",False) - - def scFormat(self): - return checkString(self.theState["scFormat"],"* * *",False) - - def saveTo(self): - return checkString(self.theState["saveTo"],"",False) + def getSetting(self, setName): + if setName in self.stringOpt: + return checkString(self.theState[setName],self.theState[setName],False) + elif setName in self.boolOpt: + return checkBool(self.theState[setName],self.theState[setName],False) + elif setName in self.intOpt: + return checkInt(self.theState[setName],self.theState[setName],False) + return None # END Class ExportLastState