diff --git a/nw/common.py b/nw/common.py index ada29987..8aa0a0f0 100644 --- a/nw/common.py +++ b/nw/common.py @@ -17,16 +17,20 @@ logger = logging.getLogger(__name__) def checkString(checkValue, defaultValue, allowNone=False): if allowNone: - if checkValue == None: return None - if checkValue == "None": return None + if checkValue == None: + return None + if checkValue == "None": + return None if isinstance(checkValue,str): return str(checkValue) return defaultValue def checkInt(checkValue, defaultValue, allowNone=False): if allowNone: - if checkValue == None: return None - if checkValue == "None": return None + if checkValue == None: + return None + if checkValue == "None": + return None try: return int(checkValue) except: @@ -34,8 +38,10 @@ def checkInt(checkValue, defaultValue, allowNone=False): def checkBool(checkValue, defaultValue, allowNone=False): if allowNone: - if checkValue == None: return None - if checkValue == "None": return None + if checkValue == None: + return None + if checkValue == "None": + return None if isinstance(checkValue, str): if checkValue == "True": return True @@ -92,8 +98,8 @@ def splitVersionNumber(vString): vPatch = 0 vInt = 0 - vBits = vString.split(".") - nBits = len(vBits) + vBits = vString.split(".") + nBits = len(vBits) if nBits > 0: vMajor = checkInt(vBits[0],0) diff --git a/nw/config.py b/nw/config.py index a47e7c24..5a50395e 100644 --- a/nw/config.py +++ b/nw/config.py @@ -15,15 +15,15 @@ import configparser import sys import nw -from os import path, mkdir, makedirs, getcwd -from appdirs import user_config_dir -from datetime import datetime +from os import path, mkdir, makedirs, getcwd +from appdirs import user_config_dir +from datetime import datetime + +from PyQt5.Qt import PYQT_VERSION_STR +from PyQt5.QtCore import QT_VERSION_STR from nw.constants import nwFiles, nwUnicode -from nw.common import splitVersionNumber - -from PyQt5.Qt import PYQT_VERSION_STR -from PyQt5.QtCore import QT_VERSION_STR +from nw.common import splitVersionNumber logger = logging.getLogger(__name__) @@ -59,8 +59,8 @@ class Config: self.confChanged = False ## General - self.guiTheme = "default" - self.guiSyntax = "default_light" + self.guiTheme = "default" + self.guiSyntax = "default_light" ## Sizes self.winGeometry = [1100, 650] diff --git a/nw/convert/file/concat.py b/nw/convert/file/concat.py index 392e86f9..6aedb857 100644 --- a/nw/convert/file/concat.py +++ b/nw/convert/file/concat.py @@ -13,12 +13,13 @@ import logging import nw -from os import path +from os import path + from PyQt5.QtWidgets import QMessageBox from nw.convert.file.text import TextFile from nw.convert.tokenizer import Tokenizer -from nw.enum import nwAlert, nwItemLayout +from nw.enum import nwAlert, nwItemLayout logger = logging.getLogger(__name__) @@ -26,9 +27,7 @@ class ConcatFile(TextFile): def __init__(self, theProject, theParent): TextFile.__init__(self, theProject, theParent) - self.theConv = Tokenizer(self.theProject, self.theParent) - return def addText(self, tHandle): diff --git a/nw/convert/file/html.py b/nw/convert/file/html.py index 1dc89b39..084789d6 100644 --- a/nw/convert/file/html.py +++ b/nw/convert/file/html.py @@ -13,9 +13,9 @@ import logging import nw -from nw.convert.file.text import TextFile +from nw.convert.file.text import TextFile from nw.convert.text.tohtml import ToHtml -from nw.enum import nwAlert +from nw.enum import nwAlert logger = logging.getLogger(__name__) @@ -23,9 +23,7 @@ class HtmlFile(TextFile): def __init__(self, theProject, theParent): TextFile.__init__(self, theProject, theParent) - self.theConv = ToHtml(self.theProject, self.theParent) - return ## diff --git a/nw/convert/file/latex.py b/nw/convert/file/latex.py index a61d3a68..6a8617fd 100644 --- a/nw/convert/file/latex.py +++ b/nw/convert/file/latex.py @@ -13,9 +13,9 @@ import logging import nw -from nw.convert.file.text import TextFile +from nw.convert.file.text import TextFile from nw.convert.text.tolatex import ToLaTeX -from nw.enum import nwAlert +from nw.enum import nwAlert logger = logging.getLogger(__name__) @@ -32,7 +32,6 @@ class LaTeXFile(TextFile): ## def _doOpenFile(self, filePath): - try: self.outFile = open(filePath,mode="wt+",encoding="utf8") self.outFile.write("\\documentclass[12pt]{report}\n") @@ -43,17 +42,13 @@ class LaTeXFile(TextFile): except Exception as e: self.makeAlert(["Failed to open file.",str(e)], nwAlert.ERROR) return False - return True def _doCloseFile(self): - if self.outFile is not None: self.outFile.write("\\end{document}\n") self.outFile.close() - self.texCodecFail = self.theConv.texCodecFail - return True # END Class LaTeXFile diff --git a/nw/convert/file/markdown.py b/nw/convert/file/markdown.py index 360f1a64..fc96ac4f 100644 --- a/nw/convert/file/markdown.py +++ b/nw/convert/file/markdown.py @@ -13,9 +13,9 @@ import logging import nw -from nw.convert.file.text import TextFile +from nw.convert.file.text import TextFile from nw.convert.text.tomarkdown import ToMarkdown -from nw.enum import nwAlert +from nw.enum import nwAlert logger = logging.getLogger(__name__) @@ -23,9 +23,7 @@ class MarkdownFile(TextFile): def __init__(self, theProject, theParent): TextFile.__init__(self, theProject, theParent) - self.theConv = ToMarkdown(self.theProject, self.theParent) - return ## diff --git a/nw/convert/file/text.py b/nw/convert/file/text.py index 0925515b..cc842422 100644 --- a/nw/convert/file/text.py +++ b/nw/convert/file/text.py @@ -13,11 +13,12 @@ import logging import nw -from os import path +from os import path + from PyQt5.QtWidgets import QMessageBox from nw.convert.text.totext import ToText -from nw.enum import nwAlert, nwItemType, nwItemLayout, nwItemClass +from nw.enum import nwAlert, nwItemType, nwItemLayout, nwItemClass logger = logging.getLogger(__name__) @@ -29,14 +30,14 @@ class TextFile(): self.theProject = theProject self.theParent = theParent - self.outFile = None - self.fileName = "" - self.theText = "" - self.expNovel = True - self.expNotes = False + self.outFile = None + self.fileName = "" + self.theText = "" + self.expNovel = True + self.expNotes = False - self.theConv = ToText(self.theProject, self.theParent) - self.makeAlert = self.theParent.makeAlert + self.theConv = ToText(self.theProject, self.theParent) + self.makeAlert = self.theParent.makeAlert self.setComments(False) self.setKeywords(False) diff --git a/nw/convert/text/tohtml.py b/nw/convert/text/tohtml.py index 4abdeeb3..ca56c87a 100644 --- a/nw/convert/text/tohtml.py +++ b/nw/convert/text/tohtml.py @@ -15,7 +15,7 @@ import re import nw from nw.convert.tokenizer import Tokenizer -from nw.constants import nwUnicode, nwLabels +from nw.constants import nwUnicode, nwLabels logger = logging.getLogger(__name__) @@ -31,12 +31,10 @@ class ToHtml(Tokenizer): need to make a few changes to formatting, which is selected by this flag. """ - self.forPreview = forPreview if forPreview: self.doKeywords = True self.doComments = doComments - return def doAutoReplace(self): diff --git a/nw/convert/text/tolatex.py b/nw/convert/text/tolatex.py index e68cd3b2..630fd405 100644 --- a/nw/convert/text/tolatex.py +++ b/nw/convert/text/tolatex.py @@ -16,7 +16,7 @@ import re import nw from nw.convert.tokenizer import Tokenizer -from nw.constants import nwUnicode +from nw.constants import nwUnicode logger = logging.getLogger(__name__) diff --git a/nw/convert/text/totext.py b/nw/convert/text/totext.py index e7fdb9d2..fa528199 100644 --- a/nw/convert/text/totext.py +++ b/nw/convert/text/totext.py @@ -16,7 +16,7 @@ import re import nw from nw.convert.tokenizer import Tokenizer -from nw.constants import nwUnicode +from nw.constants import nwUnicode logger = logging.getLogger(__name__) diff --git a/nw/convert/tokenizer.py b/nw/convert/tokenizer.py index e391aab7..44bcc6c7 100644 --- a/nw/convert/tokenizer.py +++ b/nw/convert/tokenizer.py @@ -15,12 +15,12 @@ import logging import re import nw -from operator import itemgetter -from PyQt5.QtCore import QRegularExpression +from operator import itemgetter +from PyQt5.QtCore import QRegularExpression from nw.project.document import NWDoc -from nw.tools.translate import numberToWord -from nw.enum import nwItemLayout +from nw.tools.translate import numberToWord +from nw.enum import nwItemLayout logger = logging.getLogger(__name__) @@ -230,7 +230,8 @@ class Tokenizer(): if isNone: return if isNote: return - # For novel files, we need to handle chapter numbering and scene breaks + # For novel files, we need to handle chapter numbering and scene + # breaks if isBook or isUnNum or isChap or isScene: for n in range(len(self.theTokens)): diff --git a/nw/gui/dialogs/configeditor.py b/nw/gui/dialogs/configeditor.py index fd90ec9a..28f44c80 100644 --- a/nw/gui/dialogs/configeditor.py +++ b/nw/gui/dialogs/configeditor.py @@ -15,15 +15,15 @@ import nw from os import path -from PyQt5.QtCore import Qt, QSize -from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush, QStandardItemModel, QFont -from PyQt5.QtSvg import QSvgWidget +from PyQt5.QtCore import Qt, QSize +from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush, QStandardItemModel, QFont +from PyQt5.QtSvg import QSvgWidget from PyQt5.QtWidgets import ( QDialog, QHBoxLayout, QVBoxLayout, QFormLayout, QLineEdit, QPlainTextEdit, QLabel, QWidget, QTabWidget, QDialogButtonBox, QSpinBox, QGroupBox, QComboBox, QMessageBox, QCheckBox, QGridLayout, QFontComboBox, QPushButton, QFileDialog ) -from nw.enum import nwAlert +from nw.enum import nwAlert from nw.constants import nwQuotes logger = logging.getLogger(__name__) @@ -80,8 +80,8 @@ class GuiConfigEditor(QDialog): logger.verbose("ConfigEditor save button clicked") - validEntries = True - needsRestart = False + validEntries = True + needsRestart = False retA, retB = self.tabMain.saveValues() validEntries &= retA @@ -557,25 +557,33 @@ class GuiConfigEditEditor(QWidget): if self._checkQuoteSymbol(fmtSingleQuotesO): self.mainConf.fmtSingleQuotes[0] = fmtSingleQuotesO else: - self.theParent.makeAlert("Invalid quote symbol: %s" % fmtSingleQuotesO, nwAlert.ERROR) + self.theParent.makeAlert( + "Invalid quote symbol: %s" % fmtSingleQuotesO, nwAlert.ERROR + ) validEntries = False if self._checkQuoteSymbol(fmtSingleQuotesC): self.mainConf.fmtSingleQuotes[1] = fmtSingleQuotesC else: - self.theParent.makeAlert("Invalid quote symbol: %s" % fmtSingleQuotesC, nwAlert.ERROR) + self.theParent.makeAlert( + "Invalid quote symbol: %s" % fmtSingleQuotesC, nwAlert.ERROR + ) validEntries = False if self._checkQuoteSymbol(fmtDoubleQuotesO): self.mainConf.fmtDoubleQuotes[0] = fmtDoubleQuotesO else: - self.theParent.makeAlert("Invalid quote symbol: %s" % fmtDoubleQuotesO, nwAlert.ERROR) + self.theParent.makeAlert( + "Invalid quote symbol: %s" % fmtDoubleQuotesO, nwAlert.ERROR + ) validEntries = False if self._checkQuoteSymbol(fmtDoubleQuotesC): self.mainConf.fmtDoubleQuotes[1] = fmtDoubleQuotesC else: - self.theParent.makeAlert("Invalid quote symbol: %s" % fmtDoubleQuotesC, nwAlert.ERROR) + self.theParent.makeAlert( + "Invalid quote symbol: %s" % fmtDoubleQuotesC, nwAlert.ERROR + ) validEntries = False showTabsNSpaces = self.showTabsNSpaces.isChecked() diff --git a/nw/gui/dialogs/export.py b/nw/gui/dialogs/export.py index ea2eb0bf..cb4bd113 100644 --- a/nw/gui/dialogs/export.py +++ b/nw/gui/dialogs/export.py @@ -16,24 +16,25 @@ import nw from os import path -from PyQt5.QtCore import Qt, QSize -from PyQt5.QtSvg import QSvgWidget +from PyQt5.QtCore import Qt, QSize +from PyQt5.QtSvg import QSvgWidget from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QWidget, QTabWidget, QGridLayout, QGroupBox, QCheckBox, - QLabel, QComboBox, QLineEdit, QPushButton, QFileDialog, QProgressBar, QSpinBox, QMessageBox + QDialog, QHBoxLayout, QVBoxLayout, QWidget, QTabWidget, QGridLayout, + QGroupBox, QCheckBox, QLabel, QComboBox, QLineEdit, QPushButton, + QFileDialog, QProgressBar, QSpinBox, QMessageBox ) -from nw.project.document import NWDoc -from nw.tools.translate import numberToWord -from nw.tools.optlaststate import OptLastState -from nw.convert.file.text import TextFile -from nw.convert.file.html import HtmlFile +from nw.project.document import NWDoc +from nw.tools.translate import numberToWord +from nw.tools.optlaststate import OptLastState +from nw.convert.file.text import TextFile +from nw.convert.file.html import HtmlFile from nw.convert.file.markdown import MarkdownFile -from nw.convert.file.latex import LaTeXFile -from nw.convert.file.concat import ConcatFile -from nw.common import packageRefURL -from nw.constants import nwFiles -from nw.enum import nwItemType, nwAlert +from nw.convert.file.latex import LaTeXFile +from nw.convert.file.concat import ConcatFile +from nw.common import packageRefURL +from nw.constants import nwFiles +from nw.enum import nwItemType, nwAlert logger = logging.getLogger(__name__) @@ -201,9 +202,10 @@ class GuiExport(QDialog): # 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." + "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) @@ -343,27 +345,31 @@ class GuiExportMain(QWidget): } 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." + "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." + "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." + "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." + "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." + "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." + "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." ), } @@ -566,7 +572,8 @@ class GuiExportMain(QWidget): dlgOpt = QFileDialog.Options() dlgOpt |= QFileDialog.DontUseNativeDialog saveTo = QFileDialog.getSaveFileName( - self,"Export File",self.exportPath.text(),options=dlgOpt,filter=";;".join(extFilter) + self, "Export File", self.exportPath.text(), + options=dlgOpt, filter=";;".join(extFilter) ) if saveTo: self.exportPath.setText(saveTo[0]) @@ -658,7 +665,6 @@ class GuiExportPandoc(QWidget): 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) - # self.outputFormat.currentIndexChanged.connect(self._updateFormat) optIdx = self.outputFormat.findData(self.optState.getSetting("pFormat")) if optIdx == -1: @@ -674,9 +680,6 @@ class GuiExportPandoc(QWidget): self.outerBox.addWidget(self.guiInfo, 0, 0) self.outerBox.addWidget(self.guiOutput, 1, 0) self.outerBox.setRowStretch(2, 1) - # self.outerBox.setColumnStretch(0, 1) - # self.outerBox.setColumnStretch(1, 1) - # self.outerBox.setColumnStretch(2, 1) self.setLayout(self.outerBox) return diff --git a/nw/gui/dialogs/itemeditor.py b/nw/gui/dialogs/itemeditor.py index a5bc5fe1..3e771b63 100644 --- a/nw/gui/dialogs/itemeditor.py +++ b/nw/gui/dialogs/itemeditor.py @@ -15,13 +15,14 @@ import nw from os import path -from PyQt5.QtCore import Qt, QSize -from PyQt5.QtSvg import QSvgWidget +from PyQt5.QtCore import Qt, QSize +from PyQt5.QtSvg import QSvgWidget from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QFormLayout, QLineEdit, QPushButton, QComboBox + QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QFormLayout, + QLineEdit, QPushButton, QComboBox ) -from nw.enum import nwItemLayout, nwItemClass, nwItemType +from nw.enum import nwItemLayout, nwItemClass, nwItemType from nw.constants import nwLabels logger = logging.getLogger(__name__) diff --git a/nw/gui/dialogs/projecteditor.py b/nw/gui/dialogs/projecteditor.py index 4909d835..6daecddc 100644 --- a/nw/gui/dialogs/projecteditor.py +++ b/nw/gui/dialogs/projecteditor.py @@ -15,13 +15,14 @@ import nw from os import path -from PyQt5.QtCore import Qt, QSize -from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush, QStandardItemModel -from PyQt5.QtSvg import QSvgWidget +from PyQt5.QtCore import Qt, QSize +from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush, QStandardItemModel +from PyQt5.QtSvg import QSvgWidget from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QFormLayout, QLineEdit, QPlainTextEdit, QLabel, - QWidget, QTabWidget, QDialogButtonBox, QListWidget, QListWidgetItem, QPushButton, - QColorDialog, QAbstractItemView, QTreeWidget, QTreeWidgetItem, QCheckBox + QDialog, QHBoxLayout, QVBoxLayout, QFormLayout, QLineEdit, QPlainTextEdit, + QLabel, QWidget, QTabWidget, QDialogButtonBox, QListWidget, + QListWidgetItem, QPushButton, QColorDialog, QAbstractItemView, QTreeWidget, + QTreeWidgetItem, QCheckBox ) from nw.enum import nwAlert @@ -173,7 +174,7 @@ class GuiProjectEditStatus(QWidget): for iName, iCol, nUse in self.theStatus: self._addItem(iName, iCol, iName, nUse) - self.editName = QLineEdit() + self.editName = QLineEdit() self.editName.setEnabled(False) self.newButton = QPushButton("New") self.delButton = QPushButton("Delete") diff --git a/nw/gui/dialogs/sessionlog.py b/nw/gui/dialogs/sessionlog.py index 0afd21c5..a897039a 100644 --- a/nw/gui/dialogs/sessionlog.py +++ b/nw/gui/dialogs/sessionlog.py @@ -13,18 +13,20 @@ import logging import nw -from os import path -from datetime import datetime -from PyQt5.QtCore import Qt -from PyQt5.QtGui import QIcon, QColor, QPixmap, QFont +from os import path +from datetime import datetime + +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QIcon, QColor, QPixmap, QFont from PyQt5.QtWidgets import ( - QDialog, QVBoxLayout, QHBoxLayout, QTreeWidget, QTreeWidgetItem, QDialogButtonBox, QHeaderView, - QGridLayout, QLabel, QGroupBox, QCheckBox + QDialog, QVBoxLayout, QHBoxLayout, QTreeWidget, QTreeWidgetItem, + QDialogButtonBox, QHeaderView, QGridLayout, QLabel, QGroupBox, + QCheckBox ) from nw.tools.optlaststate import OptLastState -from nw.constants import nwConst, nwFiles -from nw.enum import nwAlert +from nw.constants import nwConst, nwFiles +from nw.enum import nwAlert logger = logging.getLogger(__name__) @@ -44,8 +46,8 @@ class GuiSessionLogView(QDialog): self.timeFilter = 0.0 self.timeTotal = 0.0 - self.outerBox = QGridLayout() - self.bottomBox = QHBoxLayout() + self.outerBox = QGridLayout() + self.bottomBox = QHBoxLayout() self.setWindowTitle("Session Log") self.setMinimumWidth(420) @@ -76,7 +78,7 @@ class GuiSessionLogView(QDialog): self.monoFont = QFont("Monospace",10) sortValid = (Qt.AscendingOrder, Qt.DescendingOrder) - sortCol = self.optState.validIntRange( + sortCol = self.optState.validIntRange( self.optState.getSetting("sortCol"), 0, 2, 0 ) sortOrder = self.optState.validIntTuple( @@ -91,7 +93,7 @@ class GuiSessionLogView(QDialog): self.infoBoxForm = QGridLayout(self) self.infoBox.setLayout(self.infoBoxForm) - self.labelTotal = QLabel(self._formatTime(0)) + self.labelTotal = QLabel(self._formatTime(0)) self.labelTotal.setFont(self.monoFont) self.labelTotal.setAlignment(Qt.AlignVCenter | Qt.AlignRight) @@ -162,11 +164,11 @@ class GuiSessionLogView(QDialog): inData = inLine.split() if len(inData) != 8: continue - dStart = datetime.strptime("%s %s" % (inData[1],inData[2]),nwConst.tStampFmt) - dEnd = datetime.strptime("%s %s" % (inData[4],inData[5]),nwConst.tStampFmt) - nWords = int(inData[7]) - tDiff = dEnd - dStart - sDiff = tDiff.total_seconds() + dStart = datetime.strptime("%s %s" % (inData[1],inData[2]),nwConst.tStampFmt) + dEnd = datetime.strptime("%s %s" % (inData[4],inData[5]),nwConst.tStampFmt) + nWords = int(inData[7]) + tDiff = dEnd - dStart + sDiff = tDiff.total_seconds() self.timeTotal += sDiff if abs(nWords) > 0: diff --git a/nw/gui/dialogs/timelineview.py b/nw/gui/dialogs/timelineview.py index fb0a00d5..6d78e12a 100644 --- a/nw/gui/dialogs/timelineview.py +++ b/nw/gui/dialogs/timelineview.py @@ -15,16 +15,17 @@ import nw from os import path -from PyQt5.QtCore import Qt -from PyQt5.QtGui import QIcon, QColor, QPixmap +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QIcon, QColor, QPixmap from PyQt5.QtWidgets import ( - QDialog, QVBoxLayout, QHBoxLayout, QTableWidget, QTableWidgetItem, QDialogButtonBox, QLabel, - QPushButton, QHeaderView, QGridLayout, QGroupBox, QCheckBox + QDialog, QVBoxLayout, QHBoxLayout, QTableWidget, QTableWidgetItem, + QDialogButtonBox, QLabel, QPushButton, QHeaderView, QGridLayout, + QGroupBox, QCheckBox ) from nw.tools.optlaststate import OptLastState -from nw.constants import nwFiles -from nw.enum import nwItemClass +from nw.constants import nwFiles +from nw.enum import nwItemClass logger = logging.getLogger(__name__) diff --git a/nw/gui/elements/docdetails.py b/nw/gui/elements/docdetails.py index a38f9ac6..7df20457 100644 --- a/nw/gui/elements/docdetails.py +++ b/nw/gui/elements/docdetails.py @@ -13,10 +13,10 @@ import logging import nw -from PyQt5.QtGui import QFont +from PyQt5.QtGui import QFont from PyQt5.QtWidgets import QFrame, QGridLayout, QLabel -from nw.constants import nwLabels +from nw.constants import nwLabels logger = logging.getLogger(__name__) diff --git a/nw/gui/elements/doceditor.py b/nw/gui/elements/doceditor.py index 4a21ddac..cb1cd2ef 100644 --- a/nw/gui/elements/doceditor.py +++ b/nw/gui/elements/doceditor.py @@ -15,18 +15,21 @@ import nw from time import time -from PyQt5.QtCore import Qt, QTimer, QSizeF -from PyQt5.QtWidgets import qApp, QTextEdit, QAction, QMenu, QShortcut, QMessageBox -from PyQt5.QtGui import ( - QTextCursor, QTextOption, QIcon, QKeySequence, QFont, QColor, QPalette, QTextDocument, +from PyQt5.QtCore import Qt, QTimer, QSizeF +from PyQt5.QtWidgets import ( + qApp, QTextEdit, QAction, QMenu, QShortcut, QMessageBox +) +from PyQt5.QtGui import ( + QTextCursor, QTextOption, QIcon, QKeySequence, QFont, QColor, + QPalette, QTextDocument, ) -from nw.project.document import NWDoc +from nw.project.document import NWDoc from nw.gui.tools.dochighlight import GuiDocHighlighter -from nw.gui.tools.wordcounter import WordCounter -from nw.tools.spellcheck import NWSpellCheck -from nw.constants import nwFiles, nwUnicode -from nw.enum import nwDocAction, nwAlert +from nw.gui.tools.wordcounter import WordCounter +from nw.tools.spellcheck import NWSpellCheck +from nw.constants import nwFiles, nwUnicode +from nw.enum import nwDocAction, nwAlert logger = logging.getLogger(__name__) @@ -85,20 +88,20 @@ class GuiDocEditor(QTextEdit): QShortcut( QKeySequence("Ctrl+."), self, - context = Qt.WidgetShortcut, - activated = self._openSpellContext + context=Qt.WidgetShortcut, + activated=self._openSpellContext ) QShortcut( Qt.Key_Return | Qt.ControlModifier, self, - context = Qt.WidgetShortcut, - activated = self._followTag + context=Qt.WidgetShortcut, + activated=self._followTag ) QShortcut( Qt.Key_Enter | Qt.ControlModifier, self, - context = Qt.WidgetShortcut, - activated = self._followTag + context=Qt.WidgetShortcut, + activated=self._followTag ) # Set Up Word Count Thread and Timer @@ -684,7 +687,7 @@ class GuiDocEditor(QTextEdit): the document. Wraps back to the top if not found. """ searchFor = self.theParent.searchBar.getSearchText() - wasFound = self.find(searchFor) + wasFound = self.find(searchFor) if not wasFound: theCursor = self.textCursor() theCursor.movePosition(QTextCursor.Start) diff --git a/nw/gui/elements/doctree.py b/nw/gui/elements/doctree.py index bafa5b48..0f93405a 100644 --- a/nw/gui/elements/doctree.py +++ b/nw/gui/elements/doctree.py @@ -13,13 +13,15 @@ import logging import nw -from PyQt5.QtCore import Qt, QSize -from PyQt5.QtGui import QIcon, QFont, QColor -from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QAbstractItemView, QApplication +from PyQt5.QtCore import Qt, QSize +from PyQt5.QtGui import QIcon, QFont, QColor +from PyQt5.QtWidgets import ( + QTreeWidget, QTreeWidgetItem, QAbstractItemView, QApplication +) from nw.project.item import NWItem -from nw.constants import nwLabels -from nw.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert +from nw.constants import nwLabels +from nw.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert logger = logging.getLogger(__name__) diff --git a/nw/gui/elements/docviewer.py b/nw/gui/elements/docviewer.py index 9edd1838..6c6634f0 100644 --- a/nw/gui/elements/docviewer.py +++ b/nw/gui/elements/docviewer.py @@ -13,13 +13,13 @@ import logging import nw -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QTextBrowser -from PyQt5.QtGui import QTextOption, QFont, QPalette, QColor +from PyQt5.QtGui import QTextOption, QFont, QPalette, QColor -from nw.convert.tokenizer import Tokenizer +from nw.convert.tokenizer import Tokenizer from nw.convert.text.tohtml import ToHtml -from nw.enum import nwAlert, nwItemType +from nw.enum import nwAlert, nwItemType logger = logging.getLogger(__name__) diff --git a/nw/gui/elements/noticebar.py b/nw/gui/elements/noticebar.py index 17bd512e..37b7f963 100644 --- a/nw/gui/elements/noticebar.py +++ b/nw/gui/elements/noticebar.py @@ -13,8 +13,8 @@ import logging import nw -from PyQt5.QtCore import Qt -from PyQt5.QtGui import QPalette, QColor +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QPalette, QColor from PyQt5.QtWidgets import QFrame, QHBoxLayout, QLabel, QPushButton logger = logging.getLogger(__name__) @@ -36,7 +36,8 @@ class GuiNoticeBar(QFrame): self.mainBox = QHBoxLayout(self) self.mainBox.setContentsMargins(8,2,2,2) - self.noteLabel = QLabel("Hi there!") + self.noteLabel = QLabel("Hi there!") + self.closeButton = QPushButton(self.theTheme.getIcon("close"),"") self.closeButton.clicked.connect(self.hideNote) diff --git a/nw/gui/elements/searchbar.py b/nw/gui/elements/searchbar.py index 8fab6e93..32a520ec 100644 --- a/nw/gui/elements/searchbar.py +++ b/nw/gui/elements/searchbar.py @@ -13,9 +13,11 @@ import logging import nw -from PyQt5.QtCore import Qt -from PyQt5.QtGui import QIcon -from PyQt5.QtWidgets import QFrame, QGridLayout, QLabel, QLineEdit, QPushButton, QApplication +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QIcon +from PyQt5.QtWidgets import ( + QFrame, QGridLayout, QLabel, QLineEdit, QPushButton, QApplication +) from nw.enum import nwDocAction diff --git a/nw/gui/elements/viewdetails.py b/nw/gui/elements/viewdetails.py index 5880d008..05c4be25 100644 --- a/nw/gui/elements/viewdetails.py +++ b/nw/gui/elements/viewdetails.py @@ -13,11 +13,11 @@ import logging import nw -from PyQt5.QtCore import Qt, QSize -from PyQt5.QtGui import QFont +from PyQt5.QtCore import Qt, QSize +from PyQt5.QtGui import QFont from PyQt5.QtWidgets import ( - QWidget, QHBoxLayout, QVBoxLayout, QLabel, QGroupBox, QScrollArea, QFrame, QToolButton, - QSizePolicy, QCheckBox, QGridLayout + QWidget, QHBoxLayout, QVBoxLayout, QLabel, QGroupBox, QScrollArea, QFrame, + QToolButton, QSizePolicy, QCheckBox, QGridLayout ) from nw.constants import nwLabels diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index ffa876c5..e46dfd4e 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -13,8 +13,8 @@ import logging import nw -from PyQt5.QtCore import QUrl -from PyQt5.QtGui import QIcon, QDesktopServices +from PyQt5.QtCore import QUrl +from PyQt5.QtGui import QIcon, QDesktopServices from PyQt5.QtWidgets import QMenuBar, QAction, QMessageBox from nw.enum import nwItemType, nwItemClass, nwDocAction @@ -78,7 +78,9 @@ class GuiMainMenu(QMenuBar): recentProject = self.mainConf.recentList[n] if recentProject == "": continue menuItem = QAction("%s" % recentProject, self.projMenu) - menuItem.triggered.connect(lambda menuItem, n=n : self.openRecentProject(menuItem, n)) + menuItem.triggered.connect( + lambda menuItem, n=n : self.openRecentProject(menuItem, n) + ) self.recentMenu.addAction(menuItem) self.recentMenu.addSeparator() diff --git a/nw/gui/statusbar.py b/nw/gui/statusbar.py index 00170b8c..ef082e2f 100644 --- a/nw/gui/statusbar.py +++ b/nw/gui/statusbar.py @@ -13,9 +13,10 @@ import logging import nw -from time import time -from PyQt5.QtCore import Qt, QTimer -from PyQt5.QtGui import QIcon, QColor, QPixmap +from time import time + +from PyQt5.QtCore import Qt, QTimer +from PyQt5.QtGui import QIcon, QColor, QPixmap from PyQt5.QtWidgets import QStatusBar, QLabel, QFrame logger = logging.getLogger(__name__) diff --git a/nw/gui/tools/dochighlight.py b/nw/gui/tools/dochighlight.py index e356dbf7..02090d94 100644 --- a/nw/gui/tools/dochighlight.py +++ b/nw/gui/tools/dochighlight.py @@ -14,7 +14,9 @@ import logging import nw from PyQt5.QtCore import Qt, QRegularExpression -from PyQt5.QtGui import QColor, QTextCharFormat, QFont, QSyntaxHighlighter, QBrush +from PyQt5.QtGui import ( + QColor, QTextCharFormat, QFont, QSyntaxHighlighter, QBrush +) from nw.constants import nwUnicode @@ -38,18 +40,18 @@ class GuiDocHighlighter(QSyntaxHighlighter): self.hRules = [] self.hStyles = {} - self.colHead = QColor(0,0,0) - self.colHeadH = QColor(0,0,0) - self.colEmph = QColor(0,0,0) - self.colDialN = QColor(0,0,0) - self.colDialD = QColor(0,0,0) - self.colDialS = QColor(0,0,0) - self.colComm = QColor(0,0,0) - self.colKey = QColor(0,0,0) - self.colVal = QColor(0,0,0) - self.colSpell = QColor(0,0,0) - self.colTagErr = QColor(0,0,0) - self.colRepTag = QColor(0,0,0) + self.colHead = QColor(0,0,0) + self.colHeadH = QColor(0,0,0) + self.colEmph = QColor(0,0,0) + self.colDialN = QColor(0,0,0) + self.colDialD = QColor(0,0,0) + self.colDialS = QColor(0,0,0) + self.colComm = QColor(0,0,0) + self.colKey = QColor(0,0,0) + self.colVal = QColor(0,0,0) + self.colSpell = QColor(0,0,0) + self.colTagErr = QColor(0,0,0) + self.colRepTag = QColor(0,0,0) self.initHighlighter() @@ -196,7 +198,7 @@ class GuiDocHighlighter(QSyntaxHighlighter): )) self.hRules.append(( - "<(\S+?)>", { + r"<(\S+?)>", { 0 : self.hStyles["replace"], } )) diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index 8eedb626..047ccdeb 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -16,37 +16,37 @@ import nw from os import path -from PyQt5.QtCore import Qt, QTimer -from PyQt5.QtGui import QIcon, QPixmap, QColor +from PyQt5.QtCore import Qt, QTimer +from PyQt5.QtGui import QIcon, QPixmap, QColor from PyQt5.QtWidgets import ( qApp, QWidget, QMainWindow, QVBoxLayout, QFrame, QSplitter, QFileDialog, QShortcut, QMessageBox, QProgressDialog, QDialog ) -from nw.gui.mainmenu import GuiMainMenu -from nw.gui.statusbar import GuiMainStatus -from nw.gui.elements.doctree import GuiDocTree -from nw.gui.elements.doceditor import GuiDocEditor -from nw.gui.elements.docviewer import GuiDocViewer -from nw.gui.elements.docdetails import GuiDocDetails -from nw.gui.elements.searchbar import GuiSearchBar -from nw.gui.elements.noticebar import GuiNoticeBar -from nw.gui.elements.viewdetails import GuiDocViewDetails -from nw.gui.dialogs.configeditor import GuiConfigEditor +from nw.gui.mainmenu import GuiMainMenu +from nw.gui.statusbar import GuiMainStatus +from nw.gui.elements.doctree import GuiDocTree +from nw.gui.elements.doceditor import GuiDocEditor +from nw.gui.elements.docviewer import GuiDocViewer +from nw.gui.elements.docdetails import GuiDocDetails +from nw.gui.elements.searchbar import GuiSearchBar +from nw.gui.elements.noticebar import GuiNoticeBar +from nw.gui.elements.viewdetails import GuiDocViewDetails +from nw.gui.dialogs.configeditor import GuiConfigEditor from nw.gui.dialogs.projecteditor import GuiProjectEditor -from nw.gui.dialogs.export import GuiExport -from nw.gui.dialogs.itemeditor import GuiItemEditor -from nw.gui.dialogs.timelineview import GuiTimeLineView -from nw.gui.dialogs.sessionlog import GuiSessionLogView -from nw.project.project import NWProject -from nw.project.document import NWDoc -from nw.project.item import NWItem -from nw.project.index import NWIndex -from nw.project.backup import NWBackup -from nw.tools.wordcount import countWords -from nw.theme import Theme -from nw.enum import nwItemType, nwAlert -from nw.constants import nwFiles +from nw.gui.dialogs.export import GuiExport +from nw.gui.dialogs.itemeditor import GuiItemEditor +from nw.gui.dialogs.timelineview import GuiTimeLineView +from nw.gui.dialogs.sessionlog import GuiSessionLogView +from nw.project.project import NWProject +from nw.project.document import NWDoc +from nw.project.item import NWItem +from nw.project.index import NWIndex +from nw.project.backup import NWBackup +from nw.tools.wordcount import countWords +from nw.theme import Theme +from nw.enum import nwItemType, nwAlert +from nw.constants import nwFiles logger = logging.getLogger(__name__) @@ -168,17 +168,17 @@ class GuiMain(QMainWindow): QShortcut( Qt.Key_Return, self.treeView, - context = Qt.WidgetShortcut, - activated = self._treeKeyPressReturn + context=Qt.WidgetShortcut, + activated=self._treeKeyPressReturn ) QShortcut( Qt.Key_Escape, self, - activated = self._keyPressEscape + activated=self._keyPressEscape ) # Forward Functions - self.setStatus = self.statusBar.setStatus + self.setStatus = self.statusBar.setStatus self.setProjectStatus = self.statusBar.setProjectStatus if self.mainConf.showGUI: @@ -578,7 +578,7 @@ class GuiMain(QMainWindow): dlgOpt |= QFileDialog.ShowDirsOnly dlgOpt |= QFileDialog.DontUseNativeDialog projPath = QFileDialog.getExistingDirectory( - self,"Save novelWriter Project","",options=dlgOpt + self, "Save novelWriter Project", "", options=dlgOpt ) if projPath: return projPath @@ -589,7 +589,7 @@ class GuiMain(QMainWindow): dlgOpt |= QFileDialog.ShowDirsOnly dlgOpt |= QFileDialog.DontUseNativeDialog projPath = QFileDialog.getExistingDirectory( - self,"Select Location for New novelWriter Project","",options=dlgOpt + self, "Select Location for New novelWriter Project", "", options=dlgOpt ) if projPath: return projPath diff --git a/nw/project/backup.py b/nw/project/backup.py index 993c4406..2fdb4112 100644 --- a/nw/project/backup.py +++ b/nw/project/backup.py @@ -13,8 +13,8 @@ import logging import nw -from os import path, mkdir, listdir -from shutil import make_archive +from os import path, mkdir, listdir +from shutil import make_archive from datetime import datetime from nw.enum import nwAlert diff --git a/nw/project/document.py b/nw/project/document.py index 3e807a2b..c6a5e49c 100644 --- a/nw/project/document.py +++ b/nw/project/document.py @@ -103,9 +103,12 @@ class NWDoc(): docTemp = path.join(dataPath,docFile[:-3]+"tmp") docBack = path.join(dataPath,docFile[:-3]+"bak") - if path.isfile(docTemp): unlink(docTemp) - if path.isfile(docBack): rename(docBack,docTemp) - if path.isfile(docPath): rename(docPath,docBack) + if path.isfile(docTemp): + unlink(docTemp) + if path.isfile(docBack): + rename(docBack,docTemp) + if path.isfile(docPath): + rename(docPath,docBack) try: with open(docPath,mode="w",encoding="utf8") as outFile: diff --git a/nw/project/index.py b/nw/project/index.py index d3b62613..59893dc5 100644 --- a/nw/project/index.py +++ b/nw/project/index.py @@ -17,9 +17,9 @@ import nw from os import path from nw.project.document import NWDoc -from nw.enum import nwItemType, nwItemClass, nwItemLayout -from nw.constants import nwFiles, nwKeyWords -from nw.enum import nwAlert +from nw.enum import nwItemType, nwItemClass, nwItemLayout +from nw.constants import nwFiles, nwKeyWords +from nw.enum import nwAlert logger = logging.getLogger(__name__) @@ -62,7 +62,7 @@ class NWIndex(): self.noteIndex = {} # Lists - self.novelList = [] + self.novelList = [] return @@ -101,7 +101,7 @@ class NWIndex(): """Load index from last session from the project meta folder. """ - theData = {} + theData = {} indexFile = path.join(self.theProject.projMeta, nwFiles.INDEX_FILE) if path.isfile(indexFile): logger.debug("Loading index file") @@ -213,11 +213,11 @@ class NWIndex(): # Check file type, and reset its old index if itemClass == nwItemClass.NOVEL: self.novelIndex[tHandle] = [] - self.refIndex[tHandle] = [] + self.refIndex[tHandle] = [] isNovel = True else: self.noteIndex[tHandle] = [] - self.refIndex[tHandle] = [] + self.refIndex[tHandle] = [] isNovel = False # Also clear references to file in tag index @@ -390,7 +390,6 @@ class NWIndex(): def buildNovelList(self): """Build a list of the content of the novel. """ - self.novelList = [] self.novelOrder = [] for tHandle in self.theProject.treeOrder: @@ -399,7 +398,6 @@ class NWIndex(): for tEntry in self.novelIndex[tHandle]: self.novelList.append(tEntry) self.novelOrder.append("%s:%d" % (tHandle,tEntry[0])) - return True def buildReferenceList(self, tHandle): diff --git a/nw/project/item.py b/nw/project/item.py index 9640265b..cae1777b 100644 --- a/nw/project/item.py +++ b/nw/project/item.py @@ -13,11 +13,11 @@ import logging import nw -from os import path, mkdir -from lxml import etree -from datetime import datetime +from os import path, mkdir +from lxml import etree +from datetime import datetime -from nw.enum import nwItemType, nwItemClass, nwItemLayout +from nw.enum import nwItemType, nwItemClass, nwItemLayout from nw.common import checkInt logger = logging.getLogger(__name__) @@ -28,23 +28,23 @@ class NWItem(): def __init__(self, theProject): - self.theProject = theProject + self.theProject = theProject - self.itemName = "" - self.itemHandle = None - self.parHandle = None - self.itemOrder = None - self.itemType = nwItemType.NO_TYPE - self.itemClass = nwItemClass.NO_CLASS - self.itemLayout = nwItemLayout.NO_LAYOUT - self.itemStatus = None - self.isExpanded = False + self.itemName = "" + self.itemHandle = None + self.parHandle = None + self.itemOrder = None + self.itemType = nwItemType.NO_TYPE + self.itemClass = nwItemClass.NO_CLASS + self.itemLayout = nwItemLayout.NO_LAYOUT + self.itemStatus = None + self.isExpanded = False # Document Meta Data - self.charCount = 0 - self.wordCount = 0 - self.paraCount = 0 - self.cursorPos = 0 + self.charCount = 0 + self.wordCount = 0 + self.paraCount = 0 + self.cursorPos = 0 return diff --git a/nw/project/project.py b/nw/project/project.py index a0208885..46c70de8 100644 --- a/nw/project/project.py +++ b/nw/project/project.py @@ -13,18 +13,18 @@ import logging import nw -from os import path, mkdir, listdir -from shutil import copyfile -from lxml import etree -from hashlib import sha256 +from os import path, mkdir, listdir +from shutil import copyfile +from lxml import etree +from hashlib import sha256 from datetime import datetime -from time import time +from time import time -from nw.project.item import NWItem +from nw.project.item import NWItem from nw.project.status import NWStatus -from nw.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert -from nw.common import checkString, checkBool, checkInt -from nw.constants import nwFiles, nwConst +from nw.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert +from nw.common import checkString, checkBool, checkInt +from nw.constants import nwFiles, nwConst logger = logging.getLogger(__name__) @@ -40,18 +40,18 @@ class NWProject(): self.projAltered = None # The project has been altered this session # Debug - self.handleSeed = None + self.handleSeed = None # Class Settings - self.projTree = None # Holds all the items of the project - self.treeOrder = None # The order of the tree items on the tree view - self.treeRoots = None # The root items of the tree - self.trashRoot = None # The handle of the trash root folder - self.projPath = None # The full path to where the currently open project is saved - self.projMeta = None # The full path to the project's meta data folder - self.projCache = None # The full path to the project's cache folder - self.projDict = None # The spell check dictionary - self.projFile = None # The file name of the project main xml file + self.projTree = None # Holds all the items of the project + self.treeOrder = None # The order of the tree items on the tree view + self.treeRoots = None # The root items of the tree + self.trashRoot = None # The handle of the trash root folder + self.projPath = None # The full path to where the currently open project is saved + self.projMeta = None # The full path to the project's meta data folder + self.projCache = None # The full path to the project's cache folder + self.projDict = None # The spell check dictionary + self.projFile = None # The file name of the project main xml file # Project Meta self.projName = None @@ -194,8 +194,10 @@ class NWProject(): self.projCache = path.join(self.projPath,"cache") self.projDict = path.join(self.projMeta, nwFiles.PROJ_DICT) - if not self._checkFolder(self.projMeta): return - if not self._checkFolder(self.projCache): return + if not self._checkFolder(self.projMeta): + return + if not self._checkFolder(self.projCache): + return try: nwXML = etree.parse(fileName) @@ -313,19 +315,19 @@ class NWProject(): }) # Save Project Meta - xProject = etree.SubElement(nwXML,"project") - self._saveProjectValue(xProject,"name", self.projName, True) - self._saveProjectValue(xProject,"title", self.bookTitle, True) - self._saveProjectValue(xProject,"author",self.bookAuthors) - self._saveProjectValue(xProject,"backup",self.doBackup) + xProject = etree.SubElement(nwXML, "project") + self._saveProjectValue(xProject, "name", self.projName, True) + self._saveProjectValue(xProject, "title", self.bookTitle, True) + self._saveProjectValue(xProject, "author", self.bookAuthors) + self._saveProjectValue(xProject, "backup", self.doBackup) # Save Project Settings - xSettings = etree.SubElement(nwXML,"settings") - self._saveProjectValue(xSettings,"spellCheck", self.spellCheck) - self._saveProjectValue(xSettings,"lastEdited", self.lastEdited) - self._saveProjectValue(xSettings,"lastViewed", self.lastViewed) - self._saveProjectValue(xSettings,"lastWordCount",self.currWCount) - xAutoRep = etree.SubElement(xSettings,"autoReplace") + xSettings = etree.SubElement(nwXML, "settings") + self._saveProjectValue(xSettings, "spellCheck", self.spellCheck) + self._saveProjectValue(xSettings, "lastEdited", self.lastEdited) + self._saveProjectValue(xSettings, "lastViewed", self.lastViewed) + self._saveProjectValue(xSettings, "lastWordCount", self.currWCount) + xAutoRep = etree.SubElement(xSettings, "autoReplace") for aKey, aValue in self.autoReplace.items(): if len(aKey) > 0: self._saveProjectValue(xAutoRep,aKey,aValue) @@ -337,7 +339,7 @@ class NWProject(): # Save Tree Content logger.debug("Writing project content") - xContent = etree.SubElement(nwXML,"content",attrib={"count":str(len(self.treeOrder))}) + xContent = etree.SubElement(nwXML, "content", attrib={"count":str(len(self.treeOrder))}) for tHandle in self.treeOrder: self.projTree[tHandle].packXML(xContent) @@ -411,8 +413,8 @@ class NWProject(): return False if self.projName == "": self.theParent.makeAlert(( - "You must set a valid project name in project settings to use " - "the automatic project backup feature." + "You must set a valid project name in project settings to " + "use the automatic project backup feature." ), nwAlert.ERROR) return False self.doBackup = True @@ -699,7 +701,7 @@ class NWProject(): sessionFile = path.join(self.projMeta, nwFiles.SESS_INFO) - with open(sessionFile,mode="a+",encoding="utf8") as outFile: + with open(sessionFile, mode="a+", encoding="utf8") as outFile: print(( "Start: {opened:s} " "End: {closed:s} " @@ -750,8 +752,8 @@ class NWProject(): try: copyfile( - path.join(self.projPath,self.projFile), - path.join(self.projCache,projBackup) + path.join(self.projPath, self.projFile), + path.join(self.projCache, projBackup) ) except: logger.error("Failed to write to file %s" % projBackup) diff --git a/nw/project/status.py b/nw/project/status.py index d3bbb560..de49a03c 100644 --- a/nw/project/status.py +++ b/nw/project/status.py @@ -15,7 +15,7 @@ import nw from lxml import etree -from nw.enum import nwItemClass +from nw.enum import nwItemClass from nw.common import checkInt logger = logging.getLogger(__name__) diff --git a/nw/theme.py b/nw/theme.py index 70d101c6..0b687b17 100644 --- a/nw/theme.py +++ b/nw/theme.py @@ -17,7 +17,7 @@ import nw from os import path, listdir from PyQt5.QtWidgets import qApp -from PyQt5.QtGui import QPalette, QColor, QIcon +from PyQt5.QtGui import QPalette, QColor, QIcon from nw.enum import nwAlert @@ -41,30 +41,30 @@ class Theme: def __init__(self, theParent): - self.mainConf = nw.CONFIG - self.theParent = theParent - self.guiPalette = QPalette() - self.guiPath = "gui" - self.iconPath = "icons" - self.syntaxPath = "syntax" - self.cssName = "style.qss" - self.confName = "theme.conf" - self.themeList = [] - self.syntaxList = [] + self.mainConf = nw.CONFIG + self.theParent = theParent + self.guiPalette = QPalette() + self.guiPath = "gui" + self.iconPath = "icons" + self.syntaxPath = "syntax" + self.cssName = "style.qss" + self.confName = "theme.conf" + self.themeList = [] + self.syntaxList = [] # Loaded Theme Settings ## Theme - self.themeName = "" - self.themeAuthor = "" - self.themeCredit = "" - self.themeUrl = "" + self.themeName = "" + self.themeAuthor = "" + self.themeCredit = "" + self.themeUrl = "" ## GUI - self.treeWCount = [ 0, 0, 0] - self.statNone = [120,120,120] - self.statUnsaved = [120,120, 40] - self.statSaved = [ 40,120, 0] + self.treeWCount = [ 0, 0, 0] + self.statNone = [120,120,120] + self.statUnsaved = [120,120, 40] + self.statSaved = [ 40,120, 0] # Loaded Syntax Settings @@ -75,33 +75,33 @@ class Theme: self.syntaxUrl = "" ## Colours - self.colBack = [255,255,255] - self.colText = [ 0, 0, 0] - self.colLink = [ 0, 0, 0] - self.colHead = [ 0, 0, 0] - self.colHeadH = [ 0, 0, 0] - self.colEmph = [ 0, 0, 0] - self.colDialN = [ 0, 0, 0] - self.colDialD = [ 0, 0, 0] - self.colDialS = [ 0, 0, 0] - self.colComm = [ 0, 0, 0] - self.colKey = [ 0, 0, 0] - self.colVal = [ 0, 0, 0] - self.colSpell = [ 0, 0, 0] - self.colTagErr = [ 0, 0, 0] - self.colRepTag = [ 0, 0, 0] + self.colBack = [255,255,255] + self.colText = [ 0, 0, 0] + self.colLink = [ 0, 0, 0] + self.colHead = [ 0, 0, 0] + self.colHeadH = [ 0, 0, 0] + self.colEmph = [ 0, 0, 0] + self.colDialN = [ 0, 0, 0] + self.colDialD = [ 0, 0, 0] + self.colDialS = [ 0, 0, 0] + self.colComm = [ 0, 0, 0] + self.colKey = [ 0, 0, 0] + self.colVal = [ 0, 0, 0] + self.colSpell = [ 0, 0, 0] + self.colTagErr = [ 0, 0, 0] + self.colRepTag = [ 0, 0, 0] ## Icons - self.themeIcons = {} + self.themeIcons = {} # Changeable Settings - self.guiTheme = None - self.guiSyntax = None - self.themeRoot = None - self.themePath = None - self.syntaxFile = None - self.confFile = None - self.cssFile = None + self.guiTheme = None + self.guiSyntax = None + self.themeRoot = None + self.themePath = None + self.syntaxFile = None + self.confFile = None + self.cssFile = None self.updateTheme() @@ -162,36 +162,36 @@ class Theme: ## Main cnfSec = "Main" if confParser.has_section(cnfSec): - self.themeName = self._parseLine(confParser,cnfSec,"name", "") - self.themeAuthor = self._parseLine(confParser,cnfSec,"author","") - self.themeCredit = self._parseLine(confParser,cnfSec,"credit","") - self.themeUrl = self._parseLine(confParser,cnfSec,"url", "") + self.themeName = self._parseLine( confParser, cnfSec, "name", "") + self.themeAuthor = self._parseLine( confParser, cnfSec, "author", "") + self.themeCredit = self._parseLine( confParser, cnfSec, "credit", "") + self.themeUrl = self._parseLine( confParser, cnfSec, "url", "") ## Palette cnfSec = "Palette" if confParser.has_section(cnfSec): - self._setPalette(confParser,cnfSec,"window", QPalette.Window) - self._setPalette(confParser,cnfSec,"windowtext", QPalette.WindowText) - self._setPalette(confParser,cnfSec,"base", QPalette.Base) - self._setPalette(confParser,cnfSec,"alternatebase", QPalette.AlternateBase) - self._setPalette(confParser,cnfSec,"text", QPalette.Text) - self._setPalette(confParser,cnfSec,"tooltipbase", QPalette.ToolTipBase) - self._setPalette(confParser,cnfSec,"tooltiptext", QPalette.ToolTipText) - self._setPalette(confParser,cnfSec,"button", QPalette.Button) - self._setPalette(confParser,cnfSec,"buttontext", QPalette.ButtonText) - self._setPalette(confParser,cnfSec,"brighttext", QPalette.BrightText) - self._setPalette(confParser,cnfSec,"highlight", QPalette.Highlight) - self._setPalette(confParser,cnfSec,"highlightedtext",QPalette.HighlightedText) - self._setPalette(confParser,cnfSec,"link", QPalette.Link) - self._setPalette(confParser,cnfSec,"linkvisited", QPalette.LinkVisited) + self._setPalette(confParser, cnfSec, "window", QPalette.Window) + self._setPalette(confParser, cnfSec, "windowtext", QPalette.WindowText) + self._setPalette(confParser, cnfSec, "base", QPalette.Base) + self._setPalette(confParser, cnfSec, "alternatebase", QPalette.AlternateBase) + self._setPalette(confParser, cnfSec, "text", QPalette.Text) + self._setPalette(confParser, cnfSec, "tooltipbase", QPalette.ToolTipBase) + self._setPalette(confParser, cnfSec, "tooltiptext", QPalette.ToolTipText) + self._setPalette(confParser, cnfSec, "button", QPalette.Button) + self._setPalette(confParser, cnfSec, "buttontext", QPalette.ButtonText) + self._setPalette(confParser, cnfSec, "brighttext", QPalette.BrightText) + self._setPalette(confParser, cnfSec, "highlight", QPalette.Highlight) + self._setPalette(confParser, cnfSec, "highlightedtext", QPalette.HighlightedText) + self._setPalette(confParser, cnfSec, "link", QPalette.Link) + self._setPalette(confParser, cnfSec, "linkvisited", QPalette.LinkVisited) ## GUI cnfSec = "GUI" if confParser.has_section(cnfSec): - self.treeWCount = self._loadColour(confParser,cnfSec,"treewordcount") - self.statNone = self._loadColour(confParser,cnfSec,"statusnone") - self.statUnsaved = self._loadColour(confParser,cnfSec,"statusunsaved") - self.statSaved = self._loadColour(confParser,cnfSec,"statussaved") + self.treeWCount = self._loadColour(confParser, cnfSec, "treewordcount") + self.statNone = self._loadColour(confParser, cnfSec, "statusnone") + self.statUnsaved = self._loadColour(confParser, cnfSec, "statusunsaved") + self.statSaved = self._loadColour(confParser, cnfSec, "statussaved") # Apply Styles qApp.setStyleSheet(cssData) @@ -205,7 +205,7 @@ class Theme: confParser = configparser.ConfigParser() try: - confParser.read_file(open(self.syntaxFile,mode="r",encoding="utf8")) + confParser.read_file(open(self.syntaxFile, mode="r", encoding="utf8")) except Exception as e: logger.error("Could not load syntax colours from: %s" % self.syntaxFile) return False @@ -213,29 +213,29 @@ class Theme: ## Main cnfSec = "Main" if confParser.has_section(cnfSec): - self.syntaxName = self._parseLine(confParser,cnfSec,"name","") - self.syntaxAuthor = self._parseLine(confParser,cnfSec,"author","") - self.syntaxCredit = self._parseLine(confParser,cnfSec,"credit","") - self.syntaxUrl = self._parseLine(confParser,cnfSec,"url", "") + self.syntaxName = self._parseLine(confParser, cnfSec, "name", "") + self.syntaxAuthor = self._parseLine(confParser, cnfSec, "author", "") + self.syntaxCredit = self._parseLine(confParser, cnfSec, "credit", "") + self.syntaxUrl = self._parseLine(confParser, cnfSec, "url", "") ## Syntax cnfSec = "Syntax" if confParser.has_section(cnfSec): - self.colBack = self._loadColour(confParser,cnfSec,"background") - self.colText = self._loadColour(confParser,cnfSec,"text") - self.colLink = self._loadColour(confParser,cnfSec,"link") - self.colHead = self._loadColour(confParser,cnfSec,"headertext") - self.colHeadH = self._loadColour(confParser,cnfSec,"headertag") - self.colEmph = self._loadColour(confParser,cnfSec,"emphasis") - self.colDialN = self._loadColour(confParser,cnfSec,"straightquotes") - self.colDialD = self._loadColour(confParser,cnfSec,"doublequotes") - self.colDialS = self._loadColour(confParser,cnfSec,"singlequotes") - self.colComm = self._loadColour(confParser,cnfSec,"hidden") - self.colKey = self._loadColour(confParser,cnfSec,"keyword") - self.colVal = self._loadColour(confParser,cnfSec,"value") - self.colSpell = self._loadColour(confParser,cnfSec,"spellcheckline") - self.colTagErr = self._loadColour(confParser,cnfSec,"tagerror") - self.colRepTag = self._loadColour(confParser,cnfSec,"replacetag") + self.colBack = self._loadColour(confParser, cnfSec, "background") + self.colText = self._loadColour(confParser, cnfSec, "text") + self.colLink = self._loadColour(confParser, cnfSec, "link") + self.colHead = self._loadColour(confParser, cnfSec, "headertext") + self.colHeadH = self._loadColour(confParser, cnfSec, "headertag") + self.colEmph = self._loadColour(confParser, cnfSec, "emphasis") + self.colDialN = self._loadColour(confParser, cnfSec, "straightquotes") + self.colDialD = self._loadColour(confParser, cnfSec, "doublequotes") + self.colDialS = self._loadColour(confParser, cnfSec, "singlequotes") + self.colComm = self._loadColour(confParser, cnfSec, "hidden") + self.colKey = self._loadColour(confParser, cnfSec, "keyword") + self.colVal = self._loadColour(confParser, cnfSec, "value") + self.colSpell = self._loadColour(confParser, cnfSec, "spellcheckline") + self.colTagErr = self._loadColour(confParser, cnfSec, "tagerror") + self.colRepTag = self._loadColour(confParser, cnfSec, "replacetag") logger.info("Loaded syntax theme '%s'" % self.guiSyntax) @@ -251,7 +251,7 @@ class Theme: themeConf = path.join(self.mainConf.themeRoot, self.guiPath, themeDir, self.confName) logger.verbose("Checking theme config for '%s'" % themeDir) try: - confParser.read_file(open(themeConf,mode="r",encoding="utf8")) + confParser.read_file(open(themeConf, mode="r", encoding="utf8")) except Exception as e: self.theParent.makeAlert(["Could not load theme config file",str(e)],nwAlert.ERROR) continue @@ -279,7 +279,7 @@ class Theme: continue logger.verbose("Checking theme syntax for '%s'" % syntaxFile) try: - confParser.read_file(open(syntaxPath,mode="r",encoding="utf8")) + confParser.read_file(open(syntaxPath, mode="r", encoding="utf8")) except Exception as e: self.theParent.makeAlert(["Could not load syntax file",str(e)],nwAlert.ERROR) return [] diff --git a/nw/tools/analyse.py b/nw/tools/analyse.py index bb847d74..e0866526 100644 --- a/nw/tools/analyse.py +++ b/nw/tools/analyse.py @@ -130,8 +130,8 @@ class TextAnalysis(): else: cleanText += " " - asVow = "aeiouy'’" - dExept = ("ei","ie","ua","ia","eo") + asVow = "aeiouy'’" + dExept = ("ei","ie","ua","ia","eo") theWords = cleanText.lower().split() allSylls = 0 for inWord in theWords: diff --git a/nw/tools/wordcount.py b/nw/tools/wordcount.py index d6fad51a..4ce7cc1e 100644 --- a/nw/tools/wordcount.py +++ b/nw/tools/wordcount.py @@ -34,7 +34,7 @@ def countWords(theText): if aLine[0] == "@" or aLine[0] == "%": continue - if aLine[0:5] == "#### ": + if aLine[0:5] == "#### ": wordCount -= 1 charCount -= 5 countPara = False