Use enums for build formats

This commit is contained in:
Veronica Berglyd Olsen
2023-06-08 23:32:32 +02:00
parent 4ee452d186
commit 8ef1a12201
5 changed files with 62 additions and 31 deletions
+20 -10
View File
@@ -25,7 +25,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP
from novelwriter.enum import nwItemClass, nwItemLayout, nwOutline from novelwriter.enum import nwBuildFmt, nwItemClass, nwItemLayout, nwOutline
def trConst(tString): def trConst(tString):
@@ -205,15 +205,25 @@ class nwLabels:
nwOutline.CUSTOM: KEY_NAME[nwKeyWords.CUSTOM_KEY], nwOutline.CUSTOM: KEY_NAME[nwKeyWords.CUSTOM_KEY],
nwOutline.SYNOP: QT_TRANSLATE_NOOP("Constant", "Synopsis"), nwOutline.SYNOP: QT_TRANSLATE_NOOP("Constant", "Synopsis"),
} }
BUILD_FORMATS = { BUILD_FMT = {
"odt": (".odt", QT_TRANSLATE_NOOP("Constant", "Open Document (.odt)")), nwBuildFmt.ODT: QT_TRANSLATE_NOOP("Constant", "Open Document (.odt)"),
"fodt": (".fodt", QT_TRANSLATE_NOOP("Constant", "Flat Open Document (.fodt)")), nwBuildFmt.FODT: QT_TRANSLATE_NOOP("Constant", "Flat Open Document (.fodt)"),
"html": (".html", QT_TRANSLATE_NOOP("Constant", "novelWriter HTML (.html)")), nwBuildFmt.HTML: QT_TRANSLATE_NOOP("Constant", "novelWriter HTML (.html)"),
"nwd": (".nwd", QT_TRANSLATE_NOOP("Constant", "novelWriter Markdown (.nwd)")), nwBuildFmt.NWD: QT_TRANSLATE_NOOP("Constant", "novelWriter Markup (.txt)"),
"md": (".md", QT_TRANSLATE_NOOP("Constant", "Standard Markdown (.md)")), nwBuildFmt.STD_MD: QT_TRANSLATE_NOOP("Constant", "Standard Markdown (.md)"),
"md+": (".md", QT_TRANSLATE_NOOP("Constant", "Extended Markdown (.md)")), nwBuildFmt.EXT_MD: QT_TRANSLATE_NOOP("Constant", "Extended Markdown (.md)"),
"jhtml": (".json", QT_TRANSLATE_NOOP("Constant", "JSON + novelWriter HTML (.json)")), nwBuildFmt.J_HTML: QT_TRANSLATE_NOOP("Constant", "JSON + novelWriter HTML (.json)"),
"jnwd": (".json", QT_TRANSLATE_NOOP("Constant", "JSON + novelWriter Markdown (.json)")), nwBuildFmt.J_NWD: QT_TRANSLATE_NOOP("Constant", "JSON + novelWriter Markup (.json)"),
}
BUILD_EXT = {
nwBuildFmt.ODT: ".odt",
nwBuildFmt.FODT: ".fodt",
nwBuildFmt.HTML: ".html",
nwBuildFmt.NWD: ".txt",
nwBuildFmt.STD_MD: ".md",
nwBuildFmt.EXT_MD: ".md",
nwBuildFmt.J_HTML: ".json",
nwBuildFmt.J_NWD: ".json",
} }
# END Class nwLabels # END Class nwLabels
+14 -9
View File
@@ -34,11 +34,12 @@ from pathlib import Path
from PyQt5.QtCore import QT_TRANSLATE_NOOP from PyQt5.QtCore import QT_TRANSLATE_NOOP
from novelwriter.enum import nwBuildFmt
from novelwriter.error import logException
from novelwriter.common import checkUuid, isHandle, jsonEncode from novelwriter.common import checkUuid, isHandle, jsonEncode
from novelwriter.constants import nwFiles, nwHeadFmt, nwLabels from novelwriter.constants import nwFiles, nwHeadFmt
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.core.project import NWProject from novelwriter.core.project import NWProject
from novelwriter.error import logException
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -140,7 +141,7 @@ class BuildSettings:
self._uuid = str(uuid.uuid4()) self._uuid = str(uuid.uuid4())
self._path = Path.home() self._path = Path.home()
self._build = "" self._build = ""
self._format = "odt" self._format = nwBuildFmt.ODT
self._skipRoot = set() self._skipRoot = set()
self._excluded = set() self._excluded = set()
self._included = set() self._included = set()
@@ -175,7 +176,7 @@ class BuildSettings:
return self._build return self._build
@property @property
def lastFormat(self) -> str: def lastFormat(self) -> nwBuildFmt:
"""The last used build format.""" """The last used build format."""
return self._format return self._format
@@ -252,10 +253,10 @@ class BuildSettings:
self._changed = True self._changed = True
return return
def setLastFormat(self, key: str): def setLastFormat(self, value: nwBuildFmt):
"""Set the last used build format.""" """Set the last used build format."""
if key in nwLabels.BUILD_FORMATS: if isinstance(value, nwBuildFmt):
self._format = key self._format = value
self._changed = True self._changed = True
return return
@@ -377,7 +378,7 @@ class BuildSettings:
"uuid": self._uuid, "uuid": self._uuid,
"path": str(self._path), "path": str(self._path),
"build": self._build, "build": self._build,
"format": self._format, "format": self._format.name,
"settings": self._settings.copy(), "settings": self._settings.copy(),
"content": { "content": {
"included": list(self._included), "included": list(self._included),
@@ -398,7 +399,11 @@ class BuildSettings:
self.setBuildID(data.get("uuid", "")) self.setBuildID(data.get("uuid", ""))
self.setLastPath(data.get("path", None)) self.setLastPath(data.get("path", None))
self.setLastBuildName(data.get("build", "")) self.setLastBuildName(data.get("build", ""))
self.setLastFormat(data.get("format", "odt"))
buildFmt = str(data.get("build", ""))
if buildFmt in nwBuildFmt.__members__:
self.setLastFormat(nwBuildFmt[buildFmt])
if isinstance(included, list): if isinstance(included, list):
self._included = set([h for h in included if isHandle(h)]) self._included = set([h for h in included if isHandle(h)])
if isinstance(excluded, list): if isinstance(excluded, list):
+6 -5
View File
@@ -31,6 +31,7 @@ from pathlib import Path
from PyQt5.QtGui import QFont, QFontInfo from PyQt5.QtGui import QFont, QFontInfo
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.enum import nwBuildFmt
from novelwriter.error import formatException from novelwriter.error import formatException
from novelwriter.core.tomd import ToMarkdown from novelwriter.core.tomd import ToMarkdown
from novelwriter.core.toodt import ToOdt from novelwriter.core.toodt import ToOdt
@@ -106,15 +107,15 @@ class NWBuildDocument:
self._queue.append(item.itemHandle) self._queue.append(item.itemHandle)
return return
def iterBuild(self, path: Path, bFormat: str) -> Iterable[tuple[int, bool]]: def iterBuild(self, path: Path, bFormat: nwBuildFmt) -> Iterable[tuple[int, bool]]:
"""Wrapper for builders based on format.""" """Wrapper for builders based on format."""
if bFormat in ("odt", "fodt"): if bFormat in (nwBuildFmt.ODT, nwBuildFmt.FODT):
yield from self.iterBuildOpenDocument(path, bFormat == "fodt") yield from self.iterBuildOpenDocument(path, bFormat == "fodt")
elif bFormat in ("html", "jhtml"): elif bFormat in (nwBuildFmt.HTML, nwBuildFmt.J_HTML):
yield from self.iterBuildHTML(path if bFormat == "html" else None) yield from self.iterBuildHTML(path if bFormat == "html" else None)
elif bFormat in ("md", "md+"): elif bFormat in (nwBuildFmt.STD_MD, nwBuildFmt.EXT_MD):
yield from self.iterBuildMarkdown(path, bFormat == "md+") yield from self.iterBuildMarkdown(path, bFormat == "md+")
elif bFormat in ("nwd", "jnwd"): elif bFormat in (nwBuildFmt.NWD, nwBuildFmt.J_NWD):
yield from self.iterBuildNovelWriter(path if bFormat == "nwd" else None) yield from self.iterBuildNovelWriter(path if bFormat == "nwd" else None)
return return
+14
View File
@@ -171,3 +171,17 @@ class nwOutline(Enum):
SYNOP = 16 SYNOP = 16
# END Enum nwOutline # END Enum nwOutline
class nwBuildFmt(Enum):
ODT = 0
FODT = 1
HTML = 2
NWD = 3
STD_MD = 4
EXT_MD = 5
J_HTML = 6
J_NWD = 7
# END Enum nwBuildFormat
+8 -7
View File
@@ -36,10 +36,11 @@ from PyQt5.QtWidgets import (
) )
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.enum import nwBuildFmt
from novelwriter.common import makeFileNameSafe from novelwriter.common import makeFileNameSafe
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.core.docbuild import NWBuildDocument
from novelwriter.core.buildsettings import BuildSettings from novelwriter.core.buildsettings import BuildSettings
if TYPE_CHECKING: if TYPE_CHECKING:
@@ -91,9 +92,9 @@ class GuiManuscriptBuild(QDialog):
self.listFormats = QListWidget() self.listFormats = QListWidget()
self.listFormats.setIconSize(QSize(iPx, iPx)) self.listFormats.setIconSize(QSize(iPx, iPx))
current = None current = None
for key, (_, label) in nwLabels.BUILD_FORMATS.items(): for key in nwBuildFmt:
item = QListWidgetItem() item = QListWidgetItem()
item.setText(label) item.setText(nwLabels.BUILD_FMT[key])
item.setData(self.D_KEY, key) item.setData(self.D_KEY, key)
self.listFormats.addItem(item) self.listFormats.addItem(item)
if key == self._build.lastFormat: if key == self._build.lastFormat:
@@ -275,7 +276,7 @@ class GuiManuscriptBuild(QDialog):
def _runBuild(self) -> bool: def _runBuild(self) -> bool:
"""Run the currently selected build.""" """Run the currently selected build."""
selFormat = self._getSelectedFormat() selFormat = self._getSelectedFormat()
if not selFormat or selFormat not in nwLabels.BUILD_FORMATS: if not isinstance(selFormat, nwBuildFmt):
return False return False
lastName = self.buildName.text().strip() lastName = self.buildName.text().strip()
@@ -283,7 +284,7 @@ class GuiManuscriptBuild(QDialog):
self._doResetBuildName() self._doResetBuildName()
lastPath = self._build.lastPath lastPath = self._build.lastPath
selExt = nwLabels.BUILD_FORMATS[selFormat][0] selExt = nwLabels.BUILD_EXT[selFormat]
selName = Path(makeFileNameSafe(lastName)).with_suffix(selExt) selName = Path(makeFileNameSafe(lastName)).with_suffix(selExt)
self.buildProgress.setValue(0) self.buildProgress.setValue(0)
@@ -308,11 +309,11 @@ class GuiManuscriptBuild(QDialog):
return True return True
def _getSelectedFormat(self) -> str | None: def _getSelectedFormat(self) -> nwBuildFmt | None:
"""Get the currently selected format.""" """Get the currently selected format."""
items = self.listFormats.selectedItems() items = self.listFormats.selectedItems()
if items and isinstance(items[0], QListWidgetItem): if items and isinstance(items[0], QListWidgetItem):
return str(items[0].data(self.D_KEY)) return items[0].data(self.D_KEY)
return None return None
def _saveSettings(self): def _saveSettings(self):