From 3089c798dc3cf58d0d72a48306f1dd60663360b5 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sat, 9 May 2020 19:26:28 +0200 Subject: [PATCH 01/53] Added the Build Project dialog and connected it to the GUI in place of the Export tool --- nw/gui/__init__.py | 14 ++++++----- nw/gui/build.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++ nw/gui/mainmenu.py | 10 ++++---- nw/guimain.py | 8 +++---- 4 files changed, 75 insertions(+), 15 deletions(-) create mode 100644 nw/gui/build.py diff --git a/nw/gui/__init__.py b/nw/gui/__init__.py index c59bfed9..7d4633b5 100644 --- a/nw/gui/__init__.py +++ b/nw/gui/__init__.py @@ -1,15 +1,16 @@ # -*- coding: utf-8 -*- -# Qt Additions -from nw.gui.additions.qconfiglayout import QConfigLayout -from nw.gui.additions.qswitch import QSwitch - # Main Window Elements +from nw.gui.build import GuiBuildNovel from nw.gui.icons import GuiIcons from nw.gui.mainmenu import GuiMainMenu from nw.gui.statusbar import GuiMainStatus from nw.gui.theme import GuiTheme +# Qt Additions +from nw.gui.additions.qconfiglayout import QConfigLayout +from nw.gui.additions.qswitch import QSwitch + # Dialogs from nw.gui.dialogs.configeditor import GuiConfigEditor from nw.gui.dialogs.docmerge import GuiDocMerge @@ -37,12 +38,13 @@ from nw.gui.tools.optionstate import OptionState from nw.gui.tools.wordcounter import WordCounter __all__ = [ - "QConfigLayout", - "QSwitch", + "GuiBuildNovel", "GuiIcons", "GuiMainMenu", "GuiMainStatus", "GuiTheme", + "QConfigLayout", + "QSwitch", "GuiConfigEditor", "GuiDocMerge", "GuiDocSplit", diff --git a/nw/gui/build.py b/nw/gui/build.py new file mode 100644 index 00000000..f08ae287 --- /dev/null +++ b/nw/gui/build.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +"""novelWriter GUI Build Novel + + novelWriter – GUI Build Novel +=============================== + Class holding the build novel window + + File History: + Created: 2020-05-09 [0.5] + + 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 nw + +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import ( + QDialog +) + +from nw.constants import nwConst, nwFiles, nwAlert + +logger = logging.getLogger(__name__) + +class GuiBuildNovel(QDialog): + + def __init__(self, theParent, theProject): + QDialog.__init__(self, theParent) + + logger.debug("Initialising GuiBuildNovel ...") + + self.mainConf = nw.CONFIG + self.theProject = theProject + self.theParent = theParent + self.optState = self.theProject.optState + + self.show() + + logger.debug("GuiBuildNovel initialisation complete") + + return + +# END Class GuiBuildNovel diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index a37ddf0c..ddc60daa 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -225,11 +225,11 @@ class GuiMainMenu(QMenuBar): self.projMenu.addAction(self.aProjectSettings) # Project > Export Project - self.aExportProject = QAction("Export Project", self) - self.aExportProject.setStatusTip("Export project") - self.aExportProject.setShortcut("F5") - self.aExportProject.triggered.connect(self.theParent.exportProjectDialog) - self.projMenu.addAction(self.aExportProject) + self.aBuildProject = QAction("Build Project", self) + self.aBuildProject.setStatusTip("Build project") + self.aBuildProject.setShortcut("F5") + self.aBuildProject.triggered.connect(self.theParent.buildProjectDialog) + self.projMenu.addAction(self.aBuildProject) # Project > Session Log self.aSessionLog = QAction("Session Log", self) diff --git a/nw/guimain.py b/nw/guimain.py index 2f1380bd..bbf047b0 100644 --- a/nw/guimain.py +++ b/nw/guimain.py @@ -40,10 +40,10 @@ from PyQt5.QtWidgets import ( ) from nw.gui import ( - GuiMainMenu, GuiMainStatus, GuiTheme, GuiDocTree, GuiDocEditor, GuiExport, + GuiMainMenu, GuiMainStatus, GuiTheme, GuiDocTree, GuiDocEditor, GuiDocViewer, GuiDocDetails, GuiSearchBar, GuiNoticeBar, GuiDocViewDetails, GuiConfigEditor, GuiProjectEditor, GuiItemEditor, GuiProjectOutline, - GuiSessionLogView, GuiDocMerge, GuiDocSplit, GuiProjectLoad + GuiSessionLogView, GuiDocMerge, GuiDocSplit, GuiProjectLoad, GuiBuildNovel ) from nw.core import NWProject, NWDoc, NWIndex, countWords from nw.constants import nwFiles, nwItemType, nwAlert @@ -755,9 +755,9 @@ class GuiMain(QMainWindow): self._setWindowTitle(self.theProject.projName) return True - def exportProjectDialog(self): + def buildProjectDialog(self): if self.hasProject: - dlgExport = GuiExport(self, self.theProject) + dlgExport = GuiBuildNovel(self, self.theProject) dlgExport.exec_() return True From 3b136bddbb0dfd8d29292acf4df50efb48cb2486 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sat, 9 May 2020 20:02:19 +0200 Subject: [PATCH 02/53] Added document to build GUI --- nw/gui/build.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/nw/gui/build.py b/nw/gui/build.py index f08ae287..82525d6f 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -29,8 +29,9 @@ import logging import nw from PyQt5.QtCore import Qt +from PyQt5.QtGui import QTextOption, QPalette, QColor from PyQt5.QtWidgets import ( - QDialog + QDialog, QVBoxLayout, QHBoxLayout, QTextBrowser ) from nw.constants import nwConst, nwFiles, nwAlert @@ -49,6 +50,20 @@ class GuiBuildNovel(QDialog): self.theParent = theParent self.optState = self.theProject.optState + self.setWindowTitle("Build Project") + self.setMinimumWidth(400) + self.setMinimumHeight(400) + + self.outerBox = QVBoxLayout() + self.innerBox = QHBoxLayout() + + self.docView = GuiBuildNovelDocView(self, self.theProject) + + # Assemble GUI + self.innerBox.addWidget(self.docView) + self.outerBox.addLayout(self.innerBox) + self.setLayout(self.outerBox) + self.show() logger.debug("GuiBuildNovel initialisation complete") @@ -56,3 +71,38 @@ class GuiBuildNovel(QDialog): return # END Class GuiBuildNovel + +class GuiBuildNovelDocView(QTextBrowser): + + def __init__(self, theParent, theProject): + QTextBrowser.__init__(self, theParent) + + logger.debug("Initialising GuiBuildNovelDocView ...") + + self.mainConf = nw.CONFIG + self.theProject = theProject + self.theParent = theParent + + self.qDocument = self.document() + self.setMinimumWidth(300) + self.setOpenExternalLinks(False) + + theOpt = QTextOption() + if self.mainConf.doJustify: + theOpt.setAlignment(Qt.AlignJustify) + self.qDocument.setDefaultTextOption(theOpt) + + docPalette = self.palette() + docPalette.setColor(QPalette.Base, QColor(255, 255, 255)) + docPalette.setColor(QPalette.Text, QColor( 0, 0, 0)) + self.setPalette(docPalette) + + self.setHtml("

Hello World

Some text ...

") + + self.show() + + logger.debug("GuiBuildNovelDocView initialisation complete") + + return + +# END Class GuiBuildNovelDocView From 42b819acd9e92a74dcc111fa470900d9b0af6212 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sat, 9 May 2020 20:05:42 +0200 Subject: [PATCH 03/53] Added exported option to NWItem --- nw/core/project.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nw/core/project.py b/nw/core/project.py index ca1d7a55..7011a7da 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -1288,6 +1288,7 @@ class NWItem(): self.itemLayout = nwItemLayout.NO_LAYOUT self.itemStatus = None self.isExpanded = False + self.isExported = True # Document Meta Data self.charCount = 0 @@ -1314,6 +1315,7 @@ class NWItem(): xSub = self._subPack(xPack,"class", text=str(self.itemClass.name)) xSub = self._subPack(xPack,"status", text=str(self.itemStatus)) xSub = self._subPack(xPack,"expanded", text=str(self.isExpanded)) + xSub = self._subPack(xPack,"exported", text=str(self.isExported)) if self.itemType == nwItemType.FILE: xSub = self._subPack(xPack,"layout", text=str(self.itemLayout.name)) xSub = self._subPack(xPack,"charCount", text=str(self.charCount), none=False) @@ -1347,6 +1349,7 @@ class NWItem(): "layout" : self.setLayout, "status" : self.setStatus, "expanded" : self.setExpanded, + "exported" : self.setExported, "charCount" : self.setCharCount, "wordCount" : self.setWordCount, "paraCount" : self.setParaCount, @@ -1447,6 +1450,13 @@ class NWItem(): self.isExpanded = expState == True return + def setExported(self, expState): + if isinstance(expState, str): + self.isExported = expState == str(True) + else: + self.isExported = expState == True + return + ## # Set Document Meta Data ## From ef40d4f2de9db2cc1106f9adcceee06f98a68ae1 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sat, 9 May 2020 20:51:27 +0200 Subject: [PATCH 04/53] Added the new exported option to project tree and item editor --- nw/gui/dialogs/configeditor.py | 1 + nw/gui/dialogs/itemeditor.py | 57 +++++++++++++++++++++----------- nw/gui/dialogs/projecteditor.py | 5 +-- nw/gui/elements/doctree.py | 13 ++++++-- sample/sampleNovel/nwProject.nwx | 24 ++++++++++++-- 5 files changed, 74 insertions(+), 26 deletions(-) diff --git a/nw/gui/dialogs/configeditor.py b/nw/gui/dialogs/configeditor.py index 581d7307..e3bf4f7b 100644 --- a/nw/gui/dialogs/configeditor.py +++ b/nw/gui/dialogs/configeditor.py @@ -59,6 +59,7 @@ class GuiConfigEditor(QDialog): self.setWindowTitle("Preferences") self.guiDeco = self.theParent.theTheme.loadDecoration("settings",(64,64)) + self.outerBox.setSpacing(16) self.tabGeneral = GuiConfigEditGeneralTab(self.theParent) self.tabLayout = GuiConfigEditLayoutTab(self.theParent) diff --git a/nw/gui/dialogs/itemeditor.py b/nw/gui/dialogs/itemeditor.py index 30c4721c..fbd7d4dd 100644 --- a/nw/gui/dialogs/itemeditor.py +++ b/nw/gui/dialogs/itemeditor.py @@ -30,10 +30,11 @@ import nw from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QFormLayout, QLineEdit, - QPushButton, QComboBox + QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QGridLayout, QLineEdit, + QPushButton, QComboBox, QLabel, QSpacerItem, QSizePolicy, QDialogButtonBox ) +from nw.gui.additions import QSwitch from nw.constants import nwLabels, nwItemLayout, nwItemClass, nwItemType logger = logging.getLogger(__name__) @@ -48,22 +49,26 @@ class GuiItemEditor(QDialog): self.mainConf = nw.CONFIG self.theProject = theProject self.theParent = theParent - self.theItem = self.theProject.projTree[tHandle] - self.outerBox = QHBoxLayout() self.innerBox = QVBoxLayout() + self.theItem = self.theProject.projTree[tHandle] + if self.theItem is None: + self._doClose() + self.setWindowTitle("Item Settings") self.guiDeco = self.theParent.theTheme.loadDecoration("settings",(64,64)) + self.outerBox.setSpacing(16) self.setLayout(self.outerBox) self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) self.outerBox.addLayout(self.innerBox) self.mainGroup = QGroupBox("Item Settings") - self.mainForm = QFormLayout() + self.mainForm = QGridLayout() self.editName = QLineEdit() + self.editName.setMinimumWidth(220) self.editName.setMaxLength(200) self.editStatus = QComboBox() @@ -100,11 +105,21 @@ class GuiItemEditor(QDialog): if itemLayout in self.validLayouts: self.editLayout.addItem(nwLabels.LAYOUT_NAME[itemLayout],itemLayout) - self.mainForm.addRow("Label", self.editName) - self.mainForm.addRow("Status", self.editStatus) - self.mainForm.addRow("Layout", self.editLayout) + self.editExport = QSwitch() + self.editExport.setChecked(self.theItem.isExported) + self.textExport = QLabel("Include when building project") - self.editName.setMinimumWidth(200) + self.mainForm.addWidget(QLabel("Label"), 0, 0) + self.mainForm.addWidget(self.editName, 0, 1, 1, 2) + self.mainForm.addWidget(QLabel("Status"), 1, 0) + self.mainForm.addWidget(self.editStatus, 1, 1, 1, 2) + self.mainForm.addWidget(QLabel("Layout"), 2, 0) + self.mainForm.addWidget(self.editLayout, 2, 1, 1, 2) + self.mainForm.addWidget(self.textExport, 4, 0, 1, 2) + self.mainForm.addWidget(self.editExport, 4, 2) + + self.spacerItem = QSpacerItem(12, 12, QSizePolicy.Fixed, QSizePolicy.Fixed) + self.mainForm.addItem(self.spacerItem, 3, 0) self.editName.setText(self.theItem.itemName) statusIdx = self.editStatus.findData(self.theItem.itemStatus) @@ -114,19 +129,13 @@ class GuiItemEditor(QDialog): if layoutIdx != -1: self.editLayout.setCurrentIndex(layoutIdx) - self.buttonBox = QHBoxLayout() - self.closeButton = QPushButton("Close") - self.closeButton.clicked.connect(self._doClose) - self.saveButton = QPushButton("Save") - self.saveButton.setDefault(True) - self.saveButton.clicked.connect(self._doSave) - self.buttonBox.addStretch(1) - self.buttonBox.addWidget(self.closeButton) - self.buttonBox.addWidget(self.saveButton) + self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + self.buttonBox.accepted.connect(self._doSave) + self.buttonBox.rejected.connect(self._doClose) self.mainGroup.setLayout(self.mainForm) self.innerBox.addWidget(self.mainGroup) - self.innerBox.addLayout(self.buttonBox) + self.innerBox.addWidget(self.buttonBox) self.show() @@ -137,16 +146,26 @@ class GuiItemEditor(QDialog): return def _doSave(self): + """Save the setting to the item. + """ + logger.verbose("ItemEditor save button clicked") + itemName = self.editName.text() itemStatus = self.editStatus.currentData() itemLayout = self.editLayout.currentData() + isExported = self.editExport.isChecked() + self.theItem.setName(itemName) self.theItem.setStatus(itemStatus) self.theItem.setLayout(itemLayout) + self.theItem.setExported(isExported) + self.theProject.setProjectChanged(True) + self.accept() self.close() + return def _doClose(self): diff --git a/nw/gui/dialogs/projecteditor.py b/nw/gui/dialogs/projecteditor.py index ffcd2516..3df14269 100644 --- a/nw/gui/dialogs/projecteditor.py +++ b/nw/gui/dialogs/projecteditor.py @@ -54,10 +54,10 @@ class GuiProjectEditor(QDialog): self.outerBox = QHBoxLayout() self.innerBox = QVBoxLayout() - self.setWindowTitle("Project Settings") - self.setLayout(self.outerBox) + self.setWindowTitle("Project Settings") self.guiDeco = self.theParent.theTheme.loadDecoration("settings",(64,64)) + self.outerBox.setSpacing(16) self.theProject.countStatus() self.tabMain = GuiProjectEditMain(self.theParent, self.theProject) @@ -78,6 +78,7 @@ class GuiProjectEditor(QDialog): self.buttonBox.accepted.connect(self._doSave) self.buttonBox.rejected.connect(self._doClose) + self.setLayout(self.outerBox) self.innerBox.addWidget(self.tabWidget) self.innerBox.addWidget(self.buttonBox) diff --git a/nw/gui/elements/doctree.py b/nw/gui/elements/doctree.py index 92a006de..193295e1 100644 --- a/nw/gui/elements/doctree.py +++ b/nw/gui/elements/doctree.py @@ -36,7 +36,7 @@ from PyQt5.QtWidgets import ( from nw.core import NWDoc from nw.constants import ( - nwLabels, nwItemType, nwItemClass, nwItemLayout, nwAlert + nwLabels, nwItemType, nwItemClass, nwItemLayout, nwAlert, nwUnicode ) logger = logging.getLogger(__name__) @@ -254,6 +254,8 @@ class GuiDocTree(QTreeWidget): return theList def getColumnSizes(self): + """Return the column widths for the tree columns. + """ retVals = [ self.columnWidth(0), self.columnWidth(1), @@ -401,7 +403,8 @@ class GuiDocTree(QTreeWidget): return True def setTreeItemValues(self, tHandle): - + """Set the name and flag values for a tree item. + """ trItem = self._getTreeItem(tHandle) nwItem = self.theProject.projTree[tHandle] tName = nwItem.itemName @@ -409,7 +412,11 @@ class GuiDocTree(QTreeWidget): tHandle = nwItem.itemHandle pHandle = nwItem.parHandle - tStatus = nwLabels.CLASS_FLAG[nwItem.itemClass] + if nwItem.isExported: + tStatus = nwUnicode.U_CHECK + else: + tStatus = " " + tStatus += " "+nwLabels.CLASS_FLAG[nwItem.itemClass] if nwItem.itemType == nwItemType.FILE: tStatus += "."+nwLabels.LAYOUT_FLAG[nwItem.itemLayout] iStatus = nwItem.itemStatus diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index a452021d..68ac9522 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project @@ -10,7 +10,7 @@ True True - 96b68994dfa3d + 6a2d6d5f4f401 b3e74dbc1f584 875 @@ -41,6 +41,7 @@ NOVEL Started True + True Title Page @@ -48,6 +49,7 @@ NOVEL Started False + True TITLE 72 15 @@ -60,6 +62,7 @@ NOVEL 1st Draft True + True Chapter One @@ -67,6 +70,7 @@ NOVEL Notes False + True CHAPTER 12 3 @@ -79,6 +83,7 @@ NOVEL 1st Draft False + True SCENE 1199 216 @@ -91,6 +96,7 @@ NOVEL 1st Draft False + True SCENE 476 93 @@ -103,6 +109,7 @@ NOVEL Finished False + True UNNUMBERED 633 101 @@ -115,6 +122,7 @@ NOVEL 2nd Draft False + False NOTE 1692 313 @@ -127,6 +135,7 @@ NOVEL 1st Draft False + True CHAPTER 139 28 @@ -139,6 +148,7 @@ NOVEL 1st Draft False + True SCENE 189 37 @@ -151,6 +161,7 @@ CHARACTER None True + True Main Characters @@ -158,6 +169,7 @@ CHARACTER None True + True John Smith @@ -165,6 +177,7 @@ CHARACTER Minor False + True NOTE 49 9 @@ -177,6 +190,7 @@ CHARACTER Major False + True NOTE 55 9 @@ -189,6 +203,7 @@ WORLD None True + True Earth @@ -196,6 +211,7 @@ WORLD Main False + True NOTE 76 15 @@ -208,6 +224,7 @@ WORLD Minor False + True NOTE 115 24 @@ -220,6 +237,7 @@ WORLD Major False + True NOTE 28 6 @@ -232,6 +250,7 @@ TRASH None True + True Delete Me! @@ -239,6 +258,7 @@ NOVEL New False + True SCENE 30 6 From 91dd15ab57ed681fb394b46d7492678837705bfa Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sat, 9 May 2020 21:48:35 +0200 Subject: [PATCH 05/53] Rewritten the tree details pane to show more info --- nw/gui/elements/docdetails.py | 140 +++++++++++++++++++++++++++------- 1 file changed, 112 insertions(+), 28 deletions(-) diff --git a/nw/gui/elements/docdetails.py b/nw/gui/elements/docdetails.py index a55e44c2..de547c06 100644 --- a/nw/gui/elements/docdetails.py +++ b/nw/gui/elements/docdetails.py @@ -32,7 +32,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont from PyQt5.QtWidgets import QFrame, QGridLayout, QLabel -from nw.constants import nwLabels +from nw.constants import nwLabels, nwItemClass, nwUnicode logger = logging.getLogger(__name__) @@ -48,7 +48,7 @@ class GuiDocDetails(QFrame): self.mainBox = QGridLayout(self) self.mainBox.setVerticalSpacing(1) - self.mainBox.setHorizontalSpacing(15) + self.mainBox.setHorizontalSpacing(6) self.setLayout(self.mainBox) self.fntOne = QFont() @@ -56,50 +56,134 @@ class GuiDocDetails(QFrame): self.fntOne.setBold(True) self.fntTwo = QFont() + self.fntTwo.setFamily("Monospace") self.fntTwo.setPointSize(10) - self.colTwo = [ - QLabel(""), - QLabel(""), - QLabel(""), - QLabel("") - ] - colOne = ["Label","Status","Class","Layout"] - for nRow in range(4): - lblOne = QLabel(colOne[nRow]) - lblOne.setFont(self.fntOne) - lblOne.setAlignment(Qt.AlignTop) - self.mainBox.addWidget(lblOne,nRow,0) - self.mainBox.addWidget(self.colTwo[nRow],nRow,1) - self.colTwo[nRow].setWordWrap(True) - self.colTwo[nRow].setAlignment(Qt.AlignTop) + self.fntThree = QFont() + self.fntThree.setPointSize(10) + + # Label + self.labelName = QLabel("Label ") + self.labelName.setFont(self.fntOne) + self.labelName.setAlignment(Qt.AlignLeft | Qt.AlignBaseline) + + self.labelFlag = QLabel("") + self.labelFlag.setFont(self.fntTwo) + self.labelFlag.setAlignment(Qt.AlignRight | Qt.AlignBaseline) + + self.labelData = QLabel("") + self.labelData.setFont(self.fntThree) + self.labelData.setAlignment(Qt.AlignLeft | Qt.AlignBaseline) + self.labelData.setWordWrap(True) + + # Status + self.statusName = QLabel("Status ") + self.statusName.setFont(self.fntOne) + self.statusName.setAlignment(Qt.AlignLeft) + + self.statusFlag = QLabel("") + self.statusFlag.setFont(self.fntTwo) + self.statusFlag.setAlignment(Qt.AlignRight | Qt.AlignVCenter) + + self.statusData = QLabel("") + self.statusData.setFont(self.fntThree) + self.statusData.setAlignment(Qt.AlignLeft) + + # Class + self.className = QLabel("Class ") + self.className.setFont(self.fntOne) + self.className.setAlignment(Qt.AlignLeft) + + self.classFlag = QLabel("") + self.classFlag.setFont(self.fntTwo) + self.classFlag.setAlignment(Qt.AlignRight) + + self.classData = QLabel("") + self.classData.setFont(self.fntThree) + self.classData.setAlignment(Qt.AlignLeft) + + # Layout + self.layoutName = QLabel("Layout ") + self.layoutName.setFont(self.fntOne) + self.layoutName.setAlignment(Qt.AlignLeft) + + self.layoutFlag = QLabel("") + self.layoutFlag.setFont(self.fntTwo) + self.layoutFlag.setAlignment(Qt.AlignRight) + + self.layoutData = QLabel("") + self.layoutData.setFont(self.fntThree) + self.layoutData.setAlignment(Qt.AlignLeft) + + # Assemble + self.mainBox.addWidget(self.labelName, 0, 0) + self.mainBox.addWidget(self.statusName, 1, 0) + self.mainBox.addWidget(self.className, 2, 0) + self.mainBox.addWidget(self.layoutName, 3, 0) + self.mainBox.addWidget(self.labelFlag, 0, 1) + self.mainBox.addWidget(self.statusFlag, 1, 1) + self.mainBox.addWidget(self.classFlag, 2, 1) + self.mainBox.addWidget(self.layoutFlag, 3, 1) + self.mainBox.addWidget(self.labelData, 0, 2) + self.mainBox.addWidget(self.statusData, 1, 2) + self.mainBox.addWidget(self.classData, 2, 2) + self.mainBox.addWidget(self.layoutData, 3, 2) self.mainBox.setColumnStretch(0,0) - self.mainBox.setColumnStretch(1,1) + self.mainBox.setColumnStretch(1,0) + self.mainBox.setColumnStretch(2,1) logger.debug("DocDetails initialisation complete") return - def buildViewBox(self, tHandle): + ### + # Class Methods + ## + + def updateViewBox(self, tHandle): + """Populate the details box from a given handle. + """ nwItem = self.theProject.projTree[tHandle] if nwItem is None: - colTwo = [""]*4 + self.labelFlag.setText("") + self.statusFlag.setText("") + self.classFlag.setText("") + self.layoutFlag.setText("") + self.labelData.setText("") + self.statusData.setText("") + self.classData.setText("") + self.layoutData.setText("") + else: theLabel = nwItem.itemName if len(theLabel) > 100: theLabel = theLabel[:96].rstrip()+" ..." - colTwo = [ - theLabel, - nwItem.itemStatus, - nwLabels.CLASS_NAME[nwItem.itemClass], - nwLabels.LAYOUT_NAME[nwItem.itemLayout], - ] - for nRow in range(4): - self.colTwo[nRow].setText(colTwo[nRow]) + iStatus = nwItem.itemStatus + if nwItem.itemClass == nwItemClass.NOVEL: + iStatus = self.theProject.statusItems.checkEntry(iStatus) # Make sure it's valid + flagIcon = self.theParent.statusIcons[iStatus] + else: + iStatus = self.theProject.importItems.checkEntry(iStatus) # Make sure it's valid + flagIcon = self.theParent.importIcons[iStatus] + + if nwItem.isExported: + exportFlag = nwUnicode.U_CHECK + else: + exportFlag = " " + + self.labelFlag.setText(exportFlag) + self.statusFlag.setPixmap(flagIcon.pixmap(10, 10)) + self.classFlag.setText(nwLabels.CLASS_FLAG[nwItem.itemClass]) + self.layoutFlag.setText(nwLabels.LAYOUT_FLAG[nwItem.itemLayout]) + + self.labelData.setText(theLabel) + self.statusData.setText(nwItem.itemStatus) + self.classData.setText(nwLabels.CLASS_NAME[nwItem.itemClass]) + self.layoutData.setText(nwLabels.LAYOUT_NAME[nwItem.itemLayout]) return From 1ad156054c4895f7e5a01b07e03c4ff23c42aa1f Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sat, 9 May 2020 21:49:05 +0200 Subject: [PATCH 06/53] Make sure information is synced properly when item label is changed --- nw/gui/dialogs/itemeditor.py | 4 ++-- nw/gui/elements/doceditor.py | 8 ++++++++ nw/gui/elements/doctree.py | 4 ++-- nw/gui/elements/docviewer.py | 8 ++++++++ nw/guimain.py | 5 ++++- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/nw/gui/dialogs/itemeditor.py b/nw/gui/dialogs/itemeditor.py index fbd7d4dd..432ddb08 100644 --- a/nw/gui/dialogs/itemeditor.py +++ b/nw/gui/dialogs/itemeditor.py @@ -44,7 +44,7 @@ class GuiItemEditor(QDialog): def __init__(self, theParent, theProject, tHandle): QDialog.__init__(self, theParent) - logger.debug("Initialising ItemEditor ...") + logger.debug("Initialising GuiItemEditor ...") self.mainConf = nw.CONFIG self.theProject = theProject @@ -141,7 +141,7 @@ class GuiItemEditor(QDialog): self.editName.selectAll() - logger.debug("ItemEditor initialisation complete") + logger.debug("GuiItemEditor initialisation complete") return diff --git a/nw/gui/elements/doceditor.py b/nw/gui/elements/doceditor.py index 96966ddd..8aa583da 100644 --- a/nw/gui/elements/doceditor.py +++ b/nw/gui/elements/doceditor.py @@ -352,6 +352,14 @@ class GuiDocEditor(QTextEdit): return + def updateDocTitle(self, tHandle): + """Called when an item label is changed to check if the document + title bar needs updating, + """ + if tHandle == self.theHandle: + self.docTitle.setTitleFromHandle(self.theHandle) + return + ## # Setters and Getters ## diff --git a/nw/gui/elements/doctree.py b/nw/gui/elements/doctree.py index 193295e1..0c6b8bb2 100644 --- a/nw/gui/elements/doctree.py +++ b/nw/gui/elements/doctree.py @@ -526,8 +526,8 @@ class GuiDocTree(QTreeWidget): newItem.setText(self.C_HANDLE, tHandle) # newItem.setForeground(self.C_COUNT,QColor(*self.theParent.theTheme.treeWCount)) - newItem.setTextAlignment(self.C_COUNT,Qt.AlignRight) - newItem.setFont(self.C_FLAGS,self.fontFlags) + newItem.setTextAlignment(self.C_COUNT, Qt.AlignRight) + newItem.setFont(self.C_FLAGS, self.fontFlags) self.theMap[tHandle] = newItem if pHandle is None: diff --git a/nw/gui/elements/docviewer.py b/nw/gui/elements/docviewer.py index af51e908..9f3d65ff 100644 --- a/nw/gui/elements/docviewer.py +++ b/nw/gui/elements/docviewer.py @@ -192,6 +192,14 @@ class GuiDocViewer(QTextBrowser): return False return True + def updateDocTitle(self, tHandle): + """Called when an item label is changed to check if the document + title bar needs updating, + """ + if tHandle == self.theHandle: + self.docTitle.setTitleFromHandle(self.theHandle) + return + ## # Events ## diff --git a/nw/guimain.py b/nw/guimain.py index bbf047b0..c76e9c6f 100644 --- a/nw/guimain.py +++ b/nw/guimain.py @@ -629,6 +629,9 @@ class GuiMain(QMainWindow): dlgProj = GuiItemEditor(self, self.theProject, tHandle) if dlgProj.exec_(): self.treeView.setTreeItemValues(tHandle) + self.treeMeta.updateViewBox(tHandle) + self.docEditor.updateDocTitle(tHandle) + self.docViewer.updateDocTitle(tHandle) return @@ -1006,7 +1009,7 @@ class GuiMain(QMainWindow): def _treeSingleClick(self): sHandle = self.treeView.getSelectedHandle() if sHandle is not None: - self.treeMeta.buildViewBox(sHandle) + self.treeMeta.updateViewBox(sHandle) return def _treeDoubleClick(self, tItem, colNo): From 33f4626aec977ada9e36c34c3d1cb6471c4c13f9 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 13:51:22 +0200 Subject: [PATCH 07/53] Moved the convert classes we want to keep to the core folder. The rest will be deleted. --- nw/convert/__init__.py | 27 --------------------------- nw/core/__init__.py | 4 ++++ nw/{convert/text => core}/tohtml.py | 2 +- nw/{convert => core}/tokenizer.py | 0 nw/gui/__init__.py | 2 -- nw/gui/dialogs/__init__.py | 2 -- nw/gui/elements/docviewer.py | 2 +- 7 files changed, 6 insertions(+), 33 deletions(-) delete mode 100644 nw/convert/__init__.py rename nw/{convert/text => core}/tohtml.py (99%) rename nw/{convert => core}/tokenizer.py (100%) diff --git a/nw/convert/__init__.py b/nw/convert/__init__.py deleted file mode 100644 index ea50119a..00000000 --- a/nw/convert/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from nw.convert.tokenizer import Tokenizer - -from nw.convert.file.concat import ConcatFile -from nw.convert.file.html import HtmlFile -from nw.convert.file.latex import LaTeXFile -from nw.convert.file.markdown import MarkdownFile -from nw.convert.file.text import TextFile - -from nw.convert.text.tohtml import ToHtml -from nw.convert.text.tolatex import ToLaTeX -from nw.convert.text.tomarkdown import ToMarkdown -from nw.convert.text.totext import ToText - -__all__ = [ - "Tokenizer", - "ConcatFile", - "HtmlFile", - "LaTeXFile", - "MarkdownFile", - "TextFile", - "ToHtml", - "ToLaTeX", - "ToMarkdown", - "ToText", -] diff --git a/nw/core/__init__.py b/nw/core/__init__.py index a608acd7..6dd65fd2 100644 --- a/nw/core/__init__.py +++ b/nw/core/__init__.py @@ -6,6 +6,8 @@ from nw.core.project import NWProject from nw.core.spellcheck import NWSpellCheck from nw.core.spellcheck import NWSpellEnchant from nw.core.spellcheck import NWSpellSimple +from nw.core.tokenizer import Tokenizer +from nw.core.tohtml import ToHtml from nw.core.tools import countWords from nw.core.tools import projectMaintenance from nw.core.tools import numberToWord @@ -17,6 +19,8 @@ __all__ = [ "NWSpellCheck", "NWSpellEnchant", "NWSpellSimple", + "Tokenizer", + "ToHtml", "countWords", "projectMaintenance", "numberToWord", diff --git a/nw/convert/text/tohtml.py b/nw/core/tohtml.py similarity index 99% rename from nw/convert/text/tohtml.py rename to nw/core/tohtml.py index 330e7bc8..aa63eaff 100644 --- a/nw/convert/text/tohtml.py +++ b/nw/core/tohtml.py @@ -29,7 +29,7 @@ import logging import re import nw -from nw.convert.tokenizer import Tokenizer +from nw.core.tokenizer import Tokenizer from nw.constants import nwUnicode, nwLabels logger = logging.getLogger(__name__) diff --git a/nw/convert/tokenizer.py b/nw/core/tokenizer.py similarity index 100% rename from nw/convert/tokenizer.py rename to nw/core/tokenizer.py diff --git a/nw/gui/__init__.py b/nw/gui/__init__.py index 7d4633b5..c209b8d8 100644 --- a/nw/gui/__init__.py +++ b/nw/gui/__init__.py @@ -15,7 +15,6 @@ from nw.gui.additions.qswitch import QSwitch from nw.gui.dialogs.configeditor import GuiConfigEditor from nw.gui.dialogs.docmerge import GuiDocMerge from nw.gui.dialogs.docsplit import GuiDocSplit -from nw.gui.dialogs.export import GuiExport from nw.gui.dialogs.itemeditor import GuiItemEditor from nw.gui.dialogs.projecteditor import GuiProjectEditor from nw.gui.dialogs.projectload import GuiProjectLoad @@ -48,7 +47,6 @@ __all__ = [ "GuiConfigEditor", "GuiDocMerge", "GuiDocSplit", - "GuiExport", "GuiItemEditor", "GuiProjectEditor", "GuiProjectLoad", diff --git a/nw/gui/dialogs/__init__.py b/nw/gui/dialogs/__init__.py index 2dbc503e..110b5b5e 100644 --- a/nw/gui/dialogs/__init__.py +++ b/nw/gui/dialogs/__init__.py @@ -3,7 +3,6 @@ from nw.gui.dialogs.configeditor import GuiConfigEditor from nw.gui.dialogs.docmerge import GuiDocMerge from nw.gui.dialogs.docsplit import GuiDocSplit -from nw.gui.dialogs.export import GuiExport from nw.gui.dialogs.itemeditor import GuiItemEditor from nw.gui.dialogs.projecteditor import GuiProjectEditor from nw.gui.dialogs.projectload import GuiProjectLoad @@ -13,7 +12,6 @@ __all__ = [ "GuiConfigEditor", "GuiDocMerge", "GuiDocSplit", - "GuiExport", "GuiItemEditor", "GuiProjectEditor", "GuiProjectLoad", diff --git a/nw/gui/elements/docviewer.py b/nw/gui/elements/docviewer.py index 9f3d65ff..c99b1de1 100644 --- a/nw/gui/elements/docviewer.py +++ b/nw/gui/elements/docviewer.py @@ -32,7 +32,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QTextBrowser from PyQt5.QtGui import QTextOption, QFont, QPalette, QColor, QTextCursor -from nw.convert import ToHtml +from nw.core import ToHtml from nw.constants import nwAlert, nwItemType, nwDocAction from nw.gui.elements.doctitlebar import GuiDocTitleBar From 2eaa707f4ed22b70ae81f6fcf202d8a80255201d Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 14:44:44 +0200 Subject: [PATCH 08/53] Some cleanup of the tokenizer and tohtml classes --- nw/convert/file/text.py | 2 +- nw/core/tohtml.py | 22 ++++++++- nw/core/tokenizer.py | 98 +++++++++++++++++++++++++---------------- 3 files changed, 80 insertions(+), 42 deletions(-) diff --git a/nw/convert/file/text.py b/nw/convert/file/text.py index ceab8d55..afcadb10 100644 --- a/nw/convert/file/text.py +++ b/nw/convert/file/text.py @@ -143,7 +143,7 @@ class TextFile(): self.theConv.setText(tHandle) self.theConv.doAutoReplace() self.theConv.tokenizeText() - self.theConv.doHeaders() + self.theConv.formatHeaders() self.theConv.doConvert() self.theConv.doPostProcessing() diff --git a/nw/core/tohtml.py b/nw/core/tohtml.py index aa63eaff..0b786ad6 100644 --- a/nw/core/tohtml.py +++ b/nw/core/tohtml.py @@ -41,6 +41,10 @@ class ToHtml(Tokenizer): self.forPreview = False return + ## + # Setters + ## + def setPreview(self, forPreview, doComments): """If we're using this class to generate markdown preview, we need to make a few changes to formatting, which is selected by @@ -52,7 +56,14 @@ class ToHtml(Tokenizer): self.doComments = doComments return + ## + # Class Methods + ## + def doAutoReplace(self): + """Extend the auto-replace to also properly encode some unicode + characters into their respective HTML entities. + """ Tokenizer.doAutoReplace(self) if self.forPreview: @@ -76,6 +87,9 @@ class ToHtml(Tokenizer): return def doConvert(self): + """Convert the list of text tokens into a HTML document saved + to theResult. + """ htmlTags = { self.FMT_B_B : "", @@ -136,7 +150,7 @@ class ToHtml(Tokenizer): self.theResult += self._formatComments(tText) elif tType == self.T_KEYWORD and self.doKeywords: - self.theResult += self._formatTags(tText) + self.theResult += self._formatKeywords(tText) return @@ -144,7 +158,9 @@ class ToHtml(Tokenizer): # Internal Functions ## - def _formatTags(self, tText): + def _formatKeywords(self, tText): + """Apply HTML formatting to keywords. + """ if not self.forPreview: return "
@%s
\n" % tText @@ -167,6 +183,8 @@ class ToHtml(Tokenizer): return "
%s
" % retText def _formatComments(self, tText): + """Apply HTML formatting to comments. + """ if not self.forPreview: return "
%s
\n" % tText diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index 4ac99377..f9b0264c 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -70,30 +70,45 @@ class Tokenizer(): self.theProject = theProject self.theParent = theParent - self.theText = None - self.theHandle = None - self.theItem = None - self.theTokens = None - self.theResult = None + # Data Variables + self.theText = None # The raw text to be tokenized + self.theHandle = None # The handle associated with the text + self.theItem = None # The NWItem associated with the handle + self.theTokens = None # The list of the processed tokens + self.theResult = None # The result text after conversion - self.wordWrap = 0 - self.doComments = False - self.doKeywords = False + # User Settings + self.doComments = False # Also process comments + self.doKeywords = False # Also process keywords like tags and references - self.fmtTitle = "%title%" - self.fmtChapter = "%title%" - self.fmtUnNum = "%title%" - self.fmtScene = "%title%" - self.fmtSection = "%title%" + self.fmtTitle = "%title%" # Formatting for titles + self.fmtChapter = "%title%" # Formatting for numbered chapters + self.fmtUnNum = "%title%" # Formatting for unnumbered chapters + self.fmtScene = "%title%" # Formatting for scenes + self.fmtSection = "%title%" # Formatting for sections - self.hideScene = False - self.hideSection = False + self.hideScene = False # Do not include scene headers + self.hideSection = False # Do not include section headers - self.numChapter = 0 - self.firstScene = False + # Instance Variables + self.numChapter = 0 # Counter for chapter numbers + self.firstScene = False # Flag to indicate that the first scene of the chapter return + def clearData(self): + """Clear the data arrays and variables, but not settings, so the class + can be reused for multiple documents. + """ + self.theText = None + self.theHandle = None + self.theItem = None + self.theTokens = None + self.theResult = None + self.numChapter = 0 + self.firstScene = False + return + ## # Setters ## @@ -106,13 +121,6 @@ class Tokenizer(): self.doKeywords = doKeywords return - def setWordWrap(self, wordWrap): - if wordWrap >= 0: - self.wordWrap = wordWrap - else: - self.wordWrap = 0 - return - def setTitleFormat(self, fmtTitle): self.fmtTitle = fmtTitle return @@ -140,6 +148,9 @@ class Tokenizer(): ## def setText(self, theHandle, theText=None): + """Set the text for the tokenizer from a handle. If theText is + not set, load it from the file. + """ self.theHandle = theHandle self.theItem = self.theProject.projTree[theHandle] @@ -155,12 +166,16 @@ class Tokenizer(): return def doAutoReplace(self): + """Run through the user's auto-replace dictionary. + """ + if len(self.theProject.autoReplace) > 0: repDict = {} for aKey, aVal in self.theProject.autoReplace.items(): repDict["<%s>" % aKey] = aVal xRep = re.compile("|".join([re.escape(k) for k in repDict.keys()]), flags=re.DOTALL) self.theText = xRep.sub(lambda x: repDict[x.group(0)], self.theText) + return def doPostProcessing(self): @@ -229,6 +244,9 @@ class Tokenizer(): return def doHeaders(self): + """Apply formatting to the text headers according to document + layout and user settings. + """ isNone = self.theItem.itemLayout == nwItemLayout.NO_LAYOUT isTitle = self.theItem.itemLayout == nwItemLayout.TITLE @@ -241,8 +259,8 @@ class Tokenizer(): isNote = self.theItem.itemLayout == nwItemLayout.NOTE # No special header formatting for notes and no-layout files - if isNone: return - if isNote: return + if isNone or isNote: + return # For novel files, we need to handle chapter numbering and scene # breaks @@ -259,12 +277,12 @@ class Tokenizer(): elif tType == self.T_HEAD2: if not isUnNum: self.numChapter += 1 - tText = self._doFormatChapter(tText,isUnNum) + tText = self._formatChapter(tText,isUnNum) self.theTokens[n] = (tType,tText,None,self.A_LEFT) self.firstScene = True elif tType == self.T_HEAD3: - tTemp = self._doFormatScene(tText) + tTemp = self._formatScene(tText) if tTemp == "" and self.hideScene: self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) elif tTemp == "" and not self.hideScene: @@ -282,7 +300,7 @@ class Tokenizer(): self.firstScene = False elif tType == self.T_HEAD4: - tTemp = self._doFormatSection(tText) + tTemp = self._formatSection(tText) if tTemp == "" and self.hideSection: self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) elif tTemp == "" and not self.hideSection: @@ -310,12 +328,16 @@ class Tokenizer(): # Internal Functions ## - def _doFormatTitle(self, theText): + def _formatTitle(self, theText): + """Replace tokens for headers level 1. + """ theTitle = self.fmtTitle theTitle = theTitle.replace("%title%", theText) return theTitle - def _doFormatChapter(self, theText, noNum): + def _formatChapter(self, theText, noNum): + """Replace tokens for headers level 2. + """ if noNum: theTitle = self.fmtUnNum theTitle = theTitle.replace("%title%", theText) @@ -326,20 +348,18 @@ class Tokenizer(): theTitle = theTitle.replace("%numword%", numberToWord(self.numChapter,"en")) return theTitle - def _doFormatScene(self, theText): + def _formatScene(self, theText): + """Replace tokens for headers level 3. + """ theTitle = self.fmtScene theTitle = theTitle.replace("%title%", theText) return theTitle - def _doFormatSection(self, theText): + def _formatSection(self, theText): + """Replace tokens for headers level 4. + """ theTitle = self.fmtSection theTitle = theTitle.replace("%title%", theText) return theTitle - def _centreText(self, theText, theWidth): - tLen = len(theText) - if tLen < theWidth: - return " "*int((theWidth-tLen)/2) + theText - return theText - # END Class Tokenizer From cf3fc2ef4f7591b31e93b6258b9070c84f6ff37b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 15:57:50 +0200 Subject: [PATCH 09/53] Added title formatting settings to project file --- nw/core/project.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index 7011a7da..c2ce2902 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -80,10 +80,9 @@ class NWProject(): self.bookTitle = "" # The final title; should only be used for exports self.bookAuthors = [] # A list of book authors - # Various - self.autoReplace = {} # Text to auto-replace on exports - # Project Settings + self.autoReplace = {} # Text to auto-replace on exports + self.titleFormat = {} # The formatting of titles for exports self.spellCheck = False # Controls the spellcheck-as-you-type feature self.autoOutline = True # If true, the Project Outline is updated automatically self.statusItems = None # Novel file progress status values @@ -200,6 +199,15 @@ class NWProject(): self.bookTitle = "" self.bookAuthors = [] self.autoReplace = {} + self.titleFormat = { + "title": "%title%", + "chapter": "Chapter %num%", + "chapterSub": "%title%", + "unnumbered": "%title%", + "scene": "", + "sceneSep": "* * *", + "section": "", + } self.spellCheck = False self.autoOutline = True self.statusItems = NWStatus() @@ -347,6 +355,11 @@ class NWProject(): elif xItem.tag == "autoReplace": for xEntry in xItem: self.autoReplace[xEntry.tag] = checkString(xEntry.text, None, False) + elif xItem.tag == "titleFormat": + titleFormat = self.titleFormat.copy() + for xEntry in xItem: + titleFormat[xEntry.tag] = checkString(xEntry.text, None, False) + self.setTitleFormat(titleFormat) elif xChild.tag == "content": logger.debug("Found project content") self.projTree.unpackXML(xChild) @@ -417,10 +430,16 @@ class NWProject(): self._packProjectValue(xSettings, "lastEdited", self.lastEdited) self._packProjectValue(xSettings, "lastViewed", self.lastViewed) self._packProjectValue(xSettings, "lastWordCount", self.currWCount) + xAutoRep = etree.SubElement(xSettings, "autoReplace") for aKey, aValue in self.autoReplace.items(): if len(aKey) > 0: - self._packProjectValue(xAutoRep,aKey,aValue) + self._packProjectValue(xAutoRep, aKey, aValue) + + xTitleFmt = etree.SubElement(xSettings, "titleFormat") + for aKey, aValue in self.titleFormat.items(): + if len(aKey) > 0: + self._packProjectValue(xTitleFmt, aKey, aValue) xStatus = etree.SubElement(xSettings,"status") self.statusItems.packEntries(xStatus) @@ -695,6 +714,14 @@ class NWProject(): self.autoReplace = autoReplace return + def setTitleFormat(self, titleFormat): + """Set the formatting of titles in the project. + """ + for valKey in titleFormat: + if valKey in self.titleFormat: + self.titleFormat[valKey] = titleFormat[valKey] + return + def setProjectChanged(self, bValue): """Toggle the project changed flag, and propagate the information to the GUI statusbar. From 5ab1402854d94b034c92ff2713f5cf6aba0d1c25 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 16:12:47 +0200 Subject: [PATCH 10/53] Fix tests --- nw/core/project.py | 2 +- sample/sampleNovel/nwProject.nwx | 11 ++++++++++- tests/reference/gui/0_nwProject.nwx | 17 ++++++++++++++++- tests/reference/gui/1_nwProject.nwx | 20 +++++++++++++++++++- tests/reference/gui/2_nwProject.nwx | 17 ++++++++++++++++- tests/reference/gui/3_nwProject.nwx | 17 ++++++++++++++++- tests/reference/proj/1_nwProject.nwx | 17 ++++++++++++++++- tests/reference/proj/2_nwProject.nwx | 21 ++++++++++++++++++++- tests/test_gui.py | 6 +++--- tests/test_item.py | 3 ++- 10 files changed, 119 insertions(+), 12 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index c2ce2902..8986aeb3 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -358,7 +358,7 @@ class NWProject(): elif xItem.tag == "titleFormat": titleFormat = self.titleFormat.copy() for xEntry in xItem: - titleFormat[xEntry.tag] = checkString(xEntry.text, None, False) + titleFormat[xEntry.tag] = checkString(xEntry.text, "", False) self.setTitleFormat(titleFormat) elif xChild.tag == "content": logger.debug("Found project content") diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index 68ac9522..c911b0a3 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project @@ -18,6 +18,15 @@ E D
+ + %title% + Chapter %num% + %title% + %title% + None + * * * +
None
+
New Notes diff --git a/tests/reference/gui/0_nwProject.nwx b/tests/reference/gui/0_nwProject.nwx index e5368533..d91e4c30 100644 --- a/tests/reference/gui/0_nwProject.nwx +++ b/tests/reference/gui/0_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -12,6 +12,15 @@ None 0 + + %title% + Chapter %num% + %title% + %title% + + * * * +
+
New Note @@ -32,6 +41,7 @@ NOVEL New False + True New Chapter @@ -39,6 +49,7 @@ NOVEL New False + True New Scene @@ -46,6 +57,7 @@ NOVEL New False + True SCENE 0 0 @@ -58,6 +70,7 @@ CHARACTER New False + True Plot @@ -65,6 +78,7 @@ PLOT New False + True World @@ -72,6 +86,7 @@ WORLD New False + True
diff --git a/tests/reference/gui/1_nwProject.nwx b/tests/reference/gui/1_nwProject.nwx index c55ff681..0cb958d1 100644 --- a/tests/reference/gui/1_nwProject.nwx +++ b/tests/reference/gui/1_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -12,6 +12,15 @@ 31489056e0916 86 + + %title% + Chapter %num% + %title% + %title% + + * * * +
+
New Note @@ -32,6 +41,7 @@ NOVEL New True + True New Chapter @@ -39,6 +49,7 @@ NOVEL New True + True New Scene @@ -46,6 +57,7 @@ NOVEL New False + True SCENE 331 59 @@ -58,6 +70,7 @@ CHARACTER New True + True New File @@ -65,6 +78,7 @@ CHARACTER New False + True NOTE 34 8 @@ -77,6 +91,7 @@ PLOT New True + True New File @@ -84,6 +99,7 @@ PLOT New False + True NOTE 48 10 @@ -96,6 +112,7 @@ WORLD New True + True New File @@ -103,6 +120,7 @@ WORLD New False + True NOTE 51 9 diff --git a/tests/reference/gui/2_nwProject.nwx b/tests/reference/gui/2_nwProject.nwx index ca896ec2..0ab86944 100644 --- a/tests/reference/gui/2_nwProject.nwx +++ b/tests/reference/gui/2_nwProject.nwx @@ -1,5 +1,5 @@ - + Project Name Project Title @@ -16,6 +16,15 @@ With This Stuff + + %title% + Chapter %num% + %title% + %title% + + * * * +
+
New Note @@ -36,6 +45,7 @@ NOVEL New False + True
New Chapter @@ -43,6 +53,7 @@ NOVEL New False + True New Scene @@ -50,6 +61,7 @@ NOVEL New False + True SCENE 0 0 @@ -62,6 +74,7 @@ CHARACTER New False + True Plot @@ -69,6 +82,7 @@ PLOT New False + True World @@ -76,6 +90,7 @@ WORLD New False + True
diff --git a/tests/reference/gui/3_nwProject.nwx b/tests/reference/gui/3_nwProject.nwx index f0bda720..3d80a294 100644 --- a/tests/reference/gui/3_nwProject.nwx +++ b/tests/reference/gui/3_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -12,6 +12,15 @@ None 0 + + %title% + Chapter %num% + %title% + %title% + + * * * +
+
New Note @@ -32,6 +41,7 @@ NOVEL New False + True New Chapter @@ -39,6 +49,7 @@ NOVEL New False + True Just a Page @@ -46,6 +57,7 @@ NOVEL Note False + True PAGE 0 0 @@ -58,6 +70,7 @@ CHARACTER New False + True Plot @@ -65,6 +78,7 @@ PLOT New False + True World @@ -72,6 +86,7 @@ WORLD New False + True
diff --git a/tests/reference/proj/1_nwProject.nwx b/tests/reference/proj/1_nwProject.nwx index 319d24b3..76bfb4ae 100644 --- a/tests/reference/proj/1_nwProject.nwx +++ b/tests/reference/proj/1_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -12,6 +12,15 @@ None 0 + + %title% + Chapter %num% + %title% + %title% + + * * * +
+
New Note @@ -32,6 +41,7 @@ NOVEL New False + True Characters @@ -39,6 +49,7 @@ CHARACTER New False + True Plot @@ -46,6 +57,7 @@ PLOT New False + True World @@ -53,6 +65,7 @@ WORLD New False + True New Chapter @@ -60,6 +73,7 @@ NOVEL New False + True New Scene @@ -67,6 +81,7 @@ NOVEL New False + True SCENE 0 0 diff --git a/tests/reference/proj/2_nwProject.nwx b/tests/reference/proj/2_nwProject.nwx index 92bd9df4..585e7fb3 100644 --- a/tests/reference/proj/2_nwProject.nwx +++ b/tests/reference/proj/2_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -12,6 +12,15 @@ None 0 + + %title% + Chapter %num% + %title% + %title% + + * * * +
+
New Note @@ -32,6 +41,7 @@ NOVEL New False + True
Characters @@ -39,6 +49,7 @@ CHARACTER New False + True Plot @@ -46,6 +57,7 @@ PLOT New False + True World @@ -53,6 +65,7 @@ WORLD New False + True New Chapter @@ -60,6 +73,7 @@ NOVEL New False + True New Scene @@ -67,6 +81,7 @@ NOVEL New False + True SCENE 0 0 @@ -79,6 +94,7 @@ TIMELINE New False + True Object @@ -86,6 +102,7 @@ OBJECT New False + True Custom1 @@ -93,6 +110,7 @@ CUSTOM New False + True Custom2 @@ -100,6 +118,7 @@ CUSTOM New False + True
diff --git a/tests/test_gui.py b/tests/test_gui.py index e2291fff..9e2cd53d 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -13,7 +13,7 @@ from nw.gui.dialogs.itemeditor import GuiItemEditor from nw.constants import * -keyDelay = 10 +keyDelay = 5 stepDelay = 50 @pytest.mark.gui @@ -361,7 +361,7 @@ def testItemEditor(qtbot, nwTempGUI, nwRef, nwTemp): layoutIdx = itemEdit.editLayout.findData(nwItemLayout.PAGE) itemEdit.editLayout.setCurrentIndex(layoutIdx) - qtbot.mouseClick(itemEdit.saveButton, Qt.LeftButton) + itemEdit._doSave() itemEdit = GuiItemEditor(nwGUI, nwGUI.theProject, "31489056e0916") qtbot.addWidget(itemEdit) @@ -369,7 +369,7 @@ def testItemEditor(qtbot, nwTempGUI, nwRef, nwTemp): assert itemEdit.editStatus.currentData() == "Note" assert itemEdit.editLayout.currentData() == nwItemLayout.PAGE - qtbot.mouseClick(itemEdit.closeButton, Qt.LeftButton) + itemEdit._doClose() qtbot.wait(stepDelay) assert nwGUI.saveProject() diff --git a/tests/test_item.py b/tests/test_item.py index 64268e62..19f663f6 100644 --- a/tests/test_item.py +++ b/tests/test_item.py @@ -197,7 +197,8 @@ def testItemXMLPackUnpack(): assert etree.tostring(xContent, pretty_print=False, encoding="utf-8") == ( b"" b"" - b"A NameTRASHTRASHMainTrue" + b"A NameTRASHTRASHMain" + b"TrueTrue" b"" b"" ) From 4d9e2d03a37e81c27967479705aba8cb64201636 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 19:31:53 +0200 Subject: [PATCH 11/53] Done building the buttons etc for BuildNovel dialog --- nw/assets/text/exportHelp_en.htm | 44 ++++ nw/config.py | 1 + nw/core/project.py | 23 ++- nw/core/tokenizer.py | 5 + nw/gui/build.py | 337 ++++++++++++++++++++++++++++++- sample/sampleNovel/nwProject.nwx | 13 +- 6 files changed, 400 insertions(+), 23 deletions(-) create mode 100644 nw/assets/text/exportHelp_en.htm diff --git a/nw/assets/text/exportHelp_en.htm b/nw/assets/text/exportHelp_en.htm new file mode 100644 index 00000000..df8eca2a --- /dev/null +++ b/nw/assets/text/exportHelp_en.htm @@ -0,0 +1,44 @@ +

Help!

+

A brief guide to make the most out of the Build Project tool.

+ +

Novel Title Formats

+

The format of the various title levels in the files under the Novel folder can be customised in + these settings. The actual title given in the headings of your files will replace all + occurrences of the keyword %title%. Any static text will be left as-is in the + final title. An empty field means the title isn't written out at all.

+

The available formatting keywords are:

+

%title% – This is replaced with the text you put in your headings in your + documents

+

%num% – This is replaced with the chapter number of your chapter type + headings. These are generated automaticall starting from 1.

+

%numword% – This is replaced with the chapter number of your chapter type + headings, but instead of an arabic number, the word for it is used instead, e.g. One, Two, + Fifteen, Twenty-Five, etc.

+

\\ – Two backslashes are replaced by a line break.

+

Note: The Scene format is treated slightly differently than the other title formats. If a + scene format is a constant text, that is, contains no %title%, it will be treated + as a scene separator instead. Scene separators are centred, and not shown if the chapter starts + directly on the first scene. If the field is blank, a large space between the scenes is added + instead.

+ +

Build Overrides

+

Novel Outline Mode: This option will build an outline version of the novel rather than the + full thing. It overrides the title format settings without changing them. Each title will be + written out, and the synopsis text will appear instead of the body text of the files. Some of + the other options are still available in Outline Mode.

+ +

Include Non-Text Elements

+

Include Synopsis: This will add the synopsis comment as the first paragraph after each + heading.

+

Include Comments: This will include any comments as additional paragraphs in the text.

+

Include Keywords: This will include any keywords and tags as clickable links after each + heading.

+ +

Additional Options

+

Include Novel Files: This means all files that don't have a layout of type "Note" will be + included. This is the normal mode when exporting the novel itself without the notes.

+

Include Note Files: This means all files with a layout of type "Note" will be + included. Titles in note files are always left as they appear.

+

Ignore Export Flag: Each file in the project tree has an "Include when building project" + option set, which is indicated by a little check mark in the "Flags" column. Files without This + tick will normally be skipped during build, but can be included if this option is enabled.

diff --git a/nw/config.py b/nw/config.py index f0f21f32..e031cb79 100644 --- a/nw/config.py +++ b/nw/config.py @@ -84,6 +84,7 @@ class Config: self.guiTheme = "default" self.guiSyntax = "default_light" self.guiDark = False + self.guiLang = "en" # Hardcoded for now ## Sizes self.winGeometry = [1100, 650] diff --git a/nw/core/project.py b/nw/core/project.py index 8986aeb3..c964c75b 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -200,13 +200,14 @@ class NWProject(): self.bookAuthors = [] self.autoReplace = {} self.titleFormat = { - "title": "%title%", - "chapter": "Chapter %num%", - "chapterSub": "%title%", - "unnumbered": "%title%", - "scene": "", - "sceneSep": "* * *", - "section": "", + "title" : r"%title%", + "chapter" : r"Chapter %num%\\%title%", + "unnumbered" : r"%title%", + "scene" : r"* * *", + "section" : r"", + "withSynopsis" : False, + "withComments" : False, + "withKeywords" : False, } self.spellCheck = False self.autoOutline = True @@ -717,9 +718,11 @@ class NWProject(): def setTitleFormat(self, titleFormat): """Set the formatting of titles in the project. """ - for valKey in titleFormat: - if valKey in self.titleFormat: - self.titleFormat[valKey] = titleFormat[valKey] + for valKey, valEntry in titleFormat.items(): + if valKey in ("title","chapter","unnumbered","scene","section"): + self.titleFormat[valKey] = checkString(valEntry, self.titleFormat[valKey], False) + elif valKey in ("withSynopsis","withComments","withKeywords"): + self.titleFormat[valKey] = checkBool(valEntry, False, False) return def setProjectChanged(self, bValue): diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index f9b0264c..1cf2a40e 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -165,6 +165,11 @@ class Tokenizer(): return + def getResult(self): + """Return the result from the conversion. + """ + return self.theResult + def doAutoReplace(self): """Run through the user's auto-replace dictionary. """ diff --git a/nw/gui/build.py b/nw/gui/build.py index 82525d6f..401bf58e 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -28,18 +28,29 @@ import logging import nw +from os import path + from PyQt5.QtCore import Qt from PyQt5.QtGui import QTextOption, QPalette, QColor from PyQt5.QtWidgets import ( - QDialog, QVBoxLayout, QHBoxLayout, QTextBrowser + QDialog, QVBoxLayout, QHBoxLayout, QTextBrowser, QPushButton, + QLabel, QLineEdit, QGroupBox, QGridLayout, QComboBox, QProgressBar, + QMenu, QAction ) -from nw.constants import nwConst, nwFiles, nwAlert +from nw.gui.additions import QSwitch +from nw.core import ToHtml +from nw.constants import nwConst, nwFiles, nwAlert, nwItemType logger = logging.getLogger(__name__) class GuiBuildNovel(QDialog): + FMT_ODT = 1 + FMT_PDF = 2 + FMT_HTM = 3 + FMT_MD = 4 + def __init__(self, theParent, theProject): QDialog.__init__(self, theParent) @@ -48,28 +59,310 @@ class GuiBuildNovel(QDialog): self.mainConf = nw.CONFIG self.theProject = theProject self.theParent = theParent + self.theTheme = theParent.theTheme self.optState = self.theProject.optState self.setWindowTitle("Build Project") - self.setMinimumWidth(400) - self.setMinimumHeight(400) + self.setMinimumWidth(800) + self.setMinimumHeight(700) + + self.resize( + self.optState.getInt("GuiBuildNovel", "winWidth", 800), + self.optState.getInt("GuiBuildNovel", "winHeight", 700) + ) self.outerBox = QVBoxLayout() self.innerBox = QHBoxLayout() + self.toolsBox = QVBoxLayout() self.docView = GuiBuildNovelDocView(self, self.theProject) + # Title Formats + # ============= + self.titleGroup = QGroupBox("Novel Title Formats", self) + self.titleForm = QGridLayout(self) + self.titleGroup.setLayout(self.titleForm) + + self.fmtTitle = QLineEdit() + self.fmtTitle.setMaxLength(200) + self.fmtTitle.setFixedWidth(200) + self.fmtTitle.setText(self.theProject.titleFormat["title"]) + + self.fmtChapter = QLineEdit() + self.fmtChapter.setMaxLength(200) + self.fmtChapter.setFixedWidth(200) + self.fmtChapter.setText(self.theProject.titleFormat["chapter"]) + + self.fmtUnnumbered = QLineEdit() + self.fmtUnnumbered.setMaxLength(200) + self.fmtUnnumbered.setFixedWidth(200) + self.fmtUnnumbered.setText(self.theProject.titleFormat["unnumbered"]) + + self.fmtScene = QLineEdit() + self.fmtScene.setMaxLength(200) + self.fmtScene.setFixedWidth(200) + self.fmtScene.setText(self.theProject.titleFormat["scene"]) + + self.fmtSection = QLineEdit() + self.fmtSection.setMaxLength(200) + self.fmtSection.setFixedWidth(200) + self.fmtSection.setText(self.theProject.titleFormat["section"]) + + self.titleForm.addWidget(QLabel("Title"), 0, 0) + self.titleForm.addWidget(self.fmtTitle, 0, 1) + self.titleForm.addWidget(QLabel("Chapter"), 1, 0) + self.titleForm.addWidget(self.fmtChapter, 1, 1) + self.titleForm.addWidget(QLabel("Unnumbered"), 2, 0) + self.titleForm.addWidget(self.fmtUnnumbered, 2, 1) + self.titleForm.addWidget(QLabel("Scene"), 3, 0) + self.titleForm.addWidget(self.fmtScene, 3, 1) + self.titleForm.addWidget(QLabel("Section"), 4, 0) + self.titleForm.addWidget(self.fmtSection, 4, 1) + + self.titleForm.setColumnStretch(0, 1) + self.titleForm.setColumnStretch(1, 0) + + # Build Settings + # ============== + self.buildGroup = QGroupBox("Build Overrides", self) + self.buildForm = QGridLayout(self) + self.buildGroup.setLayout(self.buildForm) + + self.outlineMode = QSwitch() + self.outlineMode.setChecked(self.optState.getBool("GuiBuildNovel", "outlineMode", False)) + + self.buildForm.addWidget(QLabel("Novel Outline Mode"), 0, 0) + self.buildForm.addWidget(self.outlineMode, 0, 1) + + self.buildForm.setColumnStretch(0, 1) + self.buildForm.setColumnStretch(1, 0) + + # Include Switches + # ================ + self.includeGroup = QGroupBox("Include Non-Text Elements", self) + self.includeForm = QGridLayout(self) + self.includeGroup.setLayout(self.includeForm) + + self.includeSynopsis = QSwitch() + self.includeSynopsis.setChecked(self.theProject.titleFormat["withSynopsis"]) + self.includeComments = QSwitch() + self.includeComments.setChecked(self.theProject.titleFormat["withComments"]) + self.includeKeywords = QSwitch() + self.includeKeywords.setChecked(self.theProject.titleFormat["withKeywords"]) + + self.includeForm.addWidget(QLabel("Include Synopsis"), 0, 0) + self.includeForm.addWidget(self.includeSynopsis, 0, 1) + self.includeForm.addWidget(QLabel("Include Comments"), 1, 0) + self.includeForm.addWidget(self.includeComments, 1, 1) + self.includeForm.addWidget(QLabel("Include Keywords"), 2, 0) + self.includeForm.addWidget(self.includeKeywords, 2, 1) + + self.includeForm.setColumnStretch(0, 1) + self.includeForm.setColumnStretch(1, 0) + + # Additional Options + # ================== + self.addsGroup = QGroupBox("Additional Options", self) + self.addsForm = QGridLayout(self) + self.addsGroup.setLayout(self.addsForm) + + self.novelFiles = QSwitch() + self.novelFiles.setChecked(self.optState.getBool("GuiBuildNovel", "addNovel", True)) + self.noteFiles = QSwitch() + self.noteFiles.setChecked(self.optState.getBool("GuiBuildNovel", "addNotes", False)) + self.ignoreFlag = QSwitch() + self.ignoreFlag.setChecked(self.optState.getBool("GuiBuildNovel", "ignoreFlag", False)) + + self.addsForm.addWidget(QLabel("Include Novel Files"), 0, 0) + self.addsForm.addWidget(self.novelFiles, 0, 1) + self.addsForm.addWidget(QLabel("Include Note Files"), 1, 0) + self.addsForm.addWidget(self.noteFiles, 1, 1) + self.addsForm.addWidget(QLabel("Ignore Export Flag"), 2, 0) + self.addsForm.addWidget(self.ignoreFlag, 2, 1) + + self.addsForm.setColumnStretch(0, 1) + self.addsForm.setColumnStretch(1, 0) + + # Build Button + # ============ + self.buildProgress = QProgressBar() + + self.genPreview = QPushButton("Generate Preview") + self.genPreview.clicked.connect(self._buildPreview) + + # Action Buttons + # ============== + self.buttonForm = QGridLayout() + + self.btnHelp = QPushButton("Help") + self.btnHelp.clicked.connect(self._showHelp) + + self.btnPrint = QPushButton("Print") + self.btnPrint.clicked.connect(self._printDocument) + + self.btnSave = QPushButton("Save As") + self.saveMenu = QMenu(self) + self.saveODT = QAction("Open Document (.odt)") + self.savePDF = QAction("Portable Document (.pdf)") + self.saveHTM = QAction("HTML5 (.htm)") + self.saveMD = QAction("Markdown (.md)") + self.saveODT.triggered.connect(lambda: self._saveDocument(self.FMT_ODT)) + self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF)) + self.saveHTM.triggered.connect(lambda: self._saveDocument(self.FMT_HTM)) + self.saveMD.triggered.connect(lambda: self._saveDocument(self.FMT_MD)) + self.saveMenu.addAction(self.saveODT) + self.saveMenu.addAction(self.savePDF) + self.saveMenu.addAction(self.saveHTM) + self.saveMenu.addAction(self.saveMD) + self.btnSave.setMenu(self.saveMenu) + + self.btnClose = QPushButton("Close") + self.btnClose.clicked.connect(self._doClose) + + self.buttonForm.addWidget(self.btnHelp, 0, 0) + self.buttonForm.addWidget(self.btnPrint, 0, 1) + self.buttonForm.addWidget(self.btnSave, 1, 0) + self.buttonForm.addWidget(self.btnClose, 1, 1) + # Assemble GUI + # ============ + self.toolsBox.addWidget(self.titleGroup) + self.toolsBox.addWidget(self.buildGroup) + self.toolsBox.addWidget(self.includeGroup) + self.toolsBox.addWidget(self.addsGroup) + self.toolsBox.addStretch(1) + self.toolsBox.addWidget(self.buildProgress) + self.toolsBox.addWidget(self.genPreview) + self.toolsBox.addSpacing(8) + self.toolsBox.addLayout(self.buttonForm) + + self.innerBox.addLayout(self.toolsBox) self.innerBox.addWidget(self.docView) + self.outerBox.addLayout(self.innerBox) self.setLayout(self.outerBox) + self.innerBox.setStretch(0, 0) + self.innerBox.setStretch(1, 1) + + self.outlineMode.toggled.connect(self._toggelOutlineMode) + self._toggelOutlineMode(self.outlineMode.isChecked()) + self.show() logger.debug("GuiBuildNovel initialisation complete") return + ## + # Slots + ## + + def _buildPreview(self): + """Build a preview of the project in the document viewer. + """ + + makeHtml = ToHtml(self.theProject, self.theParent) + theText = "" + + for tItem in self.theProject.projTree: + if tItem is not None and tItem.itemType == nwItemType.FILE: + makeHtml.setText(tItem.itemHandle) + makeHtml.doAutoReplace() + makeHtml.tokenizeText() + makeHtml.doHeaders() + makeHtml.doConvert() + makeHtml.doPostProcessing() + theText += makeHtml.getResult() + + self.docView.setHtml(theText) + + return + + def _saveDocument(self, theFormat): + return + + def _printDocument(self): + return + + def _toggelOutlineMode(self, theState): + """Enables or disables the options that are overridden in# + outline mode. + """ + self.fmtTitle.setEnabled(not theState) + self.fmtChapter.setEnabled(not theState) + self.fmtUnnumbered.setEnabled(not theState) + self.fmtScene.setEnabled(not theState) + self.fmtSection.setEnabled(not theState) + self.includeSynopsis.setEnabled(not theState) + self.novelFiles.setEnabled(not theState) + self.noteFiles.setEnabled(not theState) + return + + def _doClose(self): + """Close button was clicked. + """ + self.close() + return + + ## + # Events + ## + + def closeEvent(self, theEvent): + """Capture the user closing the window so we can save settings. + """ + self._saveSettings() + QDialog.closeEvent(self, theEvent) + return + + ## + # Internal Functions + ## + + def _saveSettings(self): + """Save the various user settings. + """ + logger.debug("Saving GuiBuildNovel settings") + + # Formatting + self.theProject.setTitleFormat({ + "title" : self.fmtTitle.text().strip(), + "chapter" : self.fmtChapter.text().strip(), + "unnumbered" : self.fmtUnnumbered.text().strip(), + "scene" : self.fmtScene.text().strip(), + "section" : self.fmtSection.text().strip(), + "withSynopsis" : self.includeSynopsis.isChecked(), + "withComments" : self.includeComments.isChecked(), + "withKeywords" : self.includeKeywords.isChecked(), + }) + + # GUI Settings + self.optState.setValue("GuiBuildNovel", "winWidth", self.width()) + self.optState.setValue("GuiBuildNovel", "winHeight", self.height()) + self.optState.setValue("GuiBuildNovel", "outlineMode", self.outlineMode.isChecked()) + self.optState.setValue("GuiBuildNovel", "addNovel", self.novelFiles.isChecked()) + self.optState.setValue("GuiBuildNovel", "addNotes", self.noteFiles.isChecked()) + self.optState.setValue("GuiBuildNovel", "ignoreFlag", self.ignoreFlag.isChecked()) + self.optState.saveSettings() + + return + + def _showHelp(self): + """Generate a help text and show it in the document window. + """ + docName = "exportHelp_%s.htm" % self.mainConf.guiLang + docPath = path.join(self.mainConf.assetPath, "text", docName) + if path.isfile(docPath): + with open(docPath, mode="r", encoding="utf8") as inFile: + helpText = inFile.read() + self.docView.setText(helpText) + else: + self.theParent.makeAlert( + "Could not open help text file for Build Project.", nwAlert.ERROR + ) + return + # END Class GuiBuildNovel class GuiBuildNovelDocView(QTextBrowser): @@ -83,10 +376,12 @@ class GuiBuildNovelDocView(QTextBrowser): self.theProject = theProject self.theParent = theParent - self.qDocument = self.document() - self.setMinimumWidth(300) + self.setMinimumWidth(400) self.setOpenExternalLinks(False) + self.qDocument = self.document() + self.qDocument.setDocumentMargin(self.mainConf.textMargin) + theOpt = QTextOption() if self.mainConf.doJustify: theOpt.setAlignment(Qt.AlignJustify) @@ -97,7 +392,7 @@ class GuiBuildNovelDocView(QTextBrowser): docPalette.setColor(QPalette.Text, QColor( 0, 0, 0)) self.setPalette(docPalette) - self.setHtml("

Hello World

Some text ...

") + self._makeStyleSheet() self.show() @@ -105,4 +400,32 @@ class GuiBuildNovelDocView(QTextBrowser): return + def setText(self, theText): + self.setHtml(theText) + return + + ## + # Internal Functions + ## + + def _makeStyleSheet(self): + + styleSheet = ( + "h1, h2 {" + " color: rgb(66, 113, 174);" + "}\n" + "h3, h4 {" + " color: rgb(50, 50, 50);" + "}\n" + "a {" + " color: rgb(137, 89, 168);" + "}\n" + "mark {" + " background-color: rgb(240, 198, 116);" + "}\n" + ) + self.qDocument.setDefaultStyleSheet(styleSheet) + + return + # END Class GuiBuildNovelDocView diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index c911b0a3..05445b4b 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project @@ -20,12 +20,13 @@ %title% - Chapter %num% - %title% + Chapter %num%\\%title% %title% - None - * * * -
None
+ * * * +
+ True + False + False
New From 26b8379ada3db00e9973257fddc0fa9dd3a28da7 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 19:37:38 +0200 Subject: [PATCH 12/53] Updated tests again --- tests/reference/gui/0_nwProject.nwx | 11 ++++++----- tests/reference/gui/1_nwProject.nwx | 11 ++++++----- tests/reference/gui/2_nwProject.nwx | 11 ++++++----- tests/reference/gui/3_nwProject.nwx | 11 ++++++----- tests/reference/proj/1_nwProject.nwx | 11 ++++++----- tests/reference/proj/2_nwProject.nwx | 11 ++++++----- 6 files changed, 36 insertions(+), 30 deletions(-) diff --git a/tests/reference/gui/0_nwProject.nwx b/tests/reference/gui/0_nwProject.nwx index d91e4c30..3007ae93 100644 --- a/tests/reference/gui/0_nwProject.nwx +++ b/tests/reference/gui/0_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -14,12 +14,13 @@ %title% - Chapter %num% - %title% + Chapter %num%\\%title% %title% - - * * * + * * *
+ False + False + False
New diff --git a/tests/reference/gui/1_nwProject.nwx b/tests/reference/gui/1_nwProject.nwx index 0cb958d1..38708ab2 100644 --- a/tests/reference/gui/1_nwProject.nwx +++ b/tests/reference/gui/1_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -14,12 +14,13 @@ %title% - Chapter %num% - %title% + Chapter %num%\\%title% %title% - - * * * + * * *
+ False + False + False
New diff --git a/tests/reference/gui/2_nwProject.nwx b/tests/reference/gui/2_nwProject.nwx index 0ab86944..58b80897 100644 --- a/tests/reference/gui/2_nwProject.nwx +++ b/tests/reference/gui/2_nwProject.nwx @@ -1,5 +1,5 @@ - + Project Name Project Title @@ -18,12 +18,13 @@
%title% - Chapter %num% - %title% + Chapter %num%\\%title% %title% - - * * * + * * *
+ False + False + False
New diff --git a/tests/reference/gui/3_nwProject.nwx b/tests/reference/gui/3_nwProject.nwx index 3d80a294..7c5d8511 100644 --- a/tests/reference/gui/3_nwProject.nwx +++ b/tests/reference/gui/3_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -14,12 +14,13 @@ %title% - Chapter %num% - %title% + Chapter %num%\\%title% %title% - - * * * + * * *
+ False + False + False
New diff --git a/tests/reference/proj/1_nwProject.nwx b/tests/reference/proj/1_nwProject.nwx index 76bfb4ae..febdc50e 100644 --- a/tests/reference/proj/1_nwProject.nwx +++ b/tests/reference/proj/1_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -14,12 +14,13 @@ %title% - Chapter %num% - %title% + Chapter %num%\\%title% %title% - - * * * + * * *
+ False + False + False
New diff --git a/tests/reference/proj/2_nwProject.nwx b/tests/reference/proj/2_nwProject.nwx index 585e7fb3..b64d0071 100644 --- a/tests/reference/proj/2_nwProject.nwx +++ b/tests/reference/proj/2_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -14,12 +14,13 @@ %title% - Chapter %num% - %title% + Chapter %num%\\%title% %title% - - * * * + * * *
+ False + False + False
New From 771e44055d525b589667bfd1714dabf7ac216a94 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 21:27:28 +0200 Subject: [PATCH 13/53] Finished save file options for now. Still missing markdown and PDF --- nw/core/project.py | 15 ++- nw/gui/build.py | 180 +++++++++++++++++++++++++++---- sample/sampleNovel/nwProject.nwx | 2 +- 3 files changed, 168 insertions(+), 29 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index c964c75b..a0396c02 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -529,11 +529,7 @@ class NWProject(): ), nwAlert.WARN) return False - cleanName = "" - for c in self.projName.strip(): - if c.isalpha() or c.isdigit() or c == " ": - cleanName += c - + cleanName = self.getFileSafeProjectName() baseDir = path.join(self.mainConf.backupPath, cleanName) if not path.isdir(baseDir): try: @@ -740,6 +736,15 @@ class NWProject(): # Getters ## + def getFileSafeProjectName(self): + """Returns a filename safe version of the project name. + """ + cleanName = "" + for c in self.projName.strip(): + if c.isalpha() or c.isdigit() or c == " ": + cleanName += c + return cleanName + def getSessionWordCount(self): """Returns the number of words added or removed this session. """ diff --git a/nw/gui/build.py b/nw/gui/build.py index 401bf58e..94c82019 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -30,12 +30,14 @@ import nw from os import path -from PyQt5.QtCore import Qt -from PyQt5.QtGui import QTextOption, QPalette, QColor +from PyQt5.QtCore import Qt, QByteArray +from PyQt5.QtGui import ( + QTextOption, QPalette, QColor, QTextDocumentWriter +) from PyQt5.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QTextBrowser, QPushButton, QLabel, QLineEdit, QGroupBox, QGridLayout, QComboBox, QProgressBar, - QMenu, QAction + QMenu, QAction, QFileDialog ) from nw.gui.additions import QSwitch @@ -46,10 +48,12 @@ logger = logging.getLogger(__name__) class GuiBuildNovel(QDialog): - FMT_ODT = 1 - FMT_PDF = 2 - FMT_HTM = 3 - FMT_MD = 4 + FMT_ODT = 1 + FMT_PDF = 2 + FMT_HTM1 = 3 + FMT_HTM2 = 4 + FMT_MD = 4 + FMT_TXT = 5 def __init__(self, theParent, theProject): QDialog.__init__(self, theParent) @@ -62,6 +66,8 @@ class GuiBuildNovel(QDialog): self.theTheme = theParent.theTheme self.optState = self.theProject.optState + self.htmlText = "" + self.setWindowTitle("Build Project") self.setMinimumWidth(800) self.setMinimumHeight(700) @@ -202,20 +208,32 @@ class GuiBuildNovel(QDialog): self.btnSave = QPushButton("Save As") self.saveMenu = QMenu(self) - self.saveODT = QAction("Open Document (.odt)") - self.savePDF = QAction("Portable Document (.pdf)") - self.saveHTM = QAction("HTML5 (.htm)") - self.saveMD = QAction("Markdown (.md)") - self.saveODT.triggered.connect(lambda: self._saveDocument(self.FMT_ODT)) - self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF)) - self.saveHTM.triggered.connect(lambda: self._saveDocument(self.FMT_HTM)) - self.saveMD.triggered.connect(lambda: self._saveDocument(self.FMT_MD)) - self.saveMenu.addAction(self.saveODT) - self.saveMenu.addAction(self.savePDF) - self.saveMenu.addAction(self.saveHTM) - self.saveMenu.addAction(self.saveMD) self.btnSave.setMenu(self.saveMenu) + self.saveODT = QAction("Open Document (.odt)") + self.saveODT.triggered.connect(lambda: self._saveDocument(self.FMT_ODT)) + self.saveMenu.addAction(self.saveODT) + + # self.savePDF = QAction("Portable Document (.pdf)") + # self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF)) + # self.saveMenu.addAction(self.savePDF) + + self.saveHTM1 = QAction("Qt Style HTML (.htm)") + self.saveHTM1.triggered.connect(lambda: self._saveDocument(self.FMT_HTM1)) + self.saveMenu.addAction(self.saveHTM1) + + self.saveHTM2 = QAction("Plain HTML (.htm)") + self.saveHTM2.triggered.connect(lambda: self._saveDocument(self.FMT_HTM2)) + self.saveMenu.addAction(self.saveHTM2) + + # self.saveMD = QAction("Markdown (.md)") + # self.saveMD.triggered.connect(lambda: self._saveDocument(self.FMT_MD)) + # self.saveMenu.addAction(self.saveMD) + + self.saveTXT = QAction("Plain Text (.txt)") + self.saveTXT.triggered.connect(lambda: self._saveDocument(self.FMT_TXT)) + self.saveMenu.addAction(self.saveTXT) + self.btnClose = QPushButton("Close") self.btnClose.clicked.connect(self._doClose) @@ -263,7 +281,7 @@ class GuiBuildNovel(QDialog): """ makeHtml = ToHtml(self.theProject, self.theParent) - theText = "" + self.htmlText = "" for tItem in self.theProject.projTree: if tItem is not None and tItem.itemType == nwItemType.FILE: @@ -273,14 +291,130 @@ class GuiBuildNovel(QDialog): makeHtml.doHeaders() makeHtml.doConvert() makeHtml.doPostProcessing() - theText += makeHtml.getResult() + self.htmlText += makeHtml.getResult() - self.docView.setHtml(theText) + self.docView.setHtml(self.htmlText) return def _saveDocument(self, theFormat): - return + """Save the document to various formats. + """ + + # FMT_PDF + + byteFmt = QByteArray() + fileExt = "" + textFmt = "" + outTool = "" + + # Create the settings + if theFormat == self.FMT_ODT: + byteFmt.append("odf") + fileExt = "odf" + textFmt = "Open Document" + outTool = "Qt" + + elif theFormat == self.FMT_HTM1: + byteFmt.append("html") + fileExt = "htm" + textFmt = "Qt Style HTML" + outTool = "Qt" + + elif theFormat == self.FMT_HTM2: + fileExt = "htm" + textFmt = "Plain HTML" + outTool = "NW" + + elif theFormat == self.FMT_MD: + byteFmt.append("markdown") + fileExt = "md" + textFmt = "Markdown" + outTool = "Qt" + + elif theFormat == self.FMT_TXT: + byteFmt.append("plaintext") + fileExt = "txt" + textFmt = "Plain Text" + outTool = "Qt" + + else: + return False + + # Generate the file name + if fileExt: + + cleanName = self.theProject.getFileSafeProjectName() + fileName = "%s.%s" % (cleanName, fileExt) + saveDir = self.mainConf.lastPath + savePath = path.join(saveDir, fileName) + if not path.isdir(saveDir): + saveDir = self.mainConf.homePath + + dlgOpt = QFileDialog.Options() + dlgOpt |= QFileDialog.DontUseNativeDialog + saveTo = QFileDialog.getSaveFileName( + self, "Save Document As", savePath, options=dlgOpt + ) + if saveTo[0]: + savePath = saveTo[0] + else: + return False + + self.mainConf.setLastPath(savePath) + + else: + return False + + # Do the actual writing + if outTool == "Qt": + docWriter = QTextDocumentWriter() + docWriter.setFileName(savePath) + docWriter.setFormat(byteFmt) + if docWriter.write(self.docView.qDocument): + self.theParent.makeAlert( + "Document successfully written in %s format to file: %s" % ( + textFmt, savePath + ), nwAlert.INFO + ) + else: + self.theParent.makeAlert( + "Failed to write document in %s format to file: %s" % ( + textFmt, savePath + ), nwAlert.ERROR + ) + + elif outTool == "NW": + if theFormat == self.FMT_HTM2: + try: + with open(savePath, mode="w", encoding="utf8") as outFile: + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write(self.htmlText) + outFile.write("\n") + outFile.write("\n") + + self.theParent.makeAlert( + "Document successfully written in %s format to file: %s" % ( + textFmt, savePath + ), nwAlert.INFO + ) + + except Exception as e: + self.theParent.makeAlert( + "Failed to write document in %s format to file: %s" % ( + textFmt, str(e) + ), nwAlert.ERROR + ) + + else: + return False + + return True def _printDocument(self): return diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index 05445b4b..69ac815d 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project From 52eb51b44b3270e1bc1e9b1ec6d7b6c25f6f86a5 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 21:29:32 +0200 Subject: [PATCH 14/53] Deleted the rest ov the convert submodule --- nw/convert/file/__init__.py | 15 --- nw/convert/file/concat.py | 80 ------------- nw/convert/file/html.py | 83 -------------- nw/convert/file/latex.py | 69 ----------- nw/convert/file/markdown.py | 61 ---------- nw/convert/file/text.py | 210 ---------------------------------- nw/convert/text/__init__.py | 13 --- nw/convert/text/tolatex.py | 155 ------------------------- nw/convert/text/tomarkdown.py | 136 ---------------------- nw/convert/text/totext.py | 154 ------------------------- 10 files changed, 976 deletions(-) delete mode 100644 nw/convert/file/__init__.py delete mode 100644 nw/convert/file/concat.py delete mode 100644 nw/convert/file/html.py delete mode 100644 nw/convert/file/latex.py delete mode 100644 nw/convert/file/markdown.py delete mode 100644 nw/convert/file/text.py delete mode 100644 nw/convert/text/__init__.py delete mode 100644 nw/convert/text/tolatex.py delete mode 100644 nw/convert/text/tomarkdown.py delete mode 100644 nw/convert/text/totext.py diff --git a/nw/convert/file/__init__.py b/nw/convert/file/__init__.py deleted file mode 100644 index da2afb33..00000000 --- a/nw/convert/file/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from nw.convert.file.concat import ConcatFile -from nw.convert.file.html import HtmlFile -from nw.convert.file.latex import LaTeXFile -from nw.convert.file.markdown import MarkdownFile -from nw.convert.file.text import TextFile - -__all__ = [ - "ConcatFile", - "HtmlFile", - "LaTeXFile", - "MarkdownFile", - "TextFile", -] diff --git a/nw/convert/file/concat.py b/nw/convert/file/concat.py deleted file mode 100644 index 5bc76e89..00000000 --- a/nw/convert/file/concat.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter Concatenated File - - novelWriter – Concatenated File -================================= - Concatenate the standard novelWriter files to a single file - - File History: - Created: 2019-10-26 [0.3.1] - - 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 nw - -from os import path - -from nw.convert.file.text import TextFile -from nw.convert.tokenizer import Tokenizer -from nw.constants import nwAlert - -logger = logging.getLogger(__name__) - -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): - - logger.verbose("Parsing content of item '%s'" % tHandle) - - if not self.checkInclude(tHandle): - return False - - self.theConv.setText(tHandle) - - theResult = self.theConv.theText - - if theResult is not None and self.outFile is not None: - self.outFile.write(theResult.rstrip()) - self.outFile.write("\n\n") - - return True - - ## - # Internal Functions - ## - - def _doOpenFile(self, filePath): - try: - self.outFile = open(filePath,mode="wt+",encoding="utf8") - 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.close() - return True - -# END Class ConcatFile diff --git a/nw/convert/file/html.py b/nw/convert/file/html.py deleted file mode 100644 index f03e12b3..00000000 --- a/nw/convert/file/html.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter HTML File - - novelWriter – HTML File -========================= - Writes the project to a html file - - File History: - Created: 2019-10-19 [0.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 nw - -from nw.convert.file.text import TextFile -from nw.convert.text.tohtml import ToHtml -from nw.constants import nwAlert - -logger = logging.getLogger(__name__) - -class HtmlFile(TextFile): - - def __init__(self, theProject, theParent): - TextFile.__init__(self, theProject, theParent) - self.theConv = ToHtml(self.theProject, self.theParent) - return - - ## - # Internal Functions - ## - - def _doOpenFile(self, filePath): - try: - self.outFile = open(filePath,mode="wt+",encoding="utf8") - self.outFile.write("\n") - self.outFile.write("\n") - self.outFile.write("\n") - self.outFile.write(" \n") - self.outFile.write(" \n") - self.outFile.write("\n") - self.outFile.write("\n") - self.outFile.write("
\n") - 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("
\n") - self.outFile.write("\n") - self.outFile.write("\n") - self.outFile.close() - return True - -# END Class HtmlFile diff --git a/nw/convert/file/latex.py b/nw/convert/file/latex.py deleted file mode 100644 index fd7c73c1..00000000 --- a/nw/convert/file/latex.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter LaTeX File - - novelWriter – LaTeX File -========================== - Writes the project to a LaTeX file - - File History: - Created: 2019-10-24 [0.3.1] - - 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 nw - -from nw.convert.file.text import TextFile -from nw.convert.text.tolatex import ToLaTeX -from nw.constants import nwAlert - -logger = logging.getLogger(__name__) - -class LaTeXFile(TextFile): - - def __init__(self, theProject, theParent): - TextFile.__init__(self, theProject, theParent) - self.theConv = ToLaTeX(self.theProject, self.theParent) - self.texCodecFail = False - return - - ## - # Internal Functions - ## - - def _doOpenFile(self, filePath): - try: - self.outFile = open(filePath,mode="wt+",encoding="utf8") - self.outFile.write("\\documentclass[12pt]{report}\n") - self.outFile.write("\\usepackage[utf8]{inputenc}\n") - self.outFile.write("\\usepackage[T1]{fontenc}\n") - self.outFile.write("\n") - self.outFile.write("\\begin{document}\n") - 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 deleted file mode 100644 index 24b516da..00000000 --- a/nw/convert/file/markdown.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter Markdown File - - novelWriter – Markdown File -============================= - Writes the project to a markdown file - - File History: - Created: 2019-10-19 [0.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 nw - -from nw.convert.file.text import TextFile -from nw.convert.text.tomarkdown import ToMarkdown -from nw.constants import nwAlert - -logger = logging.getLogger(__name__) - -class MarkdownFile(TextFile): - - def __init__(self, theProject, theParent): - TextFile.__init__(self, theProject, theParent) - self.theConv = ToMarkdown(self.theProject, self.theParent) - return - - ## - # Internal Functions - ## - - def _doOpenFile(self, filePath): - try: - self.outFile = open(filePath,mode="wt+",encoding="utf8") - 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.close() - return True - -# END Class MarkdownFile diff --git a/nw/convert/file/text.py b/nw/convert/file/text.py deleted file mode 100644 index afcadb10..00000000 --- a/nw/convert/file/text.py +++ /dev/null @@ -1,210 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter Text File - - novelWriter – Text File -========================= - Writes the project to a plain text file - - File History: - Created: 2019-10-18 [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 nw - -from os import path - -from PyQt5.QtWidgets import QMessageBox - -from nw.convert.text.totext import ToText -from nw.constants import nwAlert, nwItemType, nwItemLayout, nwItemClass - -logger = logging.getLogger(__name__) - -class TextFile(): - - def __init__(self, theProject, theParent): - - self.mainConf = nw.CONFIG - self.theProject = theProject - self.theParent = theParent - - 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.setComments(False) - self.setKeywords(False) - self.setWordWrap(80) - - return - - ## - # Setters - ## - - def setExportNovel(self, doNovel): - self.expNovel = doNovel - return - - def setExportNotes(self, doNotes): - self.expNotes = doNotes - return - - def setComments(self, doComments): - self.theConv.setComments(doComments) - return - - def setKeywords(self, doKeywords): - self.theConv.setKeywords(doKeywords) - return - - def setWordWrap(self, wordWrap): - if wordWrap >= 0: - self.theConv.setWordWrap(wordWrap) - else: - self.theConv.setWordWrap(0) - return - - def setTitleFormat(self, fmtTitle): - self.theConv.setTitleFormat(fmtTitle) - return - - def setChapterFormat(self, fmtChapter): - self.theConv.setChapterFormat(fmtChapter) - return - - def setUnNumberedFormat(self, fmtUnNum): - self.theConv.setUnNumberedFormat(fmtUnNum) - return - - def setSceneFormat(self, fmtScene, hideScene): - self.theConv.setSceneFormat(fmtScene, hideScene) - return - - def setSectionFormat(self, fmtSection, hideSection): - self.theConv.setSectionFormat(fmtSection, hideSection) - return - - ## - # Core Methods - ## - - def openFile(self, filePath): - - self.fileName = path.basename(filePath) - if path.isfile(filePath) and self.mainConf.showGUI: - msgBox = QMessageBox() - msgRes = msgBox.question(self.theParent, "Overwrite", ( - "File '%s' already exists.
Do you want to overwrite it?" % self.fileName - )) - if msgRes != QMessageBox.Yes: - return False - - self._doOpenFile(filePath) - - if self.outFile is None: - return False - - return True - - def closeFile(self): - self._doCloseFile() - return True - - def addText(self, tHandle): - - logger.verbose("Parsing content of item '%s'" % tHandle) - - if not self.checkInclude(tHandle): - return False - - self.theConv.setText(tHandle) - self.theConv.doAutoReplace() - self.theConv.tokenizeText() - self.theConv.formatHeaders() - self.theConv.doConvert() - self.theConv.doPostProcessing() - - if self.theConv.theResult is not None and self.outFile is not None: - self.outFile.write(self.theConv.theResult) - - return True - - def checkInclude(self, tHandle): - """This function checks whether a file should be included in the - export or not. For standard note and novel files, this is - controlled by the options selected by the user. For other files - classified as non-exportable, a few checks must be made, and the - following are not: - * Items that are not actual files. - * Items that have been orphaned which are tagged as NO_LAYOUT - and NO_CLASS. - * Items that appear in the TRASH folder - """ - - theItem = self.theProject.projTree[tHandle] - isNone = theItem.itemType != nwItemType.FILE - isNone |= theItem.itemLayout == nwItemLayout.NO_LAYOUT - isNone |= theItem.itemClass == nwItemClass.NO_CLASS - isNone |= theItem.itemClass == nwItemClass.TRASH - isNone |= theItem.parHandle == self.theProject.projTree.trashRoot() - isNote = theItem.itemLayout == nwItemLayout.NOTE - isNovel = not isNone and not isNote - - if isNone: - return False - if isNote and not self.expNotes: - return False - if isNovel and not self.expNovel: - return False - - return True - - ## - # Internal Functions - ## - - def _doOpenFile(self, filePath): - """This function does the actual opening of the file, and can be - overloaded by a subclass that uses a different file format that - requires a different approach. - """ - try: - self.outFile = open(filePath,mode="wt+",encoding="utf8") - self.outFile.write("\n\n") - except Exception as e: - self.makeAlert(["Failed to open file.",str(e)], nwAlert.ERROR) - return False - return True - - def _doCloseFile(self): - """This function closes the file, and is meant to be overloaded - by the subclass for other file formats. - """ - if self.outFile is not None: - self.outFile.close() - return True - -# END Class OutFile diff --git a/nw/convert/text/__init__.py b/nw/convert/text/__init__.py deleted file mode 100644 index ef849320..00000000 --- a/nw/convert/text/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- - -from nw.convert.text.tohtml import ToHtml -from nw.convert.text.tolatex import ToLaTeX -from nw.convert.text.tomarkdown import ToMarkdown -from nw.convert.text.totext import ToText - -__all__ = [ - "ToHtml", - "ToLaTeX", - "ToMarkdown", - "ToText", -] diff --git a/nw/convert/text/tolatex.py b/nw/convert/text/tolatex.py deleted file mode 100644 index f945b763..00000000 --- a/nw/convert/text/tolatex.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter LaTeX Converter - - novelWriter – LaTeX Converter -=============================== - Extends the Tokenizer class to write LaTeX - - File History: - Created: 2019-10-24 [0.3.1] - - 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 codecs -import re -import nw - -from nw.convert.tokenizer import Tokenizer -from nw.constants import nwUnicode - -logger = logging.getLogger(__name__) - -class ToLaTeX(Tokenizer): - - def __init__(self, theProject, theParent): - Tokenizer.__init__(self, theProject, theParent) - self.texCodecFail = False - return - - def doPostProcessing(self): - """The latexcodec misses dashes and non-breaking spaces, so we - do those here. - """ - - repDict = { - nwUnicode.U_ENDASH : "--", - nwUnicode.U_EMDASH : "---", - nwUnicode.U_NBSP : "~", - } - xRep = re.compile("|".join([re.escape(k) for k in repDict.keys()]), flags=re.DOTALL) - self.theResult = xRep.sub(lambda x: repDict[x.group(0)], self.theResult) - - return - - def doConvert(self): - - texTags = { - self.FMT_B_B : r"\textbf{", - self.FMT_B_E : r"}", - self.FMT_I_B : r"\textit{", - self.FMT_I_E : r"}", - self.FMT_U_B : r"\underline{", - self.FMT_U_E : r"}", - } - - self.theResult = "" - thisPar = [] - for tType, tText, tFormat, tAlign in self.theTokens: - - begText = "" - endText = "\n" - if tAlign == self.A_CENTRE: - begText = "\\begin{center}\n" - endText = "\\end{center}\n\n" - - # First check if we have a comment or plain text, as they - # need some extra replacing before we proceed to wrapping - # and final formatting. - if tType == self.T_COMMENT: - tText = "%% %s" % tText - - elif tType == self.T_TEXT: - tTemp = tText - for xPos, xLen, xFmt in reversed(tFormat): - tTemp = tTemp[:xPos]+texTags[xFmt]+tTemp[xPos+xLen:] - tText = tTemp - - tLen = len(tText) - - # Then the text can receive final formatting before we - # append it to the results. We also store text lines in a - # buffer and merge them only when we find an empty line - # indicating a new paragraph. - if tType == self.T_EMPTY: - if len(thisPar) > 0: - self.theResult += begText - for tTemp in thisPar: - self.theResult += "%s\n" % tTemp - self.theResult += endText - thisPar = [] - - elif tType == self.T_HEAD1: - self.theResult += begText - self.theResult += "{\\Huge %s}\n" % self._escapeUnicode(tText) - self.theResult += endText - - elif tType == self.T_HEAD2: - self.theResult += "\\chapter*{%s}\n\n" % self._escapeUnicode(tText) - - elif tType == self.T_HEAD3: - self.theResult += "\\section*{%s}\n\n" % self._escapeUnicode(tText) - - elif tType == self.T_HEAD4: - self.theResult += "\\subsection*{%s}\n\n" % self._escapeUnicode(tText) - - elif tType == self.T_SEP: - self.theResult += begText - self.theResult += "%s\n" % self._escapeUnicode(tText) - self.theResult += endText - - elif tType == self.T_SKIP: - self.theResult += "\\bigskip\n" - self.theResult += "\\bigskip\n\n" - - elif tType == self.T_TEXT: - if tText.endswith(" "): - thisPar.append(self._escapeUnicode(tText.rstrip())+"\\newline") - else: - thisPar.append(self._escapeUnicode(tText.rstrip())) - - elif tType == self.T_PBREAK: - self.theResult += "\\newpage\n\n" - - elif tType == self.T_COMMENT and self.doComments: - self.theResult += "%s\n\n" % tText - - elif tType == self.T_KEYWORD and self.doKeywords: - self.theResult += "%% @%s\n\n" % tText - - return - - def _escapeUnicode(self, theText): - try: - import latexcodec - return codecs.encode(theText, "ulatex+utf8") - except: - self.texCodecFail = True - return theText - -# END Class ToLaTeX diff --git a/nw/convert/text/tomarkdown.py b/nw/convert/text/tomarkdown.py deleted file mode 100644 index 97e5c7a4..00000000 --- a/nw/convert/text/tomarkdown.py +++ /dev/null @@ -1,136 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter Markdown Text Converter - - novelWriter – Markdown Text Converter -======================================= - Extends the Tokenizer class to write Markdown - - File History: - Created: 2019-10-19 [0.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 textwrap -import logging -import re -import nw - -from nw.convert.tokenizer import Tokenizer - -logger = logging.getLogger(__name__) - -class ToMarkdown(Tokenizer): - - def __init__(self, theProject, theParent): - Tokenizer.__init__(self, theProject, theParent) - return - - def doConvert(self): - - mdTags = { - self.FMT_B_B : "**", - self.FMT_B_E : "**", - self.FMT_I_B : "_", - self.FMT_I_E : "_", - self.FMT_U_B : "__", - self.FMT_U_E : "__", - } - - if self.wordWrap > 0: - tWrap = textwrap.TextWrapper( - width = self.wordWrap, - initial_indent = "", - subsequent_indent = "", - expand_tabs = True, - replace_whitespace = True, - fix_sentence_endings = False, - break_long_words = True, - drop_whitespace = True, - break_on_hyphens = True, - tabsize = 8, - max_lines = None - ) - - self.theResult = "" - thisPar = [] - for tType, tText, tFormat, tAlign in self.theTokens: - - # First check if we have a comment or plain text, as they - # need some extra replacing before we proceed to wrapping - # and final formatting. - if tType == self.T_COMMENT: - tText = " %s" % tText - - elif tType == self.T_TEXT: - tTemp = tText - for xPos, xLen, xFmt in reversed(tFormat): - tTemp = tTemp[:xPos]+mdTags[xFmt]+tTemp[xPos+xLen:] - tText = tTemp - - tLen = len(tText) - - # The text can now be word wrapped, if we have requested - # this and it's needed. - if self.wordWrap > 0 and tLen > self.wordWrap: - if tType == self.T_COMMENT: - tText = textwrap.fill( - tText.strip(),initial_indent=" ",subsequent_indent=" " - ) - else: - tText = tWrap.fill(tText) - - # Then the text can receive final formatting before we - # append it to the results. We also store text lines in a - # buffer and merge them only when we find an empty line, - # indicating a new paragraph. - if tType == self.T_EMPTY: - if len(thisPar) > 0: - tTemp = "\n".join(thisPar) - self.theResult += "%s\n\n" % tTemp.rstrip() - thisPar = [] - - elif tType == self.T_HEAD1: - self.theResult += "# %s\n\n" % tText - - elif tType == self.T_HEAD2: - self.theResult += "## %s\n\n" % tText - - elif tType == self.T_HEAD3: - self.theResult += "### %s\n\n" % tText - - elif tType == self.T_HEAD4: - self.theResult += "#### %s\n\n" % tText - - elif tType == self.T_SEP: - self.theResult += "%s\n\n" % tText - - elif tType == self.T_SKIP: - self.theResult += "\n\n\n" - - elif tType == self.T_TEXT: - thisPar.append(tText) - - elif tType == self.T_COMMENT and self.doComments: - self.theResult += "%s\n\n" % tText - - elif tType == self.T_KEYWORD and self.doKeywords: - self.theResult += "%s\n\n" % tText - - return - -# END Class ToMarkdown diff --git a/nw/convert/text/totext.py b/nw/convert/text/totext.py deleted file mode 100644 index b4d3af64..00000000 --- a/nw/convert/text/totext.py +++ /dev/null @@ -1,154 +0,0 @@ -# -*- coding: utf-8 -*- -"""novelWriter Plain Text Converter - - novelWriter – Plain Text Converter -==================================== - Extends the Tokenizer class to convert to plain text - - File History: - Created: 2019-10-26 [0.3.1] - - 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 textwrap -import logging -import re -import nw - -from nw.convert.tokenizer import Tokenizer -from nw.constants import nwUnicode - -logger = logging.getLogger(__name__) - -class ToText(Tokenizer): - - def __init__(self, theProject, theParent): - Tokenizer.__init__(self, theProject, theParent) - return - - def doAutoReplace(self): - Tokenizer.doAutoReplace(self) - - repDict = { - "\t" : " ", - nwUnicode.U_NBSP : " ", - } - xRep = re.compile("|".join([re.escape(k) for k in repDict.keys()]), flags=re.DOTALL) - self.theText = xRep.sub(lambda x: repDict[x.group(0)], self.theText) - - return - - def doConvert(self): - """Converts the tokenized text into plain text. - """ - - if self.wordWrap > 0: - tWrap = textwrap.TextWrapper( - width = self.wordWrap, - initial_indent = "", - subsequent_indent = "", - expand_tabs = True, - replace_whitespace = True, - fix_sentence_endings = False, - break_long_words = True, - drop_whitespace = True, - break_on_hyphens = True, - tabsize = 8, - max_lines = None - ) - - self.theResult = "" - thisPar = [] - for tType, tText, tFormat, tAlign in self.theTokens: - - # First check if we have a comment or plain text, as they - # need some extra replacing before we proceed to wrapping - # and final formatting. - if tType == self.T_COMMENT: - tText = "[%s]" % tText - - elif tType == self.T_TEXT: - tTemp = tText - for xPos, xLen, xFmt in reversed(tFormat): - tTemp = tTemp[:xPos]+tTemp[xPos+xLen:] - tText = tTemp - - tLen = len(tText) - - # The text can now be word wrapped, if we have requested - # this and it's needed. - if tAlign == self.A_CENTRE: - if self.wordWrap > 0: - if tLen > self.wordWrap: - aText = tWrap.wrap(tText) - for n in range(len(aText)): - aText[n] = self._centreText(aText[n],self.wordWrap) - tText = "\n".join(aText) - else: - tText = self._centreText(tText,self.wordWrap) - else: - if self.wordWrap > 0 and tLen > self.wordWrap: - tText = tWrap.fill(tText) - - # Then the text can receive final formatting before we - # append it to the results. We also store text lines in a - # buffer and merge them only when we find an empty line, - # indicating a new paragraph. - if tType == self.T_EMPTY: - if len(thisPar) > 0: - tTemp = "\n".join(thisPar) - self.theResult += "%s\n\n" % tTemp.rstrip() - thisPar = [] - - elif tType == self.T_HEAD1: - uLine = "="*min(tLen,self.wordWrap) - if tAlign == self.A_CENTRE: - uLine = self._centreText(uLine,self.wordWrap) - self.theResult += "%s\n%s\n\n" % (tText,uLine) - - elif tType == self.T_HEAD2: - uLine = "~"*min(tLen,self.wordWrap) - self.theResult += "%s\n%s\n\n" % (tText,uLine) - - elif tType == self.T_HEAD3: - uLine = "-"*min(tLen,self.wordWrap) - self.theResult += "%s\n%s\n\n" % (tText,uLine) - - elif tType == self.T_HEAD4: - self.theResult += "%s\n\n" % tText - - elif tType == self.T_SEP: - if self.wordWrap > 0 and tLen < self.wordWrap: - tText = self._centreText(tText,self.wordWrap) - self.theResult += "%s\n\n" % tText - - elif tType == self.T_SKIP: - self.theResult += "\n\n\n" - - elif tType == self.T_TEXT: - thisPar.append(tText) - - elif tType == self.T_COMMENT and self.doComments: - self.theResult += "%s\n\n" % tText - - elif tType == self.T_KEYWORD and self.doKeywords: - self.theResult += "%s\n\n" % tText - - return - -# END Class ToText From eecf1e000d07cab6e68e002a947c942701a79e32 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 22:51:50 +0200 Subject: [PATCH 15/53] Finished cleaning up formatting on export and connected all dialog options --- nw/core/tohtml.py | 59 ++++++++++---- nw/core/tokenizer.py | 133 +++++++++++++++++++------------ nw/gui/build.py | 126 ++++++++++++++++++++++++++--- sample/sampleNovel/nwProject.nwx | 4 +- 4 files changed, 238 insertions(+), 84 deletions(-) diff --git a/nw/core/tohtml.py b/nw/core/tohtml.py index 0b786ad6..2b98be99 100644 --- a/nw/core/tohtml.py +++ b/nw/core/tohtml.py @@ -104,15 +104,24 @@ class ToHtml(Tokenizer): thisPar = [] for tType, tText, tFormat, tAlign in self.theTokens: + # Styles aStyle = [] if tAlign == self.A_CENTRE: aStyle.append("text-align: center;") + elif tAlign == self.A_RIGHT: + aStyle.append("text-align: right;") + elif tAlign == self.A_JUSTIFY: + aStyle.append("text-align: justify;") + + if tType == self.T_HEAD2: + aStyle.append("page-break-before: always;") if len(aStyle) > 0: hStyle = " style='%s'" % (" ".join(aStyle)) else: hStyle = "" + # Process TextType if tType == self.T_EMPTY: if len(thisPar) > 0: tTemp = "".join(thisPar) @@ -120,23 +129,30 @@ class ToHtml(Tokenizer): thisPar = [] elif tType == self.T_HEAD1: - self.theResult += "%s\n" % (hStyle,tText) + tHead = tText.replace(r"\\", "
") + self.theResult += "%s\n" % (hStyle, tHead) elif tType == self.T_HEAD2: - self.theResult += "%s\n" % (hStyle,tText) + tHead = tText.replace(r"\\", "
") + self.theResult += "%s\n" % (hStyle, tHead) elif tType == self.T_HEAD3: - self.theResult += "%s\n" % (hStyle,tText) + tHead = tText.replace(r"\\", "
") + self.theResult += "%s\n" % (hStyle, tHead) elif tType == self.T_HEAD4: - self.theResult += "%s\n" % (hStyle,tText) + tHead = tText.replace(r"\\", "
") + self.theResult += "%s\n" % (hStyle, tHead) elif tType == self.T_SEP: - self.theResult += "%s

\n" % (hStyle,tText) + self.theResult += "%s

\n" % (hStyle, tText) elif tType == self.T_SKIP: self.theResult += "

 

\n" + elif tType == self.T_PBREAK: + self.theResult += "

 

\n" + elif tType == self.T_TEXT: tTemp = tText for xPos, xLen, xFmt in reversed(tFormat): @@ -146,6 +162,9 @@ class ToHtml(Tokenizer): else: thisPar.append(tTemp.rstrip()+" ") + elif tType == self.T_SYNOPSIS and self.doSynopsis: + self.theResult += self._formatSynopsis(tText) + elif tType == self.T_COMMENT and self.doComments: self.theResult += self._formatComments(tText) @@ -158,12 +177,27 @@ class ToHtml(Tokenizer): # Internal Functions ## - def _formatKeywords(self, tText): - """Apply HTML formatting to keywords. + def _formatSynopsis(self, tText): + """Apply HTML formatting to synopsis. """ if not self.forPreview: - return "
@%s
\n" % tText + return "

Synopsis: %s

\n" % tText + + return "

%s

\n" % tText + + def _formatComments(self, tText): + """Apply HTML formatting to comments. + """ + + if not self.forPreview: + return "

Comment: %s

\n" % tText + + return "

%s

\n" % tText + + def _formatKeywords(self, tText): + """Apply HTML formatting to keywords. + """ tText = "@"+tText isValid, theBits, thePos = self.theParent.theIndex.scanThis(tText) @@ -182,13 +216,4 @@ class ToHtml(Tokenizer): return "
%s
" % retText - def _formatComments(self, tText): - """Apply HTML formatting to comments. - """ - - if not self.forPreview: - return "
%s
\n" % tText - - return "

%s

\n" % tText - # END Class ToHtml diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index 1cf2a40e..a39d12f2 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -40,29 +40,30 @@ logger = logging.getLogger(__name__) class Tokenizer(): - FMT_B_B = 1 # Begin bold - FMT_B_E = 2 # End bold - FMT_I_B = 3 # Begin italics - FMT_I_E = 4 # End italics - FMT_U_B = 5 # Begin underline - FMT_U_E = 6 # End underline + FMT_B_B = 1 # Begin bold + FMT_B_E = 2 # End bold + FMT_I_B = 3 # Begin italics + FMT_I_E = 4 # End italics + FMT_U_B = 5 # Begin underline + FMT_U_E = 6 # End underline - T_EMPTY = 1 # Empty line (new paragraph) - T_COMMENT = 2 # Comment line - T_KEYWORD = 3 # Command line - T_HEAD1 = 4 # Header 1 (title) - T_HEAD2 = 5 # Header 2 (chapter) - T_HEAD3 = 6 # Header 3 (scene) - T_HEAD4 = 7 # Header 4 - T_TEXT = 8 # Text line - T_SEP = 9 # Scene separator - T_SKIP = 10 # Paragraph break - T_PBREAK = 11 # Page break + T_EMPTY = 1 # Empty line (new paragraph) + T_SYNOPSIS = 2 # Synopsis comment + T_COMMENT = 3 # Comment line + T_KEYWORD = 4 # Command line + T_HEAD1 = 5 # Header 1 (title) + T_HEAD2 = 6 # Header 2 (chapter) + T_HEAD3 = 7 # Header 3 (scene) + T_HEAD4 = 8 # Header 4 + T_TEXT = 9 # Text line + T_SEP = 10 # Scene separator + T_SKIP = 11 # Paragraph break + T_PBREAK = 12 # Page break - A_LEFT = 1 # Left aligned - A_RIGHT = 2 # Right aligned - A_CENTRE = 3 # Centred - A_JUSTIFY = 4 # Justified + A_LEFT = 1 # Left aligned + A_RIGHT = 2 # Right aligned + A_CENTRE = 3 # Centred + A_JUSTIFY = 4 # Justified def __init__(self, theProject, theParent): @@ -78,8 +79,11 @@ class Tokenizer(): self.theResult = None # The result text after conversion # User Settings + self.doBodyText = True # Include body text + self.doSynopsis = False # Also process synopsis comments self.doComments = False # Also process comments self.doKeywords = False # Also process keywords like tags and references + self.doJustify = False # Justify text self.fmtTitle = "%title%" # Formatting for titles self.fmtChapter = "%title%" # Formatting for numbered chapters @@ -113,14 +117,6 @@ class Tokenizer(): # Setters ## - def setComments(self, doComments): - self.doComments = doComments - return - - def setKeywords(self, doKeywords): - self.doKeywords = doKeywords - return - def setTitleFormat(self, fmtTitle): self.fmtTitle = fmtTitle return @@ -143,6 +139,26 @@ class Tokenizer(): self.hideSection = hideSection return + def setBodyText(self, doBodyText): + self.doBodyText = doBodyText + return + + def setSynopsis(self, doSynopsis): + self.doSynopsis = doSynopsis + return + + def setComments(self, doComments): + self.doComments = doComments + return + + def setKeywords(self, doKeywords): + self.doKeywords = doKeywords + return + + def setJustify(self, doJustify): + self.doJustify = doJustify + return + ## # Class Methods ## @@ -207,25 +223,38 @@ class Tokenizer(): [None, self.FMT_U_B, None, self.FMT_U_E] )] + if self.doJustify: + defAlign = self.A_JUSTIFY + else: + defAlign = self.A_LEFT + self.theTokens = [] for aLine in self.theText.splitlines(): # Tag lines starting with specific characters if len(aLine.strip()) == 0: - self.theTokens.append((self.T_EMPTY,"",None,self.A_LEFT)) + self.theTokens.append((self.T_EMPTY, "", None, self.A_LEFT)) elif aLine[0] == "%": - self.theTokens.append((self.T_COMMENT,aLine[1:].strip(),None,self.A_LEFT)) + cLine = aLine[1:].strip() + if cLine.lower().startswith("synopsis:"): + self.theTokens.append((self.T_SYNOPSIS, cLine[9:].strip(), None, defAlign)) + else: + self.theTokens.append((self.T_COMMENT, aLine[1:].strip(), None, defAlign)) elif aLine[0] == "@": - self.theTokens.append((self.T_KEYWORD,aLine[1:].strip(),None,self.A_LEFT)) + self.theTokens.append((self.T_KEYWORD, aLine[1:].strip(), None, self.A_LEFT)) elif aLine[:2] == "# ": - self.theTokens.append((self.T_HEAD1,aLine[2:].strip(),None,self.A_LEFT)) + self.theTokens.append((self.T_HEAD1, aLine[2:].strip(), None, self.A_LEFT)) elif aLine[:3] == "## ": - self.theTokens.append((self.T_HEAD2,aLine[3:].strip(),None,self.A_LEFT)) + self.theTokens.append((self.T_HEAD2, aLine[3:].strip(), None, self.A_LEFT)) elif aLine[:4] == "### ": - self.theTokens.append((self.T_HEAD3,aLine[4:].strip(),None,self.A_LEFT)) + self.theTokens.append((self.T_HEAD3, aLine[4:].strip(), None, self.A_LEFT)) elif aLine[:5] == "#### ": - self.theTokens.append((self.T_HEAD4,aLine[5:].strip(),None,self.A_LEFT)) + self.theTokens.append((self.T_HEAD4, aLine[5:].strip(), None, self.A_LEFT)) else: + if not self.doBodyText: + # Skip all body text + continue + # Otherwise we use RegEx to find formatting tags within a line of text fmtPos = [] for theRX, theKeys in rxFormats: @@ -240,11 +269,11 @@ class Tokenizer(): # Save the line as is, but append the array of formatting locations # sorted by position - fmtPos = sorted(fmtPos,key=itemgetter(0)) - self.theTokens.append((self.T_TEXT,aLine,fmtPos,self.A_LEFT)) + fmtPos = sorted(fmtPos, key=itemgetter(0)) + self.theTokens.append((self.T_TEXT, aLine, fmtPos, defAlign)) # Always add an empty line at the end - self.theTokens.append((self.T_EMPTY,"",None,self.A_LEFT)) + self.theTokens.append((self.T_EMPTY, "", None, self.A_LEFT)) return @@ -283,37 +312,37 @@ class Tokenizer(): if not isUnNum: self.numChapter += 1 tText = self._formatChapter(tText,isUnNum) - self.theTokens[n] = (tType,tText,None,self.A_LEFT) + self.theTokens[n] = (tType, tText, None, self.A_LEFT) self.firstScene = True elif tType == self.T_HEAD3: tTemp = self._formatScene(tText) if tTemp == "" and self.hideScene: - self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) + self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) elif tTemp == "" and not self.hideScene: if self.firstScene: - self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) + self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) else: - self.theTokens[n] = (self.T_SKIP,"",None,self.A_LEFT) + self.theTokens[n] = (self.T_SKIP, "", None, self.A_LEFT) elif tTemp == self.fmtScene: if self.firstScene: - self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) + self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) else: - self.theTokens[n] = (self.T_SEP,tTemp,None,self.A_CENTRE) + self.theTokens[n] = (self.T_SEP, tTemp, None, self.A_CENTRE) else: - self.theTokens[n] = (tType,tTemp,None,self.A_LEFT) + self.theTokens[n] = (tType, tTemp, None, self.A_LEFT) self.firstScene = False elif tType == self.T_HEAD4: tTemp = self._formatSection(tText) if tTemp == "" and self.hideSection: - self.theTokens[n] = (self.T_EMPTY,"",None,self.A_LEFT) + self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) elif tTemp == "" and not self.hideSection: - self.theTokens[n] = (self.T_SKIP,"",None,self.A_LEFT) + self.theTokens[n] = (self.T_SKIP, "", None, self.A_LEFT) elif tTemp == self.fmtSection: - self.theTokens[n] = (self.T_SEP,tTemp,None,self.A_CENTRE) + self.theTokens[n] = (self.T_SEP, tTemp, None, self.A_CENTRE) else: - self.theTokens[n] = (tType,tTemp,None,self.A_LEFT) + self.theTokens[n] = (tType, tTemp, None, self.A_LEFT) # For title page and partitions, we need to centre all text # and for some formats, we need a page break @@ -323,9 +352,9 @@ class Tokenizer(): tType = tToken[0] tText = tToken[1] tFormat = tToken[2] - self.theTokens[n] = (tType,tText,tFormat,self.A_CENTRE) + self.theTokens[n] = (tType, tText, tFormat, self.A_CENTRE) - self.theTokens.append((self.T_PBREAK,"",None,self.A_LEFT)) + self.theTokens.append((self.T_PBREAK, "", None, self.A_LEFT)) return diff --git a/nw/gui/build.py b/nw/gui/build.py index 94c82019..2e1e5f0f 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -42,7 +42,9 @@ from PyQt5.QtWidgets import ( from nw.gui.additions import QSwitch from nw.core import ToHtml -from nw.constants import nwConst, nwFiles, nwAlert, nwItemType +from nw.constants import ( + nwConst, nwFiles, nwAlert, nwItemType, nwItemLayout, nwItemClass +) logger = logging.getLogger(__name__) @@ -70,11 +72,11 @@ class GuiBuildNovel(QDialog): self.setWindowTitle("Build Project") self.setMinimumWidth(800) - self.setMinimumHeight(700) + self.setMinimumHeight(800) self.resize( self.optState.getInt("GuiBuildNovel", "winWidth", 800), - self.optState.getInt("GuiBuildNovel", "winHeight", 700) + self.optState.getInt("GuiBuildNovel", "winHeight", 800) ) self.outerBox = QVBoxLayout() @@ -128,6 +130,21 @@ class GuiBuildNovel(QDialog): self.titleForm.setColumnStretch(0, 1) self.titleForm.setColumnStretch(1, 0) + # Text Options + # ============= + self.textGroup = QGroupBox("Text Options", self) + self.textForm = QGridLayout(self) + self.textGroup.setLayout(self.textForm) + + self.justifyText = QSwitch() + self.justifyText.setChecked(self.optState.getBool("GuiBuildNovel", "justifyText", False)) + + self.textForm.addWidget(QLabel("Justify text"), 0, 0) + self.textForm.addWidget(self.justifyText, 0, 1) + + self.textForm.setColumnStretch(0, 1) + self.textForm.setColumnStretch(1, 0) + # Build Settings # ============== self.buildGroup = QGroupBox("Build Overrides", self) @@ -156,11 +173,11 @@ class GuiBuildNovel(QDialog): self.includeKeywords = QSwitch() self.includeKeywords.setChecked(self.theProject.titleFormat["withKeywords"]) - self.includeForm.addWidget(QLabel("Include Synopsis"), 0, 0) + self.includeForm.addWidget(QLabel("Include synopsis"), 0, 0) self.includeForm.addWidget(self.includeSynopsis, 0, 1) - self.includeForm.addWidget(QLabel("Include Comments"), 1, 0) + self.includeForm.addWidget(QLabel("Include comments"), 1, 0) self.includeForm.addWidget(self.includeComments, 1, 1) - self.includeForm.addWidget(QLabel("Include Keywords"), 2, 0) + self.includeForm.addWidget(QLabel("Include keywords"), 2, 0) self.includeForm.addWidget(self.includeKeywords, 2, 1) self.includeForm.setColumnStretch(0, 1) @@ -179,11 +196,11 @@ class GuiBuildNovel(QDialog): self.ignoreFlag = QSwitch() self.ignoreFlag.setChecked(self.optState.getBool("GuiBuildNovel", "ignoreFlag", False)) - self.addsForm.addWidget(QLabel("Include Novel Files"), 0, 0) + self.addsForm.addWidget(QLabel("Include novel files"), 0, 0) self.addsForm.addWidget(self.novelFiles, 0, 1) - self.addsForm.addWidget(QLabel("Include Note Files"), 1, 0) + self.addsForm.addWidget(QLabel("Include note files"), 1, 0) self.addsForm.addWidget(self.noteFiles, 1, 1) - self.addsForm.addWidget(QLabel("Ignore Export Flag"), 2, 0) + self.addsForm.addWidget(QLabel("Ignore export flag"), 2, 0) self.addsForm.addWidget(self.ignoreFlag, 2, 1) self.addsForm.setColumnStretch(0, 1) @@ -245,6 +262,7 @@ class GuiBuildNovel(QDialog): # Assemble GUI # ============ self.toolsBox.addWidget(self.titleGroup) + self.toolsBox.addWidget(self.textGroup) self.toolsBox.addWidget(self.buildGroup) self.toolsBox.addWidget(self.includeGroup) self.toolsBox.addWidget(self.addsGroup) @@ -280,11 +298,50 @@ class GuiBuildNovel(QDialog): """Build a preview of the project in the document viewer. """ - makeHtml = ToHtml(self.theProject, self.theParent) - self.htmlText = "" + # Get Settings + fmtTitle = self.fmtTitle.text().strip() + fmtChapter = self.fmtChapter.text().strip() + fmtUnnumbered = self.fmtUnnumbered.text().strip() + fmtScene = self.fmtScene.text().strip() + fmtSection = self.fmtSection.text().strip() + justifyText = self.justifyText.isChecked() + outlineMode = self.outlineMode.isChecked() + incSynopsis = self.includeSynopsis.isChecked() + incComments = self.includeComments.isChecked() + incKeywords = self.includeKeywords.isChecked() + novelFiles = self.novelFiles.isChecked() + noteFiles = self.noteFiles.isChecked() + ignoreFlag = self.ignoreFlag.isChecked() + doBodyText = True - for tItem in self.theProject.projTree: - if tItem is not None and tItem.itemType == nwItemType.FILE: + if outlineMode: + fmtTitle = "%title%" + fmtChapter = "Chapter: %title%" + fmtUnnumbered = "Chapter: %title%" + fmtScene = "Scene: %title%" + fmtSection = "Section: %title%" + doBodyText = False + incSynopsis = True + novelFiles = True + noteFiles = False + + makeHtml = ToHtml(self.theProject, self.theParent) + makeHtml.setTitleFormat(fmtTitle) + makeHtml.setChapterFormat(fmtChapter) + makeHtml.setUnNumberedFormat(fmtUnnumbered) + makeHtml.setSceneFormat(fmtScene, fmtScene == "") + makeHtml.setSectionFormat(fmtSection, fmtSection == "") + makeHtml.setBodyText(doBodyText) + makeHtml.setSynopsis(incSynopsis) + makeHtml.setComments(incComments) + makeHtml.setKeywords(incKeywords) + makeHtml.setJustify(justifyText) + + self.htmlText = "" + self.buildProgress.setMaximum(len(self.theProject.projTree)) + self.buildProgress.setValue(0) + for nItt, tItem in enumerate(self.theProject.projTree): + if self._checkInclude(tItem, noteFiles, novelFiles, ignoreFlag): makeHtml.setText(tItem.itemHandle) makeHtml.doAutoReplace() makeHtml.tokenizeText() @@ -292,11 +349,49 @@ class GuiBuildNovel(QDialog): makeHtml.doConvert() makeHtml.doPostProcessing() self.htmlText += makeHtml.getResult() + self.buildProgress.setValue(nItt+1) self.docView.setHtml(self.htmlText) return + def _checkInclude(self, theItem, noteFiles, novelFiles, ignoreFlag): + """This function checks whether a file should be included in the + export or not. For standard note and novel files, this is + controlled by the options selected by the user. For other files + classified as non-exportable, a few checks must be made, and the + following are not: + * Items that are not actual files. + * Items that have been orphaned which are tagged as NO_LAYOUT + and NO_CLASS. + * Items that appear in the TRASH folder or have parent set to + None (orphaned files). + """ + + if theItem is None: + return False + + if not theItem.isExported and not ignoreFlag: + return False + + isNone = theItem.itemType != nwItemType.FILE + isNone |= theItem.itemLayout == nwItemLayout.NO_LAYOUT + isNone |= theItem.itemClass == nwItemClass.NO_CLASS + isNone |= theItem.itemClass == nwItemClass.TRASH + isNone |= theItem.parHandle == self.theProject.projTree.trashRoot() + isNone |= theItem.parHandle is None + isNote = theItem.itemLayout == nwItemLayout.NOTE + isNovel = not isNone and not isNote + + if isNone: + return False + if isNote and not noteFiles: + return False + if isNovel and not novelFiles: + return False + + return True + def _saveDocument(self, theFormat): """Save the document to various formats. """ @@ -474,6 +569,7 @@ class GuiBuildNovel(QDialog): # GUI Settings self.optState.setValue("GuiBuildNovel", "winWidth", self.width()) self.optState.setValue("GuiBuildNovel", "winHeight", self.height()) + self.optState.setValue("GuiBuildNovel", "justifyText", self.justifyText.isChecked()) self.optState.setValue("GuiBuildNovel", "outlineMode", self.outlineMode.isChecked()) self.optState.setValue("GuiBuildNovel", "addNovel", self.novelFiles.isChecked()) self.optState.setValue("GuiBuildNovel", "addNotes", self.noteFiles.isChecked()) @@ -557,6 +653,10 @@ class GuiBuildNovelDocView(QTextBrowser): "mark {" " background-color: rgb(240, 198, 116);" "}\n" + ".tags {" + " color: rgb(245, 135, 31);" + " font-wright: bold;" + "}\n" ) self.qDocument.setDefaultStyleSheet(styleSheet) diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index 69ac815d..7b76aea0 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project @@ -20,7 +20,7 @@
%title% - Chapter %num%\\%title% + Chapter %num%.\\%title% %title% * * *
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 16/53] 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 From 0faf1f9986c3172cb45f63e19f723e085eab1616 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 10 May 2020 23:24:32 +0200 Subject: [PATCH 17/53] The isExported option should only apply to files --- nw/core/project.py | 2 +- nw/gui/dialogs/itemeditor.py | 9 +++++++-- nw/gui/elements/docdetails.py | 11 +++++++---- nw/gui/elements/doctree.py | 18 ++++++++++++------ sample/sampleNovel/nwProject.nwx | 8 +------- tests/reference/gui/0_nwProject.nwx | 7 +------ tests/reference/gui/1_nwProject.nwx | 7 +------ tests/reference/gui/2_nwProject.nwx | 7 +------ tests/reference/gui/3_nwProject.nwx | 9 ++------- tests/reference/proj/1_nwProject.nwx | 7 +------ tests/reference/proj/2_nwProject.nwx | 11 +---------- tests/test_gui.py | 3 +++ tests/test_item.py | 4 ++-- 13 files changed, 40 insertions(+), 63 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index a0396c02..0dcb60b9 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -1350,8 +1350,8 @@ class NWItem(): xSub = self._subPack(xPack,"class", text=str(self.itemClass.name)) xSub = self._subPack(xPack,"status", text=str(self.itemStatus)) xSub = self._subPack(xPack,"expanded", text=str(self.isExpanded)) - xSub = self._subPack(xPack,"exported", text=str(self.isExported)) if self.itemType == nwItemType.FILE: + xSub = self._subPack(xPack,"exported", text=str(self.isExported)) xSub = self._subPack(xPack,"layout", text=str(self.itemLayout.name)) xSub = self._subPack(xPack,"charCount", text=str(self.charCount), none=False) xSub = self._subPack(xPack,"wordCount", text=str(self.wordCount), none=False) diff --git a/nw/gui/dialogs/itemeditor.py b/nw/gui/dialogs/itemeditor.py index 432ddb08..fee4a74f 100644 --- a/nw/gui/dialogs/itemeditor.py +++ b/nw/gui/dialogs/itemeditor.py @@ -105,9 +105,14 @@ class GuiItemEditor(QDialog): if itemLayout in self.validLayouts: self.editLayout.addItem(nwLabels.LAYOUT_NAME[itemLayout],itemLayout) - self.editExport = QSwitch() - self.editExport.setChecked(self.theItem.isExported) self.textExport = QLabel("Include when building project") + self.editExport = QSwitch() + if self.theItem.itemType == nwItemType.FILE: + self.editExport.setEnabled(True) + self.editExport.setChecked(self.theItem.isExported) + else: + self.editExport.setEnabled(False) + self.editExport.setChecked(False) self.mainForm.addWidget(QLabel("Label"), 0, 0) self.mainForm.addWidget(self.editName, 0, 1, 1, 2) diff --git a/nw/gui/elements/docdetails.py b/nw/gui/elements/docdetails.py index de547c06..8c231fa6 100644 --- a/nw/gui/elements/docdetails.py +++ b/nw/gui/elements/docdetails.py @@ -32,7 +32,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont from PyQt5.QtWidgets import QFrame, QGridLayout, QLabel -from nw.constants import nwLabels, nwItemClass, nwUnicode +from nw.constants import nwLabels, nwItemClass, nwItemType, nwUnicode logger = logging.getLogger(__name__) @@ -170,10 +170,13 @@ class GuiDocDetails(QFrame): iStatus = self.theProject.importItems.checkEntry(iStatus) # Make sure it's valid flagIcon = self.theParent.importIcons[iStatus] - if nwItem.isExported: - exportFlag = nwUnicode.U_CHECK + if nwItem.itemType == nwItemType.FILE: + if nwItem.isExported: + exportFlag = nwUnicode.U_CHECK + else: + exportFlag = " " else: - exportFlag = " " + exportFlag = "+" self.labelFlag.setText(exportFlag) self.statusFlag.setPixmap(flagIcon.pixmap(10, 10)) diff --git a/nw/gui/elements/doctree.py b/nw/gui/elements/doctree.py index 0c6b8bb2..4b0a3ed2 100644 --- a/nw/gui/elements/doctree.py +++ b/nw/gui/elements/doctree.py @@ -412,13 +412,19 @@ class GuiDocTree(QTreeWidget): tHandle = nwItem.itemHandle pHandle = nwItem.parHandle - if nwItem.isExported: - tStatus = nwUnicode.U_CHECK - else: - tStatus = " " - tStatus += " "+nwLabels.CLASS_FLAG[nwItem.itemClass] + stExport = " " + stClass = nwLabels.CLASS_FLAG[nwItem.itemClass] + stLayout = "" + if nwItem.itemType == nwItemType.FILE: - tStatus += "."+nwLabels.LAYOUT_FLAG[nwItem.itemLayout] + stLayout = "."+nwLabels.LAYOUT_FLAG[nwItem.itemLayout] + if nwItem.isExported: + stExport = nwUnicode.U_CHECK + else: + stExport = "+" + + tStatus = stExport+" "+stClass+stLayout + iStatus = nwItem.itemStatus if tClass == nwItemClass.NOVEL: iStatus = self.theProject.statusItems.checkEntry(iStatus) # Make sure it's valid diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index 7b76aea0..eb89f47c 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project @@ -51,7 +51,6 @@ NOVEL Started True - True Title Page @@ -72,7 +71,6 @@ NOVEL 1st Draft True - True Chapter One @@ -171,7 +169,6 @@ CHARACTER None True - True Main Characters @@ -179,7 +176,6 @@ CHARACTER None True - True John Smith @@ -213,7 +209,6 @@ WORLD None True - True Earth @@ -260,7 +255,6 @@ TRASH None True - True Delete Me! diff --git a/tests/reference/gui/0_nwProject.nwx b/tests/reference/gui/0_nwProject.nwx index 3007ae93..db1151d3 100644 --- a/tests/reference/gui/0_nwProject.nwx +++ b/tests/reference/gui/0_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -42,7 +42,6 @@ NOVEL New False - True New Chapter @@ -50,7 +49,6 @@ NOVEL New False - True New Scene @@ -71,7 +69,6 @@ CHARACTER New False - True Plot @@ -79,7 +76,6 @@ PLOT New False - True World @@ -87,7 +83,6 @@ WORLD New False - True diff --git a/tests/reference/gui/1_nwProject.nwx b/tests/reference/gui/1_nwProject.nwx index 38708ab2..bf16def6 100644 --- a/tests/reference/gui/1_nwProject.nwx +++ b/tests/reference/gui/1_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -42,7 +42,6 @@ NOVEL New True - True New Chapter @@ -50,7 +49,6 @@ NOVEL New True - True New Scene @@ -71,7 +69,6 @@ CHARACTER New True - True New File @@ -92,7 +89,6 @@ PLOT New True - True New File @@ -113,7 +109,6 @@ WORLD New True - True New File diff --git a/tests/reference/gui/2_nwProject.nwx b/tests/reference/gui/2_nwProject.nwx index 58b80897..bf3c5b61 100644 --- a/tests/reference/gui/2_nwProject.nwx +++ b/tests/reference/gui/2_nwProject.nwx @@ -1,5 +1,5 @@ - + Project Name Project Title @@ -46,7 +46,6 @@ NOVEL New False - True New Chapter @@ -54,7 +53,6 @@ NOVEL New False - True New Scene @@ -75,7 +73,6 @@ CHARACTER New False - True Plot @@ -83,7 +80,6 @@ PLOT New False - True World @@ -91,7 +87,6 @@ WORLD New False - True diff --git a/tests/reference/gui/3_nwProject.nwx b/tests/reference/gui/3_nwProject.nwx index 7c5d8511..bee4eb0a 100644 --- a/tests/reference/gui/3_nwProject.nwx +++ b/tests/reference/gui/3_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -42,7 +42,6 @@ NOVEL New False - True New Chapter @@ -50,7 +49,6 @@ NOVEL New False - True Just a Page @@ -58,7 +56,7 @@ NOVEL Note False - True + False PAGE 0 0 @@ -71,7 +69,6 @@ CHARACTER New False - True Plot @@ -79,7 +76,6 @@ PLOT New False - True World @@ -87,7 +83,6 @@ WORLD New False - True diff --git a/tests/reference/proj/1_nwProject.nwx b/tests/reference/proj/1_nwProject.nwx index febdc50e..0e537470 100644 --- a/tests/reference/proj/1_nwProject.nwx +++ b/tests/reference/proj/1_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -42,7 +42,6 @@ NOVEL New False - True Characters @@ -50,7 +49,6 @@ CHARACTER New False - True Plot @@ -58,7 +56,6 @@ PLOT New False - True World @@ -66,7 +63,6 @@ WORLD New False - True New Chapter @@ -74,7 +70,6 @@ NOVEL New False - True New Scene diff --git a/tests/reference/proj/2_nwProject.nwx b/tests/reference/proj/2_nwProject.nwx index b64d0071..eb98cc9f 100644 --- a/tests/reference/proj/2_nwProject.nwx +++ b/tests/reference/proj/2_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -42,7 +42,6 @@ NOVEL New False - True Characters @@ -50,7 +49,6 @@ CHARACTER New False - True Plot @@ -58,7 +56,6 @@ PLOT New False - True World @@ -66,7 +63,6 @@ WORLD New False - True New Chapter @@ -74,7 +70,6 @@ NOVEL New False - True New Scene @@ -95,7 +90,6 @@ TIMELINE New False - True Object @@ -103,7 +97,6 @@ OBJECT New False - True Custom1 @@ -111,7 +104,6 @@ CUSTOM New False - True Custom2 @@ -119,7 +111,6 @@ CUSTOM New False - True diff --git a/tests/test_gui.py b/tests/test_gui.py index 9e2cd53d..c32e8168 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -361,6 +361,9 @@ def testItemEditor(qtbot, nwTempGUI, nwRef, nwTemp): layoutIdx = itemEdit.editLayout.findData(nwItemLayout.PAGE) itemEdit.editLayout.setCurrentIndex(layoutIdx) + itemEdit.editExport.setChecked(False) + assert not itemEdit.editExport.isChecked() + itemEdit._doSave() itemEdit = GuiItemEditor(nwGUI, nwGUI.theProject, "31489056e0916") diff --git a/tests/test_item.py b/tests/test_item.py index 19f663f6..1bab7447 100644 --- a/tests/test_item.py +++ b/tests/test_item.py @@ -197,8 +197,8 @@ def testItemXMLPackUnpack(): assert etree.tostring(xContent, pretty_print=False, encoding="utf-8") == ( b"" b"" - b"A NameTRASHTRASHMain" - b"TrueTrue" + b"A NameTRASHTRASH" + b"MainTrue" b"" b"" ) From 3ad4e26dbc5613963394cc12a08329858d9d516e Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Mon, 11 May 2020 00:20:46 +0200 Subject: [PATCH 18/53] Cleanup of unneeded imports --- nw/core/project.py | 2 +- nw/gui/build.py | 5 ++--- nw/gui/dialogs/docmerge.py | 3 ++- nw/gui/dialogs/docsplit.py | 3 ++- nw/gui/dialogs/itemeditor.py | 2 +- nw/gui/elements/doceditor.py | 2 +- nw/gui/tools/optionstate.py | 1 - nw/guimain.py | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index 0dcb60b9..23fa2c24 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -44,7 +44,7 @@ from nw.core.tools import projectMaintenance from nw.core.document import NWDoc from nw.common import checkString, checkBool, checkInt, formatTimeStamp from nw.constants import ( - nwFiles, nwConst, nwItemType, nwItemClass, nwItemLayout, nwAlert + nwFiles, nwItemType, nwItemClass, nwItemLayout, nwAlert ) logger = logging.getLogger(__name__) diff --git a/nw/gui/build.py b/nw/gui/build.py index 2e1e5f0f..455c7ec7 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -35,9 +35,8 @@ from PyQt5.QtGui import ( QTextOption, QPalette, QColor, QTextDocumentWriter ) from PyQt5.QtWidgets import ( - QDialog, QVBoxLayout, QHBoxLayout, QTextBrowser, QPushButton, - QLabel, QLineEdit, QGroupBox, QGridLayout, QComboBox, QProgressBar, - QMenu, QAction, QFileDialog + QDialog, QVBoxLayout, QHBoxLayout, QTextBrowser, QPushButton, QLabel, + QLineEdit, QGroupBox, QGridLayout, QProgressBar, QMenu, QAction, QFileDialog ) from nw.gui.additions import QSwitch diff --git a/nw/gui/dialogs/docmerge.py b/nw/gui/dialogs/docmerge.py index 097f4217..1094fb78 100644 --- a/nw/gui/dialogs/docmerge.py +++ b/nw/gui/dialogs/docmerge.py @@ -52,10 +52,11 @@ class GuiDocMerge(QDialog): self.outerBox = QHBoxLayout() self.innerBox = QVBoxLayout() - self.setWindowTitle("Merge Documents") self.setLayout(self.outerBox) + self.setWindowTitle("Merge Documents") self.guiDeco = self.theParent.theTheme.loadDecoration("merge",(64,64)) + self.outerBox.setSpacing(16) self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) self.outerBox.addLayout(self.innerBox) diff --git a/nw/gui/dialogs/docsplit.py b/nw/gui/dialogs/docsplit.py index bfb4e8ee..dc795c77 100644 --- a/nw/gui/dialogs/docsplit.py +++ b/nw/gui/dialogs/docsplit.py @@ -53,10 +53,11 @@ class GuiDocSplit(QDialog): self.outerBox = QHBoxLayout() self.innerBox = QVBoxLayout() - self.setWindowTitle("Split Document") self.setLayout(self.outerBox) + self.setWindowTitle("Split Document") self.guiDeco = self.theParent.theTheme.loadDecoration("split",(64,64)) + self.outerBox.setSpacing(16) self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) self.outerBox.addLayout(self.innerBox) diff --git a/nw/gui/dialogs/itemeditor.py b/nw/gui/dialogs/itemeditor.py index fee4a74f..c94e053e 100644 --- a/nw/gui/dialogs/itemeditor.py +++ b/nw/gui/dialogs/itemeditor.py @@ -31,7 +31,7 @@ import nw from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QGridLayout, QLineEdit, - QPushButton, QComboBox, QLabel, QSpacerItem, QSizePolicy, QDialogButtonBox + QComboBox, QLabel, QSpacerItem, QSizePolicy, QDialogButtonBox ) from nw.gui.additions import QSwitch diff --git a/nw/gui/elements/doceditor.py b/nw/gui/elements/doceditor.py index 8aa583da..96ab264f 100644 --- a/nw/gui/elements/doceditor.py +++ b/nw/gui/elements/doceditor.py @@ -32,7 +32,7 @@ from time import time from PyQt5.QtCore import Qt, QTimer, pyqtSlot from PyQt5.QtWidgets import ( - qApp, QTextEdit, QAction, QMenu, QShortcut, QMessageBox, QLabel + qApp, QTextEdit, QAction, QMenu, QShortcut, QMessageBox ) from PyQt5.QtGui import ( QTextCursor, QTextOption, QKeySequence, QFont, QColor, QPalette, diff --git a/nw/gui/tools/optionstate.py b/nw/gui/tools/optionstate.py index 776dbcb0..ed45e7cf 100644 --- a/nw/gui/tools/optionstate.py +++ b/nw/gui/tools/optionstate.py @@ -32,7 +32,6 @@ import nw from os import path -from nw.common import checkString, checkBool, checkInt from nw.constants import nwFiles logger = logging.getLogger(__name__) diff --git a/nw/guimain.py b/nw/guimain.py index c76e9c6f..8a37386c 100644 --- a/nw/guimain.py +++ b/nw/guimain.py @@ -45,7 +45,7 @@ from nw.gui import ( GuiConfigEditor, GuiProjectEditor, GuiItemEditor, GuiProjectOutline, GuiSessionLogView, GuiDocMerge, GuiDocSplit, GuiProjectLoad, GuiBuildNovel ) -from nw.core import NWProject, NWDoc, NWIndex, countWords +from nw.core import NWProject, NWDoc, NWIndex from nw.constants import nwFiles, nwItemType, nwAlert logger = logging.getLogger(__name__) From 4dead91af26f6d7d046f7d199d96c1ad60fdc534 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Mon, 11 May 2020 18:18:19 +0200 Subject: [PATCH 19/53] Extended the style formatting of tokenizer and tohtml to allow multiple styles for a block --- nw/core/tohtml.py | 36 +++++--- nw/core/tokenizer.py | 204 ++++++++++++++++++++++++++++++++++++------- nw/gui/build.py | 43 ++++----- 3 files changed, 219 insertions(+), 64 deletions(-) diff --git a/nw/core/tohtml.py b/nw/core/tohtml.py index 2b98be99..ec3cec22 100644 --- a/nw/core/tohtml.py +++ b/nw/core/tohtml.py @@ -102,19 +102,35 @@ class ToHtml(Tokenizer): self.theResult = "" thisPar = [] - for tType, tText, tFormat, tAlign in self.theTokens: + for tType, tText, tFormat, tStyle in self.theTokens: # Styles aStyle = [] - if tAlign == self.A_CENTRE: - aStyle.append("text-align: center;") - elif tAlign == self.A_RIGHT: - aStyle.append("text-align: right;") - elif tAlign == self.A_JUSTIFY: - aStyle.append("text-align: justify;") - - if tType == self.T_HEAD2: - aStyle.append("page-break-before: always;") + if tStyle is not None: + if tStyle & self.A_LEFT: + aStyle.append("text-align: left;") + if tStyle & self.A_RIGHT: + aStyle.append("text-align: right;") + if tStyle & self.A_CENTRE: + aStyle.append("text-align: center;") + if tStyle & self.A_JUSTIFY: + aStyle.append("text-align: justify;") + if tStyle & self.A_PBB: + aStyle.append("page-break-before: always;") + if tStyle & self.A_PBB_L: + aStyle.append("page-break-before: left;") + if tStyle & self.A_PBB_R: + aStyle.append("page-break-before: right;") + if tStyle & self.A_PBB_AV: + aStyle.append("page-break-before: avoid;") + if tStyle & self.A_PBA: + aStyle.append("page-break-after: always;") + if tStyle & self.A_PBA_L: + aStyle.append("page-break-after: left;") + if tStyle & self.A_PBA_R: + aStyle.append("page-break-after: right;") + if tStyle & self.A_PBA_AV: + aStyle.append("page-break-after: avoid;") if len(aStyle) > 0: hStyle = " style='%s'" % (" ".join(aStyle)) diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index a39d12f2..84fbb100 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -60,10 +60,18 @@ class Tokenizer(): T_SKIP = 11 # Paragraph break T_PBREAK = 12 # Page break - A_LEFT = 1 # Left aligned - A_RIGHT = 2 # Right aligned - A_CENTRE = 3 # Centred - A_JUSTIFY = 4 # Justified + A_LEFT = 1 # Left aligned + A_RIGHT = 2 # Right aligned + A_CENTRE = 4 # Centred + A_JUSTIFY = 8 # Justified + A_PBB = 16 # Page break before + A_PBB_L = 32 # Page break before, left + A_PBB_R = 64 # Page break before, right + A_PBB_AV = 128 # Page break, avoid + A_PBA = 256 # Page break after + A_PBA_L = 512 # Page break after, left + A_PBA_R = 1024 # Page break after, right + A_PBA_AV = 2048 # Page break, avoid def __init__(self, theProject, theParent): @@ -208,6 +216,13 @@ class Tokenizer(): just contains plain text. in the case of plain text, apply the same RegExes that the syntax highlighter uses and save the locations of these formatting tags into the token array. + + The format of the token list is an entry with a four-tuple for + each line in the file. The tuple is as follows: + 1: The type of the block, self.T_* + 2: The text content of the block, without leading tags + 3: The internal formatting map of the text, self.FMT_* + 4: The style of the block, self.A_* """ # RegExes for adding formatting tags within text lines @@ -233,23 +248,63 @@ class Tokenizer(): # Tag lines starting with specific characters if len(aLine.strip()) == 0: - self.theTokens.append((self.T_EMPTY, "", None, self.A_LEFT)) + self.theTokens.append(( + self.T_EMPTY, + "", + None, + None + )) elif aLine[0] == "%": cLine = aLine[1:].strip() if cLine.lower().startswith("synopsis:"): - self.theTokens.append((self.T_SYNOPSIS, cLine[9:].strip(), None, defAlign)) + self.theTokens.append(( + self.T_SYNOPSIS, + cLine[9:].strip(), + None, + defAlign + )) else: - self.theTokens.append((self.T_COMMENT, aLine[1:].strip(), None, defAlign)) + self.theTokens.append(( + self.T_COMMENT, + aLine[1:].strip(), + None, + defAlign + )) elif aLine[0] == "@": - self.theTokens.append((self.T_KEYWORD, aLine[1:].strip(), None, self.A_LEFT)) + self.theTokens.append(( + self.T_KEYWORD, + aLine[1:].strip(), + None, + self.A_LEFT + )) elif aLine[:2] == "# ": - self.theTokens.append((self.T_HEAD1, aLine[2:].strip(), None, self.A_LEFT)) + self.theTokens.append(( + self.T_HEAD1, + aLine[2:].strip(), + None, + self.A_LEFT | self.A_PBB + )) elif aLine[:3] == "## ": - self.theTokens.append((self.T_HEAD2, aLine[3:].strip(), None, self.A_LEFT)) + self.theTokens.append(( + self.T_HEAD2, + aLine[3:].strip(), + None, + self.A_LEFT | self.A_PBA_AV + )) elif aLine[:4] == "### ": - self.theTokens.append((self.T_HEAD3, aLine[4:].strip(), None, self.A_LEFT)) + self.theTokens.append(( + self.T_HEAD3, + aLine[4:].strip(), + None, + self.A_LEFT | self.A_PBA_AV + )) elif aLine[:5] == "#### ": - self.theTokens.append((self.T_HEAD4, aLine[5:].strip(), None, self.A_LEFT)) + self.theTokens.append(( + self.T_HEAD4, + aLine[5:].strip(), + None, + self.A_LEFT | self.A_PBA_AV + )) else: if not self.doBodyText: # Skip all body text @@ -270,10 +325,20 @@ class Tokenizer(): # Save the line as is, but append the array of formatting locations # sorted by position fmtPos = sorted(fmtPos, key=itemgetter(0)) - self.theTokens.append((self.T_TEXT, aLine, fmtPos, defAlign)) + self.theTokens.append(( + self.T_TEXT, + aLine, + fmtPos, + defAlign + )) # Always add an empty line at the end - self.theTokens.append((self.T_EMPTY, "", None, self.A_LEFT)) + self.theTokens.append(( + self.T_EMPTY, + "", + None, + None + )) return @@ -308,53 +373,126 @@ class Tokenizer(): if tType == self.T_TEXT: self.firstScene = False - elif tType == self.T_HEAD2: + elif tType == self.T_HEAD2: # Novel Chapter if not isUnNum: self.numChapter += 1 tText = self._formatChapter(tText,isUnNum) - self.theTokens[n] = (tType, tText, None, self.A_LEFT) + self.theTokens[n] = ( + tType, + tText, + None, + self.A_LEFT | self.A_PBB_R + ) self.firstScene = True - elif tType == self.T_HEAD3: + elif tType == self.T_HEAD3: # Novel Scene tTemp = self._formatScene(tText) if tTemp == "" and self.hideScene: - self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) + self.theTokens[n] = ( + self.T_EMPTY, + "", + None, + None + ) elif tTemp == "" and not self.hideScene: if self.firstScene: - self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) + self.theTokens[n] = ( + self.T_EMPTY, + "", + None, + None + ) else: - self.theTokens[n] = (self.T_SKIP, "", None, self.A_LEFT) + self.theTokens[n] = ( + self.T_SKIP, + "", + None, + None + ) elif tTemp == self.fmtScene: if self.firstScene: - self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) + self.theTokens[n] = ( + self.T_EMPTY, + "", + None, + None + ) else: - self.theTokens[n] = (self.T_SEP, tTemp, None, self.A_CENTRE) + self.theTokens[n] = ( + self.T_SEP, + tTemp, + None, + self.A_CENTRE + ) else: - self.theTokens[n] = (tType, tTemp, None, self.A_LEFT) + self.theTokens[n] = ( + tType, + tTemp, + None, + self.A_LEFT | self.A_PBA_AV + ) self.firstScene = False - elif tType == self.T_HEAD4: + elif tType == self.T_HEAD4: # Novel Section tTemp = self._formatSection(tText) if tTemp == "" and self.hideSection: - self.theTokens[n] = (self.T_EMPTY, "", None, self.A_LEFT) + self.theTokens[n] = ( + self.T_EMPTY, + "", + None, + None + ) elif tTemp == "" and not self.hideSection: - self.theTokens[n] = (self.T_SKIP, "", None, self.A_LEFT) + self.theTokens[n] = ( + self.T_SKIP, + "", + None, + None + ) elif tTemp == self.fmtSection: - self.theTokens[n] = (self.T_SEP, tTemp, None, self.A_CENTRE) + self.theTokens[n] = ( + self.T_SEP, + tTemp, + None, + self.A_CENTRE + ) else: - self.theTokens[n] = (tType, tTemp, None, self.A_LEFT) + self.theTokens[n] = ( + tType, + tTemp, + None, + self.A_LEFT | self.A_PBA_AV + ) - # For title page and partitions, we need to centre all text - # and for some formats, we need a page break + # For title page and partitions, we need to centre all text. + # For partition, we also add a page break before, and for + # both types we always add a page break after the content. if isTitle or isPart: for n in range(len(self.theTokens)): tToken = self.theTokens[n] tType = tToken[0] tText = tToken[1] tFormat = tToken[2] - self.theTokens[n] = (tType, tText, tFormat, self.A_CENTRE) - - self.theTokens.append((self.T_PBREAK, "", None, self.A_LEFT)) + if isTitle: + self.theTokens[n] = ( + tType, + tText, + tFormat, + self.A_CENTRE + ) + else: + self.theTokens[n] = ( + tType, + tText, + tFormat, + self.A_CENTRE | self.A_PBB_R + ) + self.theTokens.append(( + self.T_PBREAK, + "", + None, + None + )) return diff --git a/nw/gui/build.py b/nw/gui/build.py index 455c7ec7..0cca7332 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -129,21 +129,6 @@ class GuiBuildNovel(QDialog): self.titleForm.setColumnStretch(0, 1) self.titleForm.setColumnStretch(1, 0) - # Text Options - # ============= - self.textGroup = QGroupBox("Text Options", self) - self.textForm = QGridLayout(self) - self.textGroup.setLayout(self.textForm) - - self.justifyText = QSwitch() - self.justifyText.setChecked(self.optState.getBool("GuiBuildNovel", "justifyText", False)) - - self.textForm.addWidget(QLabel("Justify text"), 0, 0) - self.textForm.addWidget(self.justifyText, 0, 1) - - self.textForm.setColumnStretch(0, 1) - self.textForm.setColumnStretch(1, 0) - # Build Settings # ============== self.buildGroup = QGroupBox("Build Overrides", self) @@ -159,6 +144,21 @@ class GuiBuildNovel(QDialog): self.buildForm.setColumnStretch(0, 1) self.buildForm.setColumnStretch(1, 0) + # Text Options + # ============= + self.textGroup = QGroupBox("Text Options", self) + self.textForm = QGridLayout(self) + self.textGroup.setLayout(self.textForm) + + self.justifyText = QSwitch() + self.justifyText.setChecked(self.optState.getBool("GuiBuildNovel", "justifyText", False)) + + self.textForm.addWidget(QLabel("Justify text"), 0, 0) + self.textForm.addWidget(self.justifyText, 0, 1) + + self.textForm.setColumnStretch(0, 1) + self.textForm.setColumnStretch(1, 0) + # Include Switches # ================ self.includeGroup = QGroupBox("Include Non-Text Elements", self) @@ -230,7 +230,7 @@ class GuiBuildNovel(QDialog): self.saveODT.triggered.connect(lambda: self._saveDocument(self.FMT_ODT)) self.saveMenu.addAction(self.saveODT) - # self.savePDF = QAction("Portable Document (.pdf)") + # self.savePDF = QAction("Portable Document Format (.pdf)") # self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF)) # self.saveMenu.addAction(self.savePDF) @@ -238,13 +238,14 @@ class GuiBuildNovel(QDialog): self.saveHTM1.triggered.connect(lambda: self._saveDocument(self.FMT_HTM1)) self.saveMenu.addAction(self.saveHTM1) - self.saveHTM2 = QAction("Plain HTML (.htm)") + self.saveHTM2 = QAction("%s HTML (.htm)" % nw.__package__) self.saveHTM2.triggered.connect(lambda: self._saveDocument(self.FMT_HTM2)) self.saveMenu.addAction(self.saveHTM2) - # self.saveMD = QAction("Markdown (.md)") - # self.saveMD.triggered.connect(lambda: self._saveDocument(self.FMT_MD)) - # self.saveMenu.addAction(self.saveMD) + if self.mainConf.verQtValue >= 51400: + self.saveMD = QAction("Markdown (.md)") + self.saveMD.triggered.connect(lambda: self._saveDocument(self.FMT_MD)) + self.saveMenu.addAction(self.saveMD) self.saveTXT = QAction("Plain Text (.txt)") self.saveTXT.triggered.connect(lambda: self._saveDocument(self.FMT_TXT)) @@ -261,8 +262,8 @@ class GuiBuildNovel(QDialog): # Assemble GUI # ============ self.toolsBox.addWidget(self.titleGroup) - self.toolsBox.addWidget(self.textGroup) self.toolsBox.addWidget(self.buildGroup) + self.toolsBox.addWidget(self.textGroup) self.toolsBox.addWidget(self.includeGroup) self.toolsBox.addWidget(self.addsGroup) self.toolsBox.addStretch(1) From 7c1f3144bd3f55905e8d5647b9a838c152eb14bf Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Mon, 11 May 2020 19:00:01 +0200 Subject: [PATCH 20/53] Reworked the title formatting functionality. All keywords can be used in all headings, and also added scene numbers. --- nw/assets/text/exportHelp_en.htm | 31 ++++++----- nw/core/tokenizer.py | 93 ++++++++++++++++++-------------- nw/gui/build.py | 12 ++--- sample/sampleNovel/nwProject.nwx | 10 ++-- 4 files changed, 82 insertions(+), 64 deletions(-) diff --git a/nw/assets/text/exportHelp_en.htm b/nw/assets/text/exportHelp_en.htm index df8eca2a..e921f05d 100644 --- a/nw/assets/text/exportHelp_en.htm +++ b/nw/assets/text/exportHelp_en.htm @@ -1,25 +1,30 @@

Help!

-

A brief guide to make the most out of the Build Project tool.

+

A brief guide to make the most out of the Build Novel Project tool.

Novel Title Formats

The format of the various title levels in the files under the Novel folder can be customised in - these settings. The actual title given in the headings of your files will replace all - occurrences of the keyword %title%. Any static text will be left as-is in the + these settings. The actual title given in the headings of your files will for instance replace + all occurrences of the keyword %title%. Any static text will be left as-is in the final title. An empty field means the title isn't written out at all.

The available formatting keywords are:

%title% – This is replaced with the text you put in your headings in your documents

-

%num% – This is replaced with the chapter number of your chapter type - headings. These are generated automaticall starting from 1.

-

%numword% – This is replaced with the chapter number of your chapter type - headings, but instead of an arabic number, the word for it is used instead, e.g. One, Two, - Fifteen, Twenty-Five, etc.

+

%chnum% – This is replaced with the chapter number of your chapter type + headings. These are generated automaticall starting from 1, but ignoring chapter headings in + files with "Unnumbered" layout.

+

%chnumword% – This is replaced with the chapter number, but instead of an + arabic number, the word for it is used, e.g. One, Two, Fifteen, Twenty-Five, etc.

+

%scnum% – This is replaced with the scene number. The number is reset to one + for each new chapter, so it is the scene number within the current chapter.

+

%scabsnum% – This is replaced with the absolute scene number. That is, the + number is counted from the first scene in the novel, and not reset for each chapter.

\\ – Two backslashes are replaced by a line break.

-

Note: The Scene format is treated slightly differently than the other title formats. If a - scene format is a constant text, that is, contains no %title%, it will be treated - as a scene separator instead. Scene separators are centred, and not shown if the chapter starts - directly on the first scene. If the field is blank, a large space between the scenes is added - instead.

+

Note: The Scene and Section formats are treated slightly differently than the other title + formats. If the format is a constant text, that is, contains no %keyword% tags, it + will be treated as a separator instead. Scene and Section separators are centred, and for + scenes, not shown if placed directly after the chapter heading. For instance, it you want the + classic three asterisk * * * separator between scenes, just put that into the + scene format box, and nothing else.

Build Overrides

Novel Outline Mode: This option will build an outline version of the novel rather than the diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index 84fbb100..f9d64d45 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -104,6 +104,8 @@ class Tokenizer(): # Instance Variables self.numChapter = 0 # Counter for chapter numbers + self.numChScene = 0 # Counter for scene number within chapter + self.numAbsScene = 0 # Counter for scene number within novel self.firstScene = False # Flag to indicate that the first scene of the chapter return @@ -370,23 +372,53 @@ class Tokenizer(): tType = tToken[0] tText = tToken[1] + # In case we see text before a scene, we reset the flag if tType == self.T_TEXT: self.firstScene = False - elif tType == self.T_HEAD2: # Novel Chapter - if not isUnNum: - self.numChapter += 1 - tText = self._formatChapter(tText,isUnNum) + elif tType == self.T_HEAD1: + # Main Title + # ========== + + tText = self._formatHeading(self.fmtTitle, tText) self.theTokens[n] = ( tType, tText, None, self.A_LEFT | self.A_PBB_R ) - self.firstScene = True - elif tType == self.T_HEAD3: # Novel Scene - tTemp = self._formatScene(tText) + elif tType == self.T_HEAD2: + # Novel Chapter + # ============= + + # Numbered or Unnumbered + if isUnNum: + tText = self._formatHeading(self.fmtUnNum, tText) + else: + self.numChapter += 1 + tText = self._formatHeading(self.fmtChapter, tText) + + # Format the chapter header + self.theTokens[n] = ( + tType, + tText, + None, + self.A_LEFT | self.A_PBB_R + ) + + # Set scene variables + self.firstScene = True + self.numChScene = 0 + + elif tType == self.T_HEAD3: + # Novel Scene + # =========== + + self.numChScene += 1 + self.numAbsScene += 1 + + tTemp = self._formatHeading(self.fmtScene, tText) if tTemp == "" and self.hideScene: self.theTokens[n] = ( self.T_EMPTY, @@ -431,10 +463,15 @@ class Tokenizer(): None, self.A_LEFT | self.A_PBA_AV ) + + # Definitely no longer the first scene self.firstScene = False - elif tType == self.T_HEAD4: # Novel Section - tTemp = self._formatSection(tText) + elif tType == self.T_HEAD4: + # Novel Section + # ============= + + tTemp = self._formatHeading(self.fmtSection, tText) if tTemp == "" and self.hideSection: self.theTokens[n] = ( self.T_EMPTY, @@ -500,38 +537,14 @@ class Tokenizer(): # Internal Functions ## - def _formatTitle(self, theText): - """Replace tokens for headers level 1. + def _formatHeading(self, theTitle, theText): + """Replaces the %keyword% strings. """ - theTitle = self.fmtTitle - theTitle = theTitle.replace("%title%", theText) - return theTitle - - def _formatChapter(self, theText, noNum): - """Replace tokens for headers level 2. - """ - if noNum: - theTitle = self.fmtUnNum - theTitle = theTitle.replace("%title%", theText) - else: - theTitle = self.fmtChapter - theTitle = theTitle.replace("%title%", theText) - theTitle = theTitle.replace("%num%", str(self.numChapter)) - theTitle = theTitle.replace("%numword%", numberToWord(self.numChapter,"en")) - return theTitle - - def _formatScene(self, theText): - """Replace tokens for headers level 3. - """ - theTitle = self.fmtScene - theTitle = theTitle.replace("%title%", theText) - return theTitle - - def _formatSection(self, theText): - """Replace tokens for headers level 4. - """ - theTitle = self.fmtSection - theTitle = theTitle.replace("%title%", theText) + theTitle = theTitle.replace(r"%title%", theText) + theTitle = theTitle.replace(r"%chnum%", str(self.numChapter)) + theTitle = theTitle.replace(r"%scnum%", str(self.numChScene)) + theTitle = theTitle.replace(r"%scabsnum%", str(self.numAbsScene)) + theTitle = theTitle.replace(r"%chnumword%", numberToWord(self.numChapter,"en")) return theTitle # END Class Tokenizer diff --git a/nw/gui/build.py b/nw/gui/build.py index 0cca7332..bac21b87 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -69,7 +69,7 @@ class GuiBuildNovel(QDialog): self.htmlText = "" - self.setWindowTitle("Build Project") + self.setWindowTitle("Build Novel Project") self.setMinimumWidth(800) self.setMinimumHeight(800) @@ -315,11 +315,11 @@ class GuiBuildNovel(QDialog): doBodyText = True if outlineMode: - fmtTitle = "%title%" - fmtChapter = "Chapter: %title%" - fmtUnnumbered = "Chapter: %title%" - fmtScene = "Scene: %title%" - fmtSection = "Section: %title%" + fmtTitle = r"%title%" + fmtChapter = r"Chapter %chnum%: %title%" + fmtUnnumbered = r"%title%" + fmtScene = r"Scene %chnum%.%scnum%: %title%" + fmtSection = r"Section: %title%" doBodyText = False incSynopsis = True novelFiles = True diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index eb89f47c..97d54bc9 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project @@ -10,8 +10,8 @@ True True - 6a2d6d5f4f401 - b3e74dbc1f584 + 96b68994dfa3d + 6a2d6d5f4f401 875 B @@ -20,9 +20,9 @@ %title% - Chapter %num%.\\%title% + Chapter %chnum%.\\%title% %title% - * * * + Scene %chnum%.%scnum%: %title%

True False From 8dca20e3aa9b1127de268ec4c83a3da3cbd78658 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 May 2020 00:10:03 +0200 Subject: [PATCH 21/53] Added printing and save to PDF, and made some changes to the tohtml class --- nw/core/tohtml.py | 62 ++++++++------ nw/core/tokenizer.py | 195 ++++++++++++++++--------------------------- nw/gui/build.py | 99 +++++++++++++++------- nw/gui/mainmenu.py | 2 +- 4 files changed, 182 insertions(+), 176 deletions(-) diff --git a/nw/core/tohtml.py b/nw/core/tohtml.py index ec3cec22..20c32e58 100644 --- a/nw/core/tohtml.py +++ b/nw/core/tohtml.py @@ -30,15 +30,19 @@ import re import nw from nw.core.tokenizer import Tokenizer -from nw.constants import nwUnicode, nwLabels +from nw.constants import nwUnicode, nwLabels, nwKeyWords logger = logging.getLogger(__name__) class ToHtml(Tokenizer): + M_PREVIEW = 0 # Tweak output for the DocViewer + M_EXPORT = 1 # Tweak output for saving to HTML or printing + M_EBOOK = 2 # Tweak output for converting to epub + def __init__(self, theProject, theParent): Tokenizer.__init__(self, theProject, theParent) - self.forPreview = False + self.genMode = self.M_EXPORT return ## @@ -47,11 +51,11 @@ class ToHtml(Tokenizer): def setPreview(self, forPreview, doComments): """If we're using this class to generate markdown preview, we - need to make a few changes to formatting, which is selected by - this flag. + need to make a few changes to formatting, which is managed by + these flags. """ - self.forPreview = forPreview if forPreview: + self.genMode = self.M_PREVIEW self.doKeywords = True self.doComments = doComments return @@ -66,7 +70,7 @@ class ToHtml(Tokenizer): """ Tokenizer.doAutoReplace(self) - if self.forPreview: + if self.genMode == self.M_PREVIEW: tabFmt = " "*8 else: tabFmt = " " @@ -102,6 +106,7 @@ class ToHtml(Tokenizer): self.theResult = "" thisPar = [] + parStyle = "" for tType, tText, tFormat, tStyle in self.theTokens: # Styles @@ -141,8 +146,9 @@ class ToHtml(Tokenizer): if tType == self.T_EMPTY: if len(thisPar) > 0: tTemp = "".join(thisPar) - self.theResult += "%s

\n" % (hStyle,tTemp.rstrip()) + self.theResult += "%s

\n" % (parStyle,tTemp.rstrip()) thisPar = [] + parStyle = "" elif tType == self.T_HEAD1: tHead = tText.replace(r"\\", "
") @@ -164,13 +170,11 @@ class ToHtml(Tokenizer): self.theResult += "%s

\n" % (hStyle, tText) elif tType == self.T_SKIP: - self.theResult += "

 

\n" - - elif tType == self.T_PBREAK: - self.theResult += "

 

\n" + self.theResult += " 

\n" % hStyle elif tType == self.T_TEXT: tTemp = tText + parStyle = hStyle for xPos, xLen, xFmt in reversed(tFormat): tTemp = tTemp[:xPos]+htmlTags[xFmt]+tTemp[xPos+xLen:] if tText.endswith(" "): @@ -196,20 +200,18 @@ class ToHtml(Tokenizer): def _formatSynopsis(self, tText): """Apply HTML formatting to synopsis. """ - - if not self.forPreview: + if self.genMode == self.M_EXPORT: return "

Synopsis: %s

\n" % tText - - return "

%s

\n" % tText + else: + return "

%s

\n" % tText def _formatComments(self, tText): """Apply HTML formatting to comments. """ - - if not self.forPreview: + if self.genMode == self.M_EXPORT: return "

Comment: %s

\n" % tText - - return "

%s

\n" % tText + else: + return "

%s

\n" % tText def _formatKeywords(self, tText): """Apply HTML formatting to keywords. @@ -224,11 +226,23 @@ class ToHtml(Tokenizer): refTags = [] if theBits[0] in nwLabels.KEY_NAME: retText += "%s: " % nwLabels.KEY_NAME[theBits[0]] - for tTag in theBits[1:]: - refTags.append("%s" % ( - theBits[0][1:], tTag, tTag - )) - retText += ", ".join(refTags) + if self.genMode == self.M_PREVIEW: + for tTag in theBits[1:]: + refTags.append("%s" % ( + theBits[0][1:], tTag, tTag + )) + retText += ", ".join(refTags) + else: + if theBits[0] == nwKeyWords.TAG_KEY: + retText += "%s" % ( + theBits[1], theBits[1] + ) + else: + for tTag in theBits[1:]: + refTags.append("%s" % ( + tTag, tTag + )) + retText += ", ".join(refTags) return "
%s
" % retText diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index f9d64d45..20d89623 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -58,7 +58,6 @@ class Tokenizer(): T_TEXT = 9 # Text line T_SEP = 10 # Scene separator T_SKIP = 11 # Paragraph break - T_PBREAK = 12 # Page break A_LEFT = 1 # Left aligned A_RIGHT = 2 # Right aligned @@ -108,6 +107,18 @@ class Tokenizer(): self.numAbsScene = 0 # Counter for scene number within novel self.firstScene = False # Flag to indicate that the first scene of the chapter + # This File + self.isNone = False + self.isTitle = False + self.isBook = False + self.isPage = False + self.isPart = False + self.isUnNum = False + self.isChap = False + self.isScene = False + self.isNote = False + self.isNovel = False + return def clearData(self): @@ -121,6 +132,18 @@ class Tokenizer(): self.theResult = None self.numChapter = 0 self.firstScene = False + + self.isNone = False + self.isTitle = False + self.isBook = False + self.isPage = False + self.isPart = False + self.isUnNum = False + self.isChap = False + self.isScene = False + self.isNote = False + self.isNovel = False + return ## @@ -189,6 +212,17 @@ class Tokenizer(): theDocument = NWDoc(self.theProject, self.theParent) self.theText = theDocument.openDocument(theHandle) + self.isNone = self.theItem.itemLayout == nwItemLayout.NO_LAYOUT + self.isTitle = self.theItem.itemLayout == nwItemLayout.TITLE + self.isBook = self.theItem.itemLayout == nwItemLayout.BOOK + self.isPage = self.theItem.itemLayout == nwItemLayout.PAGE + self.isPart = self.theItem.itemLayout == nwItemLayout.PARTITION + self.isUnNum = self.theItem.itemLayout == nwItemLayout.UNNUMBERED + self.isChap = self.theItem.itemLayout == nwItemLayout.CHAPTER + self.isScene = self.theItem.itemLayout == nwItemLayout.SCENE + self.isNote = self.theItem.itemLayout == nwItemLayout.NOTE + self.isNovel = self.isBook or self.isUnNum or self.isChap or self.isScene + return def getResult(self): @@ -251,61 +285,37 @@ class Tokenizer(): # Tag lines starting with specific characters if len(aLine.strip()) == 0: self.theTokens.append(( - self.T_EMPTY, - "", - None, - None + self.T_EMPTY, "", None, None )) elif aLine[0] == "%": cLine = aLine[1:].strip() if cLine.lower().startswith("synopsis:"): self.theTokens.append(( - self.T_SYNOPSIS, - cLine[9:].strip(), - None, - defAlign + self.T_SYNOPSIS, cLine[9:].strip(), None, defAlign )) else: self.theTokens.append(( - self.T_COMMENT, - aLine[1:].strip(), - None, - defAlign + self.T_COMMENT, aLine[1:].strip(), None, defAlign )) elif aLine[0] == "@": self.theTokens.append(( - self.T_KEYWORD, - aLine[1:].strip(), - None, - self.A_LEFT + self.T_KEYWORD, aLine[1:].strip(), None, self.A_LEFT )) elif aLine[:2] == "# ": self.theTokens.append(( - self.T_HEAD1, - aLine[2:].strip(), - None, - self.A_LEFT | self.A_PBB + self.T_HEAD1, aLine[2:].strip(), None, self.A_LEFT | self.A_PBB )) elif aLine[:3] == "## ": self.theTokens.append(( - self.T_HEAD2, - aLine[3:].strip(), - None, - self.A_LEFT | self.A_PBA_AV + self.T_HEAD2, aLine[3:].strip(), None, self.A_LEFT | self.A_PBA_AV )) elif aLine[:4] == "### ": self.theTokens.append(( - self.T_HEAD3, - aLine[4:].strip(), - None, - self.A_LEFT | self.A_PBA_AV + self.T_HEAD3, aLine[4:].strip(), None, self.A_LEFT | self.A_PBA_AV )) elif aLine[:5] == "#### ": self.theTokens.append(( - self.T_HEAD4, - aLine[5:].strip(), - None, - self.A_LEFT | self.A_PBA_AV + self.T_HEAD4, aLine[5:].strip(), None, self.A_LEFT | self.A_PBA_AV )) else: if not self.doBodyText: @@ -328,18 +338,12 @@ class Tokenizer(): # sorted by position fmtPos = sorted(fmtPos, key=itemgetter(0)) self.theTokens.append(( - self.T_TEXT, - aLine, - fmtPos, - defAlign + self.T_TEXT, aLine, fmtPos, defAlign )) # Always add an empty line at the end self.theTokens.append(( - self.T_EMPTY, - "", - None, - None + self.T_EMPTY, "", None, None )) return @@ -349,23 +353,13 @@ class Tokenizer(): layout and user settings. """ - isNone = self.theItem.itemLayout == nwItemLayout.NO_LAYOUT - isTitle = self.theItem.itemLayout == nwItemLayout.TITLE - isBook = self.theItem.itemLayout == nwItemLayout.BOOK - isPage = self.theItem.itemLayout == nwItemLayout.PAGE - isPart = self.theItem.itemLayout == nwItemLayout.PARTITION - isUnNum = self.theItem.itemLayout == nwItemLayout.UNNUMBERED - isChap = self.theItem.itemLayout == nwItemLayout.CHAPTER - isScene = self.theItem.itemLayout == nwItemLayout.SCENE - isNote = self.theItem.itemLayout == nwItemLayout.NOTE - # No special header formatting for notes and no-layout files - if isNone or isNote: + if self.isNone or self.isNote: return # For novel files, we need to handle chapter numbering and scene # breaks - if isBook or isUnNum or isChap or isScene: + if self.isNovel: for n in range(len(self.theTokens)): tToken = self.theTokens[n] @@ -382,10 +376,7 @@ class Tokenizer(): tText = self._formatHeading(self.fmtTitle, tText) self.theTokens[n] = ( - tType, - tText, - None, - self.A_LEFT | self.A_PBB_R + tType, tText, None, self.A_LEFT | self.A_PBB_R ) elif tType == self.T_HEAD2: @@ -393,7 +384,7 @@ class Tokenizer(): # ============= # Numbered or Unnumbered - if isUnNum: + if self.isUnNum: tText = self._formatHeading(self.fmtUnNum, tText) else: self.numChapter += 1 @@ -401,10 +392,7 @@ class Tokenizer(): # Format the chapter header self.theTokens[n] = ( - tType, - tText, - None, - self.A_LEFT | self.A_PBB_R + tType, tText, None, self.A_LEFT | self.A_PBB_R ) # Set scene variables @@ -421,47 +409,29 @@ class Tokenizer(): tTemp = self._formatHeading(self.fmtScene, tText) if tTemp == "" and self.hideScene: self.theTokens[n] = ( - self.T_EMPTY, - "", - None, - None + self.T_EMPTY, "", None, None ) elif tTemp == "" and not self.hideScene: if self.firstScene: self.theTokens[n] = ( - self.T_EMPTY, - "", - None, - None + self.T_EMPTY, "", None, None ) else: self.theTokens[n] = ( - self.T_SKIP, - "", - None, - None + self.T_SKIP, "", None, None ) elif tTemp == self.fmtScene: if self.firstScene: self.theTokens[n] = ( - self.T_EMPTY, - "", - None, - None + self.T_EMPTY, "", None, None ) else: self.theTokens[n] = ( - self.T_SEP, - tTemp, - None, - self.A_CENTRE + self.T_SEP, tTemp, None, self.A_CENTRE ) else: self.theTokens[n] = ( - tType, - tTemp, - None, - self.A_LEFT | self.A_PBA_AV + tType, tTemp, None, self.A_LEFT | self.A_PBA_AV ) # Definitely no longer the first scene @@ -474,62 +444,41 @@ class Tokenizer(): tTemp = self._formatHeading(self.fmtSection, tText) if tTemp == "" and self.hideSection: self.theTokens[n] = ( - self.T_EMPTY, - "", - None, - None + self.T_EMPTY, "", None, None ) elif tTemp == "" and not self.hideSection: self.theTokens[n] = ( - self.T_SKIP, - "", - None, - None + self.T_SKIP, "", None, None ) elif tTemp == self.fmtSection: self.theTokens[n] = ( - self.T_SEP, - tTemp, - None, - self.A_CENTRE + self.T_SEP, tTemp, None, self.A_CENTRE ) else: self.theTokens[n] = ( - tType, - tTemp, - None, - self.A_LEFT | self.A_PBA_AV + tType, tTemp, None, self.A_LEFT | self.A_PBA_AV ) # For title page and partitions, we need to centre all text. # For partition, we also add a page break before, and for # both types we always add a page break after the content. - if isTitle or isPart: - for n in range(len(self.theTokens)): - tToken = self.theTokens[n] + if self.isTitle or self.isPart: + for n, tToken in enumerate(self.theTokens): tType = tToken[0] tText = tToken[1] tFormat = tToken[2] - if isTitle: + if self.isTitle: self.theTokens[n] = ( - tType, - tText, - tFormat, - self.A_CENTRE + tType, tText, tFormat, self.A_CENTRE ) - else: - self.theTokens[n] = ( - tType, - tText, - tFormat, - self.A_CENTRE | self.A_PBB_R - ) - self.theTokens.append(( - self.T_PBREAK, - "", - None, - None - )) + + # Add a page break after the last entry + n = len(self.theTokens) - 1 + if n >= 0: + tToken = self.theTokens[n] + self.theTokens[n] = ( + tToken[0], tToken[1], tToken[2], tToken[3] | self.A_PBA + ) return diff --git a/nw/gui/build.py b/nw/gui/build.py index bac21b87..43457d2c 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -31,6 +31,7 @@ import nw from os import path from PyQt5.QtCore import Qt, QByteArray +from PyQt5.QtPrintSupport import QPrinter, QPrintPreviewDialog from PyQt5.QtGui import ( QTextOption, QPalette, QColor, QTextDocumentWriter ) @@ -230,9 +231,9 @@ class GuiBuildNovel(QDialog): self.saveODT.triggered.connect(lambda: self._saveDocument(self.FMT_ODT)) self.saveMenu.addAction(self.saveODT) - # self.savePDF = QAction("Portable Document Format (.pdf)") - # self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF)) - # self.saveMenu.addAction(self.savePDF) + self.savePDF = QAction("Portable Document Format (.pdf)") + self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF)) + self.saveMenu.addAction(self.savePDF) self.saveHTM1 = QAction("Qt Style HTML (.htm)") self.saveHTM1.triggered.connect(lambda: self._saveDocument(self.FMT_HTM1)) @@ -406,10 +407,15 @@ class GuiBuildNovel(QDialog): # Create the settings if theFormat == self.FMT_ODT: byteFmt.append("odf") - fileExt = "odf" + fileExt = "odt" textFmt = "Open Document" outTool = "Qt" + elif theFormat == self.FMT_PDF: + fileExt = "pdf" + textFmt = "PDF" + outTool = "QtPrint" + elif theFormat == self.FMT_HTM1: byteFmt.append("html") fileExt = "htm" @@ -479,32 +485,56 @@ class GuiBuildNovel(QDialog): ), nwAlert.ERROR ) - elif outTool == "NW": - if theFormat == self.FMT_HTM2: - try: - with open(savePath, mode="w", encoding="utf8") as outFile: - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write(self.htmlText) - outFile.write("\n") - outFile.write("\n") + elif outTool == "NW" and theFormat == self.FMT_HTM2: + try: + with open(savePath, mode="w", encoding="utf8") as outFile: + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("
\n") + outFile.write(self.htmlText) + outFile.write("
\n") + outFile.write("\n") + outFile.write("\n") - self.theParent.makeAlert( - "Document successfully written in %s format to file: %s" % ( - textFmt, savePath - ), nwAlert.INFO - ) + self.theParent.makeAlert( + "Document successfully written in %s format to file: %s" % ( + textFmt, savePath + ), nwAlert.INFO + ) - except Exception as e: - self.theParent.makeAlert( - "Failed to write document in %s format to file: %s" % ( - textFmt, str(e) - ), nwAlert.ERROR - ) + except Exception as e: + self.theParent.makeAlert( + "Failed to write document in %s format to file: %s" % ( + textFmt, str(e) + ), nwAlert.ERROR + ) + + elif outTool == "QtPrint" and theFormat == self.FMT_PDF: + try: + thePrinter = QPrinter() + thePrinter.setOutputFormat(QPrinter.PdfFormat) + thePrinter.setOrientation(QPrinter.Portrait) + thePrinter.setDuplex(QPrinter.DuplexLongSide) + thePrinter.setFontEmbeddingEnabled(True) + thePrinter.setColorMode(QPrinter.Color) + thePrinter.setOutputFileName(savePath) + self.docView.qDocument.print(thePrinter) + self.theParent.makeAlert( + "Document successfully written in %s format to file: %s" % ( + textFmt, savePath + ), nwAlert.INFO + ) + + except Exception as e: + self.theParent.makeAlert( + "Failed to write document in %s format to file: %s" % ( + textFmt, str(e) + ), nwAlert.ERROR + ) else: return False @@ -512,6 +542,19 @@ class GuiBuildNovel(QDialog): return True def _printDocument(self): + """Open the print preview dialog. + """ + thePreview = QPrintPreviewDialog(self) + thePreview.paintRequested.connect(self._doPrintPreview) + thePreview.exec_() + return + + def _doPrintPreview(self, thePrinter): + """Connect the print preview painter to the document viewer. + """ + thePrinter.setOrientation(QPrinter.Portrait) + thePrinter.setOutputFormat(QPrinter.NativeFormat | QPrinter.PdfFormat) + self.docView.qDocument.print(thePrinter) return def _toggelOutlineMode(self, theState): diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index ddc60daa..56ec0337 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -352,7 +352,7 @@ class GuiMainMenu(QMenuBar): self.docuMenu.addAction(self.aCloseView) # Document > Toggle View Comments - self.aViewDocComments = QAction("View Comments", self) + self.aViewDocComments = QAction("Show Comments", self) self.aViewDocComments.setStatusTip("Show comments in view panel") self.aViewDocComments.setCheckable(True) self.aViewDocComments.setChecked(self.mainConf.viewComments) From 2a67b69d3256a3fd01ad62095d1a865cde8fcea0 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 May 2020 18:10:45 +0200 Subject: [PATCH 22/53] Replaced 'Outline Mode' with an 'Exclude body text' option instead. --- nw/gui/build.py | 55 +++++++------------------------------------------ 1 file changed, 7 insertions(+), 48 deletions(-) diff --git a/nw/gui/build.py b/nw/gui/build.py index 43457d2c..d007ae70 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -130,21 +130,6 @@ class GuiBuildNovel(QDialog): self.titleForm.setColumnStretch(0, 1) self.titleForm.setColumnStretch(1, 0) - # Build Settings - # ============== - self.buildGroup = QGroupBox("Build Overrides", self) - self.buildForm = QGridLayout(self) - self.buildGroup.setLayout(self.buildForm) - - self.outlineMode = QSwitch() - self.outlineMode.setChecked(self.optState.getBool("GuiBuildNovel", "outlineMode", False)) - - self.buildForm.addWidget(QLabel("Novel Outline Mode"), 0, 0) - self.buildForm.addWidget(self.outlineMode, 0, 1) - - self.buildForm.setColumnStretch(0, 1) - self.buildForm.setColumnStretch(1, 0) - # Text Options # ============= self.textGroup = QGroupBox("Text Options", self) @@ -195,6 +180,8 @@ class GuiBuildNovel(QDialog): self.noteFiles.setChecked(self.optState.getBool("GuiBuildNovel", "addNotes", False)) self.ignoreFlag = QSwitch() self.ignoreFlag.setChecked(self.optState.getBool("GuiBuildNovel", "ignoreFlag", False)) + self.excludeBody = QSwitch() + self.excludeBody.setChecked(self.optState.getBool("GuiBuildNovel", "excludeBody", False)) self.addsForm.addWidget(QLabel("Include novel files"), 0, 0) self.addsForm.addWidget(self.novelFiles, 0, 1) @@ -202,6 +189,8 @@ class GuiBuildNovel(QDialog): self.addsForm.addWidget(self.noteFiles, 1, 1) self.addsForm.addWidget(QLabel("Ignore export flag"), 2, 0) self.addsForm.addWidget(self.ignoreFlag, 2, 1) + self.addsForm.addWidget(QLabel("Exclude body text"), 3, 0) + self.addsForm.addWidget(self.excludeBody, 3, 1) self.addsForm.setColumnStretch(0, 1) self.addsForm.setColumnStretch(1, 0) @@ -263,7 +252,6 @@ class GuiBuildNovel(QDialog): # Assemble GUI # ============ self.toolsBox.addWidget(self.titleGroup) - self.toolsBox.addWidget(self.buildGroup) self.toolsBox.addWidget(self.textGroup) self.toolsBox.addWidget(self.includeGroup) self.toolsBox.addWidget(self.addsGroup) @@ -282,9 +270,6 @@ class GuiBuildNovel(QDialog): self.innerBox.setStretch(0, 0) self.innerBox.setStretch(1, 1) - self.outlineMode.toggled.connect(self._toggelOutlineMode) - self._toggelOutlineMode(self.outlineMode.isChecked()) - self.show() logger.debug("GuiBuildNovel initialisation complete") @@ -306,25 +291,13 @@ class GuiBuildNovel(QDialog): fmtScene = self.fmtScene.text().strip() fmtSection = self.fmtSection.text().strip() justifyText = self.justifyText.isChecked() - outlineMode = self.outlineMode.isChecked() incSynopsis = self.includeSynopsis.isChecked() incComments = self.includeComments.isChecked() incKeywords = self.includeKeywords.isChecked() novelFiles = self.novelFiles.isChecked() noteFiles = self.noteFiles.isChecked() ignoreFlag = self.ignoreFlag.isChecked() - doBodyText = True - - if outlineMode: - fmtTitle = r"%title%" - fmtChapter = r"Chapter %chnum%: %title%" - fmtUnnumbered = r"%title%" - fmtScene = r"Scene %chnum%.%scnum%: %title%" - fmtSection = r"Section: %title%" - doBodyText = False - incSynopsis = True - novelFiles = True - noteFiles = False + excludeBody = self.excludeBody.isChecked() makeHtml = ToHtml(self.theProject, self.theParent) makeHtml.setTitleFormat(fmtTitle) @@ -332,7 +305,7 @@ class GuiBuildNovel(QDialog): makeHtml.setUnNumberedFormat(fmtUnnumbered) makeHtml.setSceneFormat(fmtScene, fmtScene == "") makeHtml.setSectionFormat(fmtSection, fmtSection == "") - makeHtml.setBodyText(doBodyText) + makeHtml.setBodyText(not excludeBody) makeHtml.setSynopsis(incSynopsis) makeHtml.setComments(incComments) makeHtml.setKeywords(incKeywords) @@ -557,20 +530,6 @@ class GuiBuildNovel(QDialog): self.docView.qDocument.print(thePrinter) return - def _toggelOutlineMode(self, theState): - """Enables or disables the options that are overridden in# - outline mode. - """ - self.fmtTitle.setEnabled(not theState) - self.fmtChapter.setEnabled(not theState) - self.fmtUnnumbered.setEnabled(not theState) - self.fmtScene.setEnabled(not theState) - self.fmtSection.setEnabled(not theState) - self.includeSynopsis.setEnabled(not theState) - self.novelFiles.setEnabled(not theState) - self.noteFiles.setEnabled(not theState) - return - def _doClose(self): """Close button was clicked. """ @@ -613,10 +572,10 @@ class GuiBuildNovel(QDialog): self.optState.setValue("GuiBuildNovel", "winWidth", self.width()) self.optState.setValue("GuiBuildNovel", "winHeight", self.height()) self.optState.setValue("GuiBuildNovel", "justifyText", self.justifyText.isChecked()) - self.optState.setValue("GuiBuildNovel", "outlineMode", self.outlineMode.isChecked()) self.optState.setValue("GuiBuildNovel", "addNovel", self.novelFiles.isChecked()) self.optState.setValue("GuiBuildNovel", "addNotes", self.noteFiles.isChecked()) self.optState.setValue("GuiBuildNovel", "ignoreFlag", self.ignoreFlag.isChecked()) + self.optState.setValue("GuiBuildNovel", "excludeBody", self.excludeBody.isChecked()) self.optState.saveSettings() return From aa4778d4cd39985237a1c3bc4f4b8897b04f9343 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 May 2020 18:41:08 +0200 Subject: [PATCH 23/53] Preserve markdown during build, and use lists instead of strings --- nw/core/tohtml.py | 25 ++++++++++++++---------- nw/core/tokenizer.py | 46 +++++++++++++++++++++++++++++++++++++------- nw/gui/build.py | 17 ++++++++++++++-- 3 files changed, 69 insertions(+), 19 deletions(-) diff --git a/nw/core/tohtml.py b/nw/core/tohtml.py index 20c32e58..7980d80b 100644 --- a/nw/core/tohtml.py +++ b/nw/core/tohtml.py @@ -105,8 +105,10 @@ class ToHtml(Tokenizer): } self.theResult = "" + thisPar = [] parStyle = "" + tmpResult = [] for tType, tText, tFormat, tStyle in self.theTokens: # Styles @@ -146,31 +148,31 @@ class ToHtml(Tokenizer): if tType == self.T_EMPTY: if len(thisPar) > 0: tTemp = "".join(thisPar) - self.theResult += "%s

\n" % (parStyle,tTemp.rstrip()) + tmpResult.append("%s

\n" % (parStyle, tTemp.rstrip())) thisPar = [] parStyle = "" elif tType == self.T_HEAD1: tHead = tText.replace(r"\\", "
") - self.theResult += "%s\n" % (hStyle, tHead) + tmpResult.append("%s\n" % (hStyle, tHead)) elif tType == self.T_HEAD2: tHead = tText.replace(r"\\", "
") - self.theResult += "%s\n" % (hStyle, tHead) + tmpResult.append("%s\n" % (hStyle, tHead)) elif tType == self.T_HEAD3: tHead = tText.replace(r"\\", "
") - self.theResult += "%s\n" % (hStyle, tHead) + tmpResult.append("%s\n" % (hStyle, tHead)) elif tType == self.T_HEAD4: tHead = tText.replace(r"\\", "
") - self.theResult += "%s\n" % (hStyle, tHead) + tmpResult.append("%s\n" % (hStyle, tHead)) elif tType == self.T_SEP: - self.theResult += "%s

\n" % (hStyle, tText) + tmpResult.append("%s

\n" % (hStyle, tText)) elif tType == self.T_SKIP: - self.theResult += " 

\n" % hStyle + tmpResult.append(" 

\n" % hStyle) elif tType == self.T_TEXT: tTemp = tText @@ -183,13 +185,16 @@ class ToHtml(Tokenizer): thisPar.append(tTemp.rstrip()+" ") elif tType == self.T_SYNOPSIS and self.doSynopsis: - self.theResult += self._formatSynopsis(tText) + tmpResult.append(self._formatSynopsis(tText)) elif tType == self.T_COMMENT and self.doComments: - self.theResult += self._formatComments(tText) + tmpResult.append(self._formatComments(tText)) elif tType == self.T_KEYWORD and self.doKeywords: - self.theResult += self._formatKeywords(tText) + tmpResult.append(self._formatKeywords(tText)) + + self.theResult = "".join(tmpResult) + tmpResult = [] return diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index 20d89623..025a9cfb 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -84,6 +84,7 @@ class Tokenizer(): self.theItem = None # The NWItem associated with the handle self.theTokens = None # The list of the processed tokens self.theResult = None # The result text after conversion + self.theMarkdown = None # The result text in novelWriter markdown # User Settings self.doBodyText = True # Include body text @@ -125,13 +126,14 @@ class Tokenizer(): """Clear the data arrays and variables, but not settings, so the class can be reused for multiple documents. """ - self.theText = None - self.theHandle = None - self.theItem = None - self.theTokens = None - self.theResult = None - self.numChapter = 0 - self.firstScene = False + self.theText = None + self.theHandle = None + self.theItem = None + self.theTokens = None + self.theResult = None + self.theMarkdown = None + self.numChapter = 0 + self.firstScene = False self.isNone = False self.isTitle = False @@ -230,6 +232,11 @@ class Tokenizer(): """ return self.theResult + def getFilteredMarkdown(self): + """Return the novelWriter markdown after the filters have been applied. + """ + return self.theMarkdown + def doAutoReplace(self): """Run through the user's auto-replace dictionary. """ @@ -280,6 +287,8 @@ class Tokenizer(): defAlign = self.A_LEFT self.theTokens = [] + self.theMarkdown = "" + tmpMarkdown = [] for aLine in self.theText.splitlines(): # Tag lines starting with specific characters @@ -287,36 +296,54 @@ class Tokenizer(): self.theTokens.append(( self.T_EMPTY, "", None, None )) + tmpMarkdown.append("\n") + elif aLine[0] == "%": cLine = aLine[1:].strip() if cLine.lower().startswith("synopsis:"): self.theTokens.append(( self.T_SYNOPSIS, cLine[9:].strip(), None, defAlign )) + if self.doSynopsis: + tmpMarkdown.append("%s\n" % aLine) else: self.theTokens.append(( self.T_COMMENT, aLine[1:].strip(), None, defAlign )) + if self.doComments: + tmpMarkdown.append("%s\n" % aLine) + elif aLine[0] == "@": self.theTokens.append(( self.T_KEYWORD, aLine[1:].strip(), None, self.A_LEFT )) + if self.doKeywords: + tmpMarkdown.append("%s\n" % aLine) + elif aLine[:2] == "# ": self.theTokens.append(( self.T_HEAD1, aLine[2:].strip(), None, self.A_LEFT | self.A_PBB )) + tmpMarkdown.append("%s\n" % aLine) + elif aLine[:3] == "## ": self.theTokens.append(( self.T_HEAD2, aLine[3:].strip(), None, self.A_LEFT | self.A_PBA_AV )) + tmpMarkdown.append("%s\n" % aLine) + elif aLine[:4] == "### ": self.theTokens.append(( self.T_HEAD3, aLine[4:].strip(), None, self.A_LEFT | self.A_PBA_AV )) + tmpMarkdown.append("%s\n" % aLine) + elif aLine[:5] == "#### ": self.theTokens.append(( self.T_HEAD4, aLine[5:].strip(), None, self.A_LEFT | self.A_PBA_AV )) + tmpMarkdown.append("%s\n" % aLine) + else: if not self.doBodyText: # Skip all body text @@ -340,11 +367,16 @@ class Tokenizer(): self.theTokens.append(( self.T_TEXT, aLine, fmtPos, defAlign )) + tmpMarkdown.append("%s\n" % aLine) # Always add an empty line at the end self.theTokens.append(( self.T_EMPTY, "", None, None )) + tmpMarkdown.append("\n") + + self.theMarkdown = "".join(tmpMarkdown) + tmpMarkdown = [] return diff --git a/nw/gui/build.py b/nw/gui/build.py index d007ae70..d95be6de 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -29,6 +29,7 @@ import logging import nw from os import path +from time import time from PyQt5.QtCore import Qt, QByteArray from PyQt5.QtPrintSupport import QPrinter, QPrintPreviewDialog @@ -69,6 +70,7 @@ class GuiBuildNovel(QDialog): self.optState = self.theProject.optState self.htmlText = "" + self.nwdText = "" self.setWindowTitle("Build Novel Project") self.setMinimumWidth(800) @@ -311,9 +313,13 @@ class GuiBuildNovel(QDialog): makeHtml.setKeywords(incKeywords) makeHtml.setJustify(justifyText) - self.htmlText = "" self.buildProgress.setMaximum(len(self.theProject.projTree)) self.buildProgress.setValue(0) + + tStart = time() + + tmpHtml = [] + tmpNwd = [] for nItt, tItem in enumerate(self.theProject.projTree): if self._checkInclude(tItem, noteFiles, novelFiles, ignoreFlag): makeHtml.setText(tItem.itemHandle) @@ -322,9 +328,16 @@ class GuiBuildNovel(QDialog): makeHtml.doHeaders() makeHtml.doConvert() makeHtml.doPostProcessing() - self.htmlText += makeHtml.getResult() + tmpHtml.append(makeHtml.getResult()) + tmpNwd.append(makeHtml.getFilteredMarkdown()) self.buildProgress.setValue(nItt+1) + self.htmlText = "".join(tmpHtml) + self.nwdText = "".join(tmpNwd) + + tEnd = time() + logger.debug("Built project in %.3f ms" % (1000*(tEnd-tStart))) + self.docView.setHtml(self.htmlText) return From aa342a7f19d878e49ffd9841fc009c8d5922d101 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 May 2020 19:44:30 +0200 Subject: [PATCH 24/53] Dropped Qt html export, and added nw markdown export --- nw/core/tohtml.py | 44 ++++++++++++-------- nw/core/tokenizer.py | 2 + nw/gui/build.py | 95 ++++++++++++++++++++++++-------------------- 3 files changed, 83 insertions(+), 58 deletions(-) diff --git a/nw/core/tohtml.py b/nw/core/tohtml.py index 7980d80b..f10ee1e3 100644 --- a/nw/core/tohtml.py +++ b/nw/core/tohtml.py @@ -43,6 +43,18 @@ class ToHtml(Tokenizer): def __init__(self, theProject, theParent): Tokenizer.__init__(self, theProject, theParent) self.genMode = self.M_EXPORT + + self.repDict = { + "<" : "<", + ">" : ">", + "&" : "&", + "\t" : " ", + nwUnicode.U_ENDASH : nwUnicode.H_ENDASH, + nwUnicode.U_EMDASH : nwUnicode.H_EMDASH, + nwUnicode.U_HELLIP : nwUnicode.H_HELLIP, + nwUnicode.U_NBSP : nwUnicode.H_NBSP, + } + return ## @@ -58,6 +70,7 @@ class ToHtml(Tokenizer): self.genMode = self.M_PREVIEW self.doKeywords = True self.doComments = doComments + self.repDict["\t"] = " "*8 return ## @@ -70,23 +83,22 @@ class ToHtml(Tokenizer): """ Tokenizer.doAutoReplace(self) - if self.genMode == self.M_PREVIEW: - tabFmt = " "*8 - else: - tabFmt = " " + xRep = re.compile("|".join([re.escape(k) for k in self.repDict.keys()]), flags=re.DOTALL) + self.theText = xRep.sub(lambda x: self.repDict[x.group(0)], self.theText) - repDict = { - "<" : "<", - ">" : ">", - "&" : "&", - "\t" : tabFmt, - nwUnicode.U_ENDASH : nwUnicode.H_ENDASH, - nwUnicode.U_EMDASH : nwUnicode.H_EMDASH, - nwUnicode.U_HELLIP : nwUnicode.H_HELLIP, - nwUnicode.U_NBSP : nwUnicode.H_NBSP, - } - xRep = re.compile("|".join([re.escape(k) for k in repDict.keys()]), flags=re.DOTALL) - self.theText = xRep.sub(lambda x: repDict[x.group(0)], self.theText) + return + + def doPostProcessing(self): + """Reverse the html entities replacement on the markdown text. + Otherwise, all the &something; bits will also be in there. + """ + if self.genMode == self.M_PREVIEW: + # Doesn't matter for preview as we don't use the markdown + return + + revDict = dict(map(reversed, self.repDict.items())) + xRep = re.compile("|".join([re.escape(k) for k in revDict.keys()]), flags=re.DOTALL) + self.theMarkdown = xRep.sub(lambda x: revDict[x.group(0)], self.theMarkdown) return diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index 025a9cfb..80cc216d 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -251,6 +251,8 @@ class Tokenizer(): return def doPostProcessing(self): + """Do some postprocessing. Overloaded by subclasses. + """ return def tokenizeText(self): diff --git a/nw/gui/build.py b/nw/gui/build.py index d95be6de..737a13c4 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -51,12 +51,12 @@ logger = logging.getLogger(__name__) class GuiBuildNovel(QDialog): - FMT_ODT = 1 - FMT_PDF = 2 - FMT_HTM1 = 3 - FMT_HTM2 = 4 - FMT_MD = 4 - FMT_TXT = 5 + FMT_ODT = 1 + FMT_PDF = 2 + FMT_HTM = 3 + FMT_MD = 4 + FMT_NWD = 5 + FMT_TXT = 6 def __init__(self, theParent, theProject): QDialog.__init__(self, theParent) @@ -69,8 +69,9 @@ class GuiBuildNovel(QDialog): self.theTheme = theParent.theTheme self.optState = self.theProject.optState - self.htmlText = "" - self.nwdText = "" + self.htmlText = [] # List of html document + self.nwdText = [] # List of markdown documents + self.textLayout = [] # List of nwItemLayout entries self.setWindowTitle("Build Novel Project") self.setMinimumWidth(800) @@ -226,19 +227,19 @@ class GuiBuildNovel(QDialog): self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF)) self.saveMenu.addAction(self.savePDF) - self.saveHTM1 = QAction("Qt Style HTML (.htm)") - self.saveHTM1.triggered.connect(lambda: self._saveDocument(self.FMT_HTM1)) - self.saveMenu.addAction(self.saveHTM1) - - self.saveHTM2 = QAction("%s HTML (.htm)" % nw.__package__) - self.saveHTM2.triggered.connect(lambda: self._saveDocument(self.FMT_HTM2)) - self.saveMenu.addAction(self.saveHTM2) + self.saveHTM = QAction("%s HTML (.htm)" % nw.__package__) + self.saveHTM.triggered.connect(lambda: self._saveDocument(self.FMT_HTM)) + self.saveMenu.addAction(self.saveHTM) if self.mainConf.verQtValue >= 51400: self.saveMD = QAction("Markdown (.md)") self.saveMD.triggered.connect(lambda: self._saveDocument(self.FMT_MD)) self.saveMenu.addAction(self.saveMD) + self.saveNWD = QAction("novelWriter Markdown (.nwd)") + self.saveNWD.triggered.connect(lambda: self._saveDocument(self.FMT_NWD)) + self.saveMenu.addAction(self.saveNWD) + self.saveTXT = QAction("Plain Text (.txt)") self.saveTXT.triggered.connect(lambda: self._saveDocument(self.FMT_TXT)) self.saveMenu.addAction(self.saveTXT) @@ -318,8 +319,10 @@ class GuiBuildNovel(QDialog): tStart = time() - tmpHtml = [] - tmpNwd = [] + self.htmlText = [] + self.nwdText = [] + self.textLayout = [] + for nItt, tItem in enumerate(self.theProject.projTree): if self._checkInclude(tItem, noteFiles, novelFiles, ignoreFlag): makeHtml.setText(tItem.itemHandle) @@ -328,17 +331,18 @@ class GuiBuildNovel(QDialog): makeHtml.doHeaders() makeHtml.doConvert() makeHtml.doPostProcessing() - tmpHtml.append(makeHtml.getResult()) - tmpNwd.append(makeHtml.getFilteredMarkdown()) - self.buildProgress.setValue(nItt+1) + self.htmlText.append(makeHtml.getResult()) + self.nwdText.append(makeHtml.getFilteredMarkdown()) + self.textLayout.append(tItem.itemLayout) - self.htmlText = "".join(tmpHtml) - self.nwdText = "".join(tmpNwd) + # Update progress bar, also for skipped items + self.buildProgress.setValue(nItt+1) tEnd = time() logger.debug("Built project in %.3f ms" % (1000*(tEnd-tStart))) - self.docView.setHtml(self.htmlText) + # Load the preview document with the html data + self.docView.setHtml("".join(self.htmlText)) return @@ -402,13 +406,7 @@ class GuiBuildNovel(QDialog): textFmt = "PDF" outTool = "QtPrint" - elif theFormat == self.FMT_HTM1: - byteFmt.append("html") - fileExt = "htm" - textFmt = "Qt Style HTML" - outTool = "Qt" - - elif theFormat == self.FMT_HTM2: + elif theFormat == self.FMT_HTM: fileExt = "htm" textFmt = "Plain HTML" outTool = "NW" @@ -419,6 +417,11 @@ class GuiBuildNovel(QDialog): textFmt = "Markdown" outTool = "Qt" + elif theFormat == self.FMT_NWD: + fileExt = "nwd" + textFmt = "%s markdown" % nw.__package__ + outTool = "NW" + elif theFormat == self.FMT_TXT: byteFmt.append("plaintext") fileExt = "txt" @@ -471,20 +474,28 @@ class GuiBuildNovel(QDialog): ), nwAlert.ERROR ) - elif outTool == "NW" and theFormat == self.FMT_HTM2: + elif outTool == "NW": try: with open(savePath, mode="w", encoding="utf8") as outFile: - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write("\n") - outFile.write("
\n") - outFile.write(self.htmlText) - outFile.write("
\n") - outFile.write("\n") - outFile.write("\n") + if theFormat == self.FMT_HTM: + # Write novelWriter HTML data + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("\n") + outFile.write("
\n") + for aLine in self.htmlText: + outFile.write(aLine) + outFile.write("
\n") + outFile.write("\n") + outFile.write("\n") + + elif theFormat == self.FMT_NWD: + # Write novelWriter markdown data + for aLine in self.nwdText: + outFile.write(aLine) self.theParent.makeAlert( "Document successfully written in %s format to file: %s" % ( From bd9b40a1cad0dcac02fe3c035a1bb6570d1c14a7 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 12:56:58 +0200 Subject: [PATCH 25/53] Added PagedDialog base class, and applied it to project settings --- nw/gui/__init__.py | 6 --- nw/gui/additions/__init__.py | 2 + nw/gui/additions/pageddialog.py | 65 +++++++++++++++++++++++++++++++++ nw/gui/dialogs/projecteditor.py | 31 +++++----------- 4 files changed, 77 insertions(+), 27 deletions(-) create mode 100644 nw/gui/additions/pageddialog.py diff --git a/nw/gui/__init__.py b/nw/gui/__init__.py index c209b8d8..74706a6d 100644 --- a/nw/gui/__init__.py +++ b/nw/gui/__init__.py @@ -7,10 +7,6 @@ from nw.gui.mainmenu import GuiMainMenu from nw.gui.statusbar import GuiMainStatus from nw.gui.theme import GuiTheme -# Qt Additions -from nw.gui.additions.qconfiglayout import QConfigLayout -from nw.gui.additions.qswitch import QSwitch - # Dialogs from nw.gui.dialogs.configeditor import GuiConfigEditor from nw.gui.dialogs.docmerge import GuiDocMerge @@ -42,8 +38,6 @@ __all__ = [ "GuiMainMenu", "GuiMainStatus", "GuiTheme", - "QConfigLayout", - "QSwitch", "GuiConfigEditor", "GuiDocMerge", "GuiDocSplit", diff --git a/nw/gui/additions/__init__.py b/nw/gui/additions/__init__.py index 04f5e25a..32af81f6 100644 --- a/nw/gui/additions/__init__.py +++ b/nw/gui/additions/__init__.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- +from nw.gui.additions.pageddialog import PagedDialog from nw.gui.additions.qconfiglayout import QConfigLayout from nw.gui.additions.qswitch import QSwitch __all__ = [ + "PagedDialog", "QConfigLayout", "QSwitch", ] diff --git a/nw/gui/additions/pageddialog.py b/nw/gui/additions/pageddialog.py new file mode 100644 index 00000000..5f06c84e --- /dev/null +++ b/nw/gui/additions/pageddialog.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +"""novelWriter Paged Dialog + + novelWriter – Paged Dialog +============================ + A custom QDialog with a built-in QTabWidget and vertical tabs. + + File History: + Created: 2020-05-17 [0.5.1] + + 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 nw + +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import ( + QDialog, QHBoxLayout, QVBoxLayout, QTabWidget +) + +from nw.constants import nwUnicode + +logger = logging.getLogger(__name__) + +class PagedDialog(QDialog): + + def __init__(self, parent=None): + super().__init__(parent=parent) + + self._outerBox = QVBoxLayout() + self._innerBox = QHBoxLayout() + self._navBox = QVBoxLayout() + self._tabBox = QTabWidget() + + self._outerBox.addLayout(self._innerBox) + self._innerBox.addLayout(self._navBox) + self._innerBox.addWidget(self._tabBox) + self.setLayout(self._outerBox) + + return + + def addPage(self, tabWidget, tabLabel): + self._tabBox.addTab(tabWidget, tabLabel) + return + + def addControls(self, buttonBar): + self._outerBox.addWidget(buttonBar) + return + +# END Class PagedDialog diff --git a/nw/gui/dialogs/projecteditor.py b/nw/gui/dialogs/projecteditor.py index ff6171cd..9c5b4ba4 100644 --- a/nw/gui/dialogs/projecteditor.py +++ b/nw/gui/dialogs/projecteditor.py @@ -38,13 +38,14 @@ from PyQt5.QtWidgets import ( ) from nw.constants import nwAlert +from nw.gui.additions import PagedDialog logger = logging.getLogger(__name__) -class GuiProjectEditor(QDialog): +class GuiProjectEditor(PagedDialog): def __init__(self, theParent, theProject): - QDialog.__init__(self, theParent) + PagedDialog.__init__(self, theParent) logger.debug("Initialising ProjectEditor ...") @@ -52,35 +53,23 @@ class GuiProjectEditor(QDialog): self.theParent = theParent self.theProject = theProject - self.outerBox = QHBoxLayout() - self.innerBox = QVBoxLayout() - - self.setWindowTitle("Project Settings") - self.guiDeco = self.theParent.theTheme.loadDecoration("settings", (64,64)) - self.outerBox.setSpacing(16) - - self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) - self.outerBox.addLayout(self.innerBox) - self.setLayout(self.outerBox) - self.theProject.countStatus() + self.setWindowTitle("Project Settings") + self.tabMain = GuiProjectEditMain(self.theParent, self.theProject) self.tabStatus = GuiProjectEditStatus(self.theParent, self.theProject.statusItems) self.tabImport = GuiProjectEditStatus(self.theParent, self.theProject.importItems) self.tabReplace = GuiProjectEditReplace(self.theParent, self.theProject) - self.tabWidget = QTabWidget() - self.tabWidget.addTab(self.tabMain, "Settings") - self.tabWidget.addTab(self.tabStatus, "Status") - self.tabWidget.addTab(self.tabImport, "Importance") - self.tabWidget.addTab(self.tabReplace,"Auto-Replace") + self.addPage(self.tabMain, "Settings") + self.addPage(self.tabStatus, "Status") + self.addPage(self.tabImport, "Importance") + self.addPage(self.tabReplace,"Auto-Replace") self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.buttonBox.accepted.connect(self._doSave) self.buttonBox.rejected.connect(self._doClose) - - self.innerBox.addWidget(self.tabWidget) - self.innerBox.addWidget(self.buttonBox) + self.addControls(self.buttonBox) self.show() From 80872fecebf34a177843a313e46c1b7f24b816d2 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 16:08:58 +0200 Subject: [PATCH 26/53] Paged dialog with vertical tabs now working --- nw/gui/additions/pageddialog.py | 79 ++++++++++++++++++++++++++++----- nw/gui/dialogs/configeditor.py | 28 ++++-------- nw/gui/dialogs/projecteditor.py | 8 ++-- 3 files changed, 79 insertions(+), 36 deletions(-) diff --git a/nw/gui/additions/pageddialog.py b/nw/gui/additions/pageddialog.py index 5f06c84e..40ba8656 100644 --- a/nw/gui/additions/pageddialog.py +++ b/nw/gui/additions/pageddialog.py @@ -28,9 +28,11 @@ import logging import nw -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QRect, QPoint +from PyQt5.QtGui import QPalette from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QTabWidget + QWidget, QDialog, QHBoxLayout, QVBoxLayout, QTabWidget, QTabBar, + QStylePainter, QStyleOptionTab, QStyle, QLabel ) from nw.constants import nwUnicode @@ -40,26 +42,79 @@ logger = logging.getLogger(__name__) class PagedDialog(QDialog): def __init__(self, parent=None): - super().__init__(parent=parent) + QDialog.__init__(self, parent=parent) - self._outerBox = QVBoxLayout() - self._innerBox = QHBoxLayout() - self._navBox = QVBoxLayout() - self._tabBox = QTabWidget() + self._outerBox = QVBoxLayout() + self._buttonBox = QHBoxLayout() + self._tabBox = QTabWidget() - self._outerBox.addLayout(self._innerBox) - self._innerBox.addLayout(self._navBox) - self._innerBox.addWidget(self._tabBox) + self._tabBar = VerticalTabBar(self) + self._tabBox.setTabBar(self._tabBar) + self._tabBox.setTabPosition(QTabWidget.West) + self._tabBar.setExpanding(False) + + self._outerBox.addWidget(self._tabBox) + self._outerBox.addLayout(self._buttonBox) self.setLayout(self._outerBox) + # Default Margins + qM = self._outerBox.contentsMargins() + mL = qM.left() + mR = qM.right() + mT = qM.top() + mB = qM.bottom() + + self.setContentsMargins(0, 0, 0, 0) + self._outerBox.setContentsMargins(0, 0, 0, mB) + self._buttonBox.setContentsMargins(mL, 0, mR, 0) + self._outerBox.setSpacing(mT) + return - def addPage(self, tabWidget, tabLabel): + def addTab(self, tabWidget, tabLabel): self._tabBox.addTab(tabWidget, tabLabel) return def addControls(self, buttonBar): - self._outerBox.addWidget(buttonBar) + self._buttonBox.addWidget(buttonBar) return # END Class PagedDialog + +class VerticalTabBar(QTabBar): + + def __init__(self, parent=None): + QTabBar.__init__(self, parent=parent) + return + + def tabSizeHint(self, theIndex): + tSize = QTabBar.tabSizeHint(self, theIndex) + tSize.transpose() + return tSize + + def paintEvent(self, theEvent): + + pObj = QStylePainter(self) + oObj = QStyleOptionTab() + + for i in range(self.count()): + self.initStyleOption(oObj, i) + pObj.drawControl(QStyle.CE_TabBarTabShape, oObj) + pObj.save() + + oSize = oObj.rect.size() + oSize.transpose() + oRect = QRect(QPoint(), oSize) + oRect.moveCenter(oObj.rect.center()) + oObj.rect = oRect + + oCenter = self.tabRect(i).center() + pObj.translate(oCenter) + pObj.rotate(90) + pObj.translate(-oCenter) + pObj.drawControl(QStyle.CE_TabBarTabLabel, oObj) + pObj.restore() + + return + +# END Class VerticalTabBar diff --git a/nw/gui/dialogs/configeditor.py b/nw/gui/dialogs/configeditor.py index da3158c0..61726a93 100644 --- a/nw/gui/dialogs/configeditor.py +++ b/nw/gui/dialogs/configeditor.py @@ -38,51 +38,39 @@ from PyQt5.QtWidgets import ( QFileDialog ) -from nw.gui.additions import QSwitch, QConfigLayout +from nw.gui.additions import QSwitch, QConfigLayout, PagedDialog from nw.core import NWSpellCheck, NWSpellSimple, NWSpellEnchant from nw.constants import nwAlert, nwQuotes logger = logging.getLogger(__name__) -class GuiConfigEditor(QDialog): +class GuiConfigEditor(PagedDialog): def __init__(self, theParent, theProject): - QDialog.__init__(self, theParent) + PagedDialog.__init__(self, theParent) logger.debug("Initialising ConfigEditor ...") self.mainConf = nw.CONFIG self.theParent = theParent self.theProject = theProject - self.outerBox = QHBoxLayout() - self.innerBox = QVBoxLayout() self.setWindowTitle("Preferences") - self.guiDeco = self.theParent.theTheme.loadDecoration("settings", (64,64)) - self.outerBox.setSpacing(16) - - self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) - self.outerBox.addLayout(self.innerBox) - self.setLayout(self.outerBox) self.tabGeneral = GuiConfigEditGeneralTab(self.theParent) self.tabLayout = GuiConfigEditLayoutTab(self.theParent) self.tabEditing = GuiConfigEditEditingTab(self.theParent) self.tabAutoRep = GuiConfigEditAutoReplaceTab(self.theParent) - self.tabWidget = QTabWidget() - self.tabWidget.setMinimumWidth(600) - self.tabWidget.addTab(self.tabGeneral, "General") - self.tabWidget.addTab(self.tabLayout, "Layout") - self.tabWidget.addTab(self.tabEditing, "Editing") - self.tabWidget.addTab(self.tabAutoRep, "Auto-Replace") + self.addTab(self.tabGeneral, "General") + self.addTab(self.tabLayout, "Layout") + self.addTab(self.tabEditing, "Editing") + self.addTab(self.tabAutoRep, "Auto-Replace") self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.buttonBox.accepted.connect(self._doSave) self.buttonBox.rejected.connect(self._doClose) - - self.innerBox.addWidget(self.tabWidget) - self.innerBox.addWidget(self.buttonBox) + self.addControls(self.buttonBox) self.show() diff --git a/nw/gui/dialogs/projecteditor.py b/nw/gui/dialogs/projecteditor.py index 9c5b4ba4..4c425770 100644 --- a/nw/gui/dialogs/projecteditor.py +++ b/nw/gui/dialogs/projecteditor.py @@ -61,10 +61,10 @@ class GuiProjectEditor(PagedDialog): self.tabImport = GuiProjectEditStatus(self.theParent, self.theProject.importItems) self.tabReplace = GuiProjectEditReplace(self.theParent, self.theProject) - self.addPage(self.tabMain, "Settings") - self.addPage(self.tabStatus, "Status") - self.addPage(self.tabImport, "Importance") - self.addPage(self.tabReplace,"Auto-Replace") + self.addTab(self.tabMain, "Settings") + self.addTab(self.tabStatus, "Status") + self.addTab(self.tabImport, "Importance") + self.addTab(self.tabReplace,"Auto-Replace") self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.buttonBox.accepted.connect(self._doSave) From c06b63211186ee40dfb489f465a2cda4b350337b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 16:16:43 +0200 Subject: [PATCH 27/53] Import cleanup and fixed test --- nw/gui/additions/pageddialog.py | 5 ++--- tests/test_gui.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/nw/gui/additions/pageddialog.py b/nw/gui/additions/pageddialog.py index 40ba8656..683b62f1 100644 --- a/nw/gui/additions/pageddialog.py +++ b/nw/gui/additions/pageddialog.py @@ -29,10 +29,9 @@ import logging import nw from PyQt5.QtCore import Qt, QRect, QPoint -from PyQt5.QtGui import QPalette from PyQt5.QtWidgets import ( - QWidget, QDialog, QHBoxLayout, QVBoxLayout, QTabWidget, QTabBar, - QStylePainter, QStyleOptionTab, QStyle, QLabel + QDialog, QHBoxLayout, QVBoxLayout, QTabWidget, QTabBar, QStyle, + QStylePainter, QStyleOptionTab ) from nw.constants import nwUnicode diff --git a/tests/test_gui.py b/tests/test_gui.py index c32e8168..0d73f3c3 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -276,7 +276,7 @@ def testProjectEditor(qtbot, nwTempGUI, nwRef, nwTemp): qtbot.keyClick(projEdit.tabMain.editAuthors, c, delay=keyDelay) # Test Status Tab - projEdit.tabWidget.setCurrentWidget(projEdit.tabStatus) + projEdit._tabBox.setCurrentWidget(projEdit.tabStatus) projEdit.tabStatus.listBox.item(2).setSelected(True) qtbot.mouseClick(projEdit.tabStatus.delButton, Qt.LeftButton) qtbot.mouseClick(projEdit.tabStatus.newButton, Qt.LeftButton) @@ -288,7 +288,7 @@ def testProjectEditor(qtbot, nwTempGUI, nwRef, nwTemp): qtbot.mouseClick(projEdit.tabStatus.saveButton, Qt.LeftButton) # Auto-Replace Tab - projEdit.tabWidget.setCurrentWidget(projEdit.tabReplace) + projEdit._tabBox.setCurrentWidget(projEdit.tabReplace) qtbot.mouseClick(projEdit.tabReplace.addButton, Qt.LeftButton) projEdit.tabReplace.listBox.topLevelItem(0).setSelected(True) From 0d34a71f3cab7f2cd6cb569d58001b3faabceec3 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 16:34:51 +0200 Subject: [PATCH 28/53] Some minor cleanup in project settings and preferences --- nw/gui/dialogs/configeditor.py | 3 ++- nw/gui/dialogs/projecteditor.py | 48 +++++++++++++++++---------------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/nw/gui/dialogs/configeditor.py b/nw/gui/dialogs/configeditor.py index 61726a93..cd54ee28 100644 --- a/nw/gui/dialogs/configeditor.py +++ b/nw/gui/dialogs/configeditor.py @@ -761,6 +761,7 @@ class GuiConfigEditAutoReplaceTab(QWidget): def saveValues(self): validEntries = True + needsRestart = False autoSelect = self.autoSelect.isChecked() doReplace = self.autoReplaceMain.isChecked() @@ -815,7 +816,7 @@ class GuiConfigEditAutoReplaceTab(QWidget): self.mainConf.confChanged = True - return validEntries, False + return validEntries, needsRestart ## # Slots diff --git a/nw/gui/dialogs/projecteditor.py b/nw/gui/dialogs/projecteditor.py index 4c425770..1c494ac0 100644 --- a/nw/gui/dialogs/projecteditor.py +++ b/nw/gui/dialogs/projecteditor.py @@ -31,14 +31,14 @@ import nw from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QFormLayout, QLineEdit, QPlainTextEdit, + QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QLineEdit, QPlainTextEdit, QLabel, QWidget, QTabWidget, QDialogButtonBox, QListWidget, QPushButton, QListWidgetItem, QColorDialog, QAbstractItemView, QTreeWidget, QCheckBox, QTreeWidgetItem ) from nw.constants import nwAlert -from nw.gui.additions import PagedDialog +from nw.gui.additions import QSwitch, PagedDialog logger = logging.getLogger(__name__) @@ -83,7 +83,7 @@ class GuiProjectEditor(PagedDialog): projName = self.tabMain.editName.text() bookTitle = self.tabMain.editTitle.text() bookAuthors = self.tabMain.editAuthors.toPlainText() - doBackup = self.tabMain.doBackup.isChecked() + doBackup = not self.tabMain.doBackup.isChecked() self.theProject.setProjectName(projName) self.theProject.setBookTitle(bookTitle) self.theProject.setBookAuthors(bookAuthors) @@ -119,37 +119,39 @@ class GuiProjectEditMain(QWidget): self.theParent = theParent self.theProject = theProject - self.mainForm = QFormLayout() + self.mainForm = QGridLayout() self.backupBox = QHBoxLayout() - self.editName = QLineEdit() - self.editTitle = QLineEdit() - self.editAuthors = QPlainTextEdit() - self.doBackup = QCheckBox(self) + self.editName = QLineEdit() self.editName.setMaxLength(200) - self.editTitle.setMaxLength(200) - - self.mainForm.addRow("Working Title", self.editName) - self.mainForm.addRow("Book Title", self.editTitle) - self.mainForm.addRow("Book Authors", self.editAuthors) - self.mainForm.addRow(self.backupBox) - self.backupBox.addStretch(1) - self.backupBox.addWidget(QLabel("Backup on Close")) - self.backupBox.addWidget(self.doBackup) - self.editName.setText(self.theProject.projName) + + self.editTitle = QLineEdit() + self.editTitle.setMaxLength(200) self.editTitle.setText(self.theProject.bookTitle) + + self.editAuthors = QPlainTextEdit() bookAuthors = "" for bookAuthor in self.theProject.bookAuthors: bookAuthors += bookAuthor+"\n" self.editAuthors.setPlainText(bookAuthors) - if self.theProject.doBackup: - self.doBackup.setCheckState(Qt.Checked) - else: - self.doBackup.setCheckState(Qt.Unchecked) + self.editAuthors.setMaximumHeight(120) + + self.doBackup = QSwitch(self) + self.doBackup.setChecked(not self.theProject.doBackup) + self.backupBox.addStretch(1) + self.backupBox.addWidget(QLabel("Disable backup on close")) + self.backupBox.addWidget(self.doBackup) + + self.mainForm.addWidget(QLabel("Working title"), 0, 0, 1, 1, Qt.AlignTop) + self.mainForm.addWidget(self.editName, 0, 1, 1, 1, Qt.AlignTop) + self.mainForm.addWidget(QLabel("Book title"), 1, 0, 1, 1, Qt.AlignTop) + self.mainForm.addWidget(self.editTitle, 1, 1, 1, 1, Qt.AlignTop) + self.mainForm.addWidget(QLabel("Book authors"), 2, 0, 1, 1, Qt.AlignTop) + self.mainForm.addWidget(self.editAuthors, 2, 1, 1, 1, Qt.AlignTop) + self.mainForm.addLayout(self.backupBox, 3, 0, 1, 2, Qt.AlignTop) self.setLayout(self.mainForm) - self.editAuthors.setMaximumHeight(120) return From 6868795bc33dc9f5a024ae148e0129f326db7821 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 16:37:35 +0200 Subject: [PATCH 29/53] consistency ... --- nw/gui/additions/pageddialog.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/nw/gui/additions/pageddialog.py b/nw/gui/additions/pageddialog.py index 683b62f1..6e5c2e23 100644 --- a/nw/gui/additions/pageddialog.py +++ b/nw/gui/additions/pageddialog.py @@ -34,14 +34,12 @@ from PyQt5.QtWidgets import ( QStylePainter, QStyleOptionTab ) -from nw.constants import nwUnicode - logger = logging.getLogger(__name__) class PagedDialog(QDialog): - def __init__(self, parent=None): - QDialog.__init__(self, parent=parent) + def __init__(self, theParent=None): + QDialog.__init__(self, parent=theParent) self._outerBox = QVBoxLayout() self._buttonBox = QHBoxLayout() @@ -82,8 +80,8 @@ class PagedDialog(QDialog): class VerticalTabBar(QTabBar): - def __init__(self, parent=None): - QTabBar.__init__(self, parent=parent) + def __init__(self, theParent=None): + QTabBar.__init__(self, parent=theParent) return def tabSizeHint(self, theIndex): From 7be78f6e1e7e071378eb5dc05b3a408b09bd118f Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 18:04:48 +0200 Subject: [PATCH 30/53] Cleaned up the split and merge dialogs --- nw/assets/graphics/export.svg | 44 ----------------------------- nw/assets/graphics/merge.svg | 31 --------------------- nw/assets/graphics/split.svg | 31 --------------------- nw/gui/additions/__init__.py | 2 ++ nw/gui/additions/qconfiglayout.py | 32 +++++++++++++++------ nw/gui/dialogs/docmerge.py | 46 +++++++++++++++---------------- nw/gui/dialogs/docsplit.py | 44 ++++++++++++++--------------- nw/gui/icons.py | 3 -- 8 files changed, 69 insertions(+), 164 deletions(-) delete mode 100644 nw/assets/graphics/export.svg delete mode 100644 nw/assets/graphics/merge.svg delete mode 100644 nw/assets/graphics/split.svg diff --git a/nw/assets/graphics/export.svg b/nw/assets/graphics/export.svg deleted file mode 100644 index 9594a980..00000000 --- a/nw/assets/graphics/export.svg +++ /dev/null @@ -1,44 +0,0 @@ - -image/svg+xml \ No newline at end of file diff --git a/nw/assets/graphics/merge.svg b/nw/assets/graphics/merge.svg deleted file mode 100644 index 1b4c6ae9..00000000 --- a/nw/assets/graphics/merge.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/nw/assets/graphics/split.svg b/nw/assets/graphics/split.svg deleted file mode 100644 index c427eea6..00000000 --- a/nw/assets/graphics/split.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/nw/gui/additions/__init__.py b/nw/gui/additions/__init__.py index 32af81f6..dbacd16e 100644 --- a/nw/gui/additions/__init__.py +++ b/nw/gui/additions/__init__.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- from nw.gui.additions.pageddialog import PagedDialog from nw.gui.additions.qconfiglayout import QConfigLayout +from nw.gui.additions.qconfiglayout import QHelpLabel from nw.gui.additions.qswitch import QSwitch __all__ = [ "PagedDialog", "QConfigLayout", + "QHelpLabel", "QSwitch", ] diff --git a/nw/gui/additions/qconfiglayout.py b/nw/gui/additions/qconfiglayout.py index 51face15..032d0e6b 100644 --- a/nw/gui/additions/qconfiglayout.py +++ b/nw/gui/additions/qconfiglayout.py @@ -130,17 +130,9 @@ class QConfigLayout(QGridLayout): qLabel.setIndent(8) if helpText is not None: - qHelp = QLabel(str(helpText)) + qHelp = QHelpLabel(str(helpText), self._helpCol, self._fontScale) qHelp.setIndent(8) - lblCol = qHelp.palette() - lblCol.setColor(QPalette.WindowText, self._helpCol) - qHelp.setPalette(lblCol) - - lblFont = qHelp.font() - lblFont.setPointSizeF(self._fontScale*lblFont.pointSizeF()) - qHelp.setFont(lblFont) - labelBox = QVBoxLayout() labelBox.addWidget(qLabel) labelBox.addWidget(qHelp) @@ -176,3 +168,25 @@ class QConfigLayout(QGridLayout): return self._nextRow - 1 # END Class QConfigLayout + +class QHelpLabel(QLabel): + + def __init__(self, theText, textCol, fontSize=0.9): + QLabel.__init__(self, theText) + + if isinstance(textCol, QColor): + qCol = textCol + else: + qCol = QColor(*textCol) + + lblCol = self.palette() + lblCol.setColor(QPalette.WindowText, qCol) + self.setPalette(lblCol) + + lblFont = self.font() + lblFont.setPointSizeF(fontSize*lblFont.pointSizeF()) + self.setFont(lblFont) + + return + +# END Class QHelpLabel diff --git a/nw/gui/dialogs/docmerge.py b/nw/gui/dialogs/docmerge.py index 1094fb78..47391a72 100644 --- a/nw/gui/dialogs/docmerge.py +++ b/nw/gui/dialogs/docmerge.py @@ -29,11 +29,14 @@ import logging import nw from PyQt5.QtCore import Qt +from PyQt5.QtGui import QColor, QPalette from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QPushButton, - QListWidget, QAbstractItemView, QListWidgetItem + QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QPushButton, QLabel, + QListWidget, QAbstractItemView, QListWidgetItem, QDialogButtonBox ) + from nw.constants import nwAlert, nwItemType +from nw.gui.additions import QHelpLabel from nw.core import NWDoc logger = logging.getLogger(__name__) @@ -50,34 +53,31 @@ class GuiDocMerge(QDialog): self.theProject = theProject self.sourceItem = None - self.outerBox = QHBoxLayout() - self.innerBox = QVBoxLayout() - self.setLayout(self.outerBox) - + self.outerBox = QVBoxLayout() self.setWindowTitle("Merge Documents") - self.guiDeco = self.theParent.theTheme.loadDecoration("merge",(64,64)) - self.outerBox.setSpacing(16) - self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) - self.outerBox.addLayout(self.innerBox) - - self.doMergeForm = QGridLayout() - self.doMergeForm.setContentsMargins(0,0,0,0) + self.headLabel = QLabel("Documents to Merge") + self.helpLabel = QHelpLabel( + "Drag and drop items to change the order.", self.theParent.theTheme.helpText + ) self.listBox = QListWidget() self.listBox.setDragDropMode(QAbstractItemView.InternalMove) + self.listBox.setMinimumWidth(400) + self.listBox.setMinimumHeight(180) - self.mergeButton = QPushButton("Merge") - self.mergeButton.clicked.connect(self._doMerge) + self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + self.buttonBox.accepted.connect(self._doMerge) + self.buttonBox.rejected.connect(self._doClose) - self.closeButton = QPushButton("Close") - self.closeButton.clicked.connect(self._doClose) - - self.doMergeForm.addWidget(self.listBox, 0, 0, 1, 3) - self.doMergeForm.addWidget(self.mergeButton, 1, 1) - self.doMergeForm.addWidget(self.closeButton, 1, 2) - - self.innerBox.addLayout(self.doMergeForm) + self.outerBox.setSpacing(0) + self.outerBox.addWidget(self.headLabel) + self.outerBox.addWidget(self.helpLabel) + self.outerBox.addSpacing(8) + self.outerBox.addWidget(self.listBox) + self.outerBox.addSpacing(12) + self.outerBox.addWidget(self.buttonBox) + self.setLayout(self.outerBox) self.rejected.connect(self._doClose) self.show() diff --git a/nw/gui/dialogs/docsplit.py b/nw/gui/dialogs/docsplit.py index dc795c77..7e2e80cd 100644 --- a/nw/gui/dialogs/docsplit.py +++ b/nw/gui/dialogs/docsplit.py @@ -31,9 +31,10 @@ import nw from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QPushButton, QComboBox, - QListWidget, QAbstractItemView, QListWidgetItem + QListWidget, QAbstractItemView, QListWidgetItem, QDialogButtonBox, QLabel ) from nw.constants import nwAlert, nwItemType, nwItemClass, nwItemLayout +from nw.gui.additions import QHelpLabel from nw.core import NWDoc logger = logging.getLogger(__name__) @@ -51,22 +52,18 @@ class GuiDocSplit(QDialog): self.optState = self.theProject.optState self.sourceItem = None - self.outerBox = QHBoxLayout() - self.innerBox = QVBoxLayout() - self.setLayout(self.outerBox) - + self.outerBox = QVBoxLayout() self.setWindowTitle("Split Document") - self.guiDeco = self.theParent.theTheme.loadDecoration("split",(64,64)) - self.outerBox.setSpacing(16) - self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) - self.outerBox.addLayout(self.innerBox) - - self.doMergeForm = QGridLayout() - self.doMergeForm.setContentsMargins(0,0,0,0) + self.headLabel = QLabel("Document Headers") + self.helpLabel = QHelpLabel( + "Select the maximum level to split into files at.", self.theParent.theTheme.helpText + ) self.listBox = QListWidget() self.listBox.setDragDropMode(QAbstractItemView.NoDragDrop) + self.listBox.setMinimumWidth(400) + self.listBox.setMinimumHeight(180) self.splitLevel = QComboBox(self) self.splitLevel.addItem("Split on Header Level 1 (Title)", 1) @@ -80,18 +77,19 @@ class GuiDocSplit(QDialog): self.splitLevel.setCurrentIndex(spIndex) self.splitLevel.currentIndexChanged.connect(self._populateList) - self.splitButton = QPushButton("Split") - self.splitButton.clicked.connect(self._doSplit) + self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) + self.buttonBox.accepted.connect(self._doSplit) + self.buttonBox.rejected.connect(self._doClose) - self.closeButton = QPushButton("Close") - self.closeButton.clicked.connect(self._doClose) - - self.doMergeForm.addWidget(self.listBox, 0, 0, 1, 3) - self.doMergeForm.addWidget(self.splitLevel, 1, 0, 1, 3) - self.doMergeForm.addWidget(self.splitButton, 2, 1) - self.doMergeForm.addWidget(self.closeButton, 2, 2) - - self.innerBox.addLayout(self.doMergeForm) + self.outerBox.setSpacing(0) + self.outerBox.addWidget(self.headLabel) + self.outerBox.addWidget(self.helpLabel) + self.outerBox.addSpacing(8) + self.outerBox.addWidget(self.listBox) + self.outerBox.addWidget(self.splitLevel) + self.outerBox.addSpacing(12) + self.outerBox.addWidget(self.buttonBox) + self.setLayout(self.outerBox) self.rejected.connect(self._doClose) self.show() diff --git a/nw/gui/icons.py b/nw/gui/icons.py index 8457ea90..9340d900 100644 --- a/nw/gui/icons.py +++ b/nw/gui/icons.py @@ -99,10 +99,7 @@ class GuiIcons: DECO_MAP = { "nwicon" : ["icons", "novelWriter.svg"], - "export" : ["graphics", "export.svg"], - "merge" : ["graphics", "merge.svg"], "settings" : ["graphics", "gear.svg"], - "split" : ["graphics", "split.svg"], } def __init__(self, theParent): From dec7e51a77ceb2bcf1d7319c89d7a9267e5204bf Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 18:23:27 +0200 Subject: [PATCH 31/53] Cleaned up item editor, and removed some redundant imports here and there --- nw/assets/graphics/gear.svg | 48 ----------------------- nw/assets/graphics/license.txt | 8 ---- nw/gui/dialogs/docmerge.py | 5 +-- nw/gui/dialogs/docsplit.py | 4 +- nw/gui/dialogs/itemeditor.py | 71 +++++++++++++++++++--------------- nw/gui/icons.py | 1 - 6 files changed, 44 insertions(+), 93 deletions(-) delete mode 100644 nw/assets/graphics/gear.svg delete mode 100644 nw/assets/graphics/license.txt diff --git a/nw/assets/graphics/gear.svg b/nw/assets/graphics/gear.svg deleted file mode 100644 index b5da5b7a..00000000 --- a/nw/assets/graphics/gear.svg +++ /dev/null @@ -1,48 +0,0 @@ - -image/svg+xml - - \ No newline at end of file diff --git a/nw/assets/graphics/license.txt b/nw/assets/graphics/license.txt deleted file mode 100644 index 00a23f87..00000000 --- a/nw/assets/graphics/license.txt +++ /dev/null @@ -1,8 +0,0 @@ -FROM ICON SET: Typicons -LICENSE: Creative Commons (Attribution-Share Alike 3.0 Unported) -https://creativecommons.org/licenses/by-sa/3.0/ - -Applies to: - * graphics/export.svg - * graphics/merge.svg - * graphics/split.svg diff --git a/nw/gui/dialogs/docmerge.py b/nw/gui/dialogs/docmerge.py index 47391a72..39c7d0bf 100644 --- a/nw/gui/dialogs/docmerge.py +++ b/nw/gui/dialogs/docmerge.py @@ -29,10 +29,9 @@ import logging import nw from PyQt5.QtCore import Qt -from PyQt5.QtGui import QColor, QPalette from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QPushButton, QLabel, - QListWidget, QAbstractItemView, QListWidgetItem, QDialogButtonBox + QDialog, QVBoxLayout, QLabel, QListWidget, QAbstractItemView, + QListWidgetItem, QDialogButtonBox ) from nw.constants import nwAlert, nwItemType diff --git a/nw/gui/dialogs/docsplit.py b/nw/gui/dialogs/docsplit.py index 7e2e80cd..137138c3 100644 --- a/nw/gui/dialogs/docsplit.py +++ b/nw/gui/dialogs/docsplit.py @@ -30,8 +30,8 @@ import nw from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QPushButton, QComboBox, - QListWidget, QAbstractItemView, QListWidgetItem, QDialogButtonBox, QLabel + QDialog, QVBoxLayout, QComboBox, QListWidget, QAbstractItemView, + QListWidgetItem, QDialogButtonBox, QLabel ) from nw.constants import nwAlert, nwItemType, nwItemClass, nwItemLayout from nw.gui.additions import QHelpLabel diff --git a/nw/gui/dialogs/itemeditor.py b/nw/gui/dialogs/itemeditor.py index d2446579..51583195 100644 --- a/nw/gui/dialogs/itemeditor.py +++ b/nw/gui/dialogs/itemeditor.py @@ -30,11 +30,11 @@ import nw from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QGridLayout, QLineEdit, - QComboBox, QLabel, QSpacerItem, QSizePolicy, QDialogButtonBox + QDialog, QVBoxLayout, QGridLayout, QLineEdit, QComboBox, QLabel, + QDialogButtonBox ) -from nw.gui.additions import QSwitch +from nw.gui.additions import QSwitch, QHelpLabel from nw.constants import nwLabels, nwItemLayout, nwItemClass, nwItemType logger = logging.getLogger(__name__) @@ -49,31 +49,30 @@ class GuiItemEditor(QDialog): self.mainConf = nw.CONFIG self.theProject = theProject self.theParent = theParent - self.outerBox = QHBoxLayout() - self.innerBox = QVBoxLayout() - self.theItem = self.theProject.projTree[tHandle] + self.outerBox = QVBoxLayout() + + self.theItem = self.theProject.projTree[tHandle] if self.theItem is None: self._doClose() self.setWindowTitle("Item Settings") - self.guiDeco = self.theParent.theTheme.loadDecoration("settings", (64,64)) - self.outerBox.setSpacing(16) - - self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) - self.outerBox.addLayout(self.innerBox) self.setLayout(self.outerBox) - self.mainGroup = QGroupBox("Item Settings") - self.mainForm = QGridLayout() + # Labels + self.headLabel = QLabel("Edit Item Settings") + self.helpLabel = QHelpLabel( + "Item layout and status options depend on the root folder.", + self.theParent.theTheme.helpText + ) + # Item Label self.editName = QLineEdit() self.editName.setMinimumWidth(220) self.editName.setMaxLength(200) + # Item Status self.editStatus = QComboBox() - self.editLayout = QComboBox() - if self.theItem.itemClass == nwItemClass.NOVEL: for sLabel, _, _ in self.theProject.statusItems: self.editStatus.addItem( @@ -85,6 +84,8 @@ class GuiItemEditor(QDialog): self.theParent.importIcons[sLabel], sLabel, sLabel ) + # Item Layout + self.editLayout = QComboBox() self.validLayouts = [] if self.theItem.itemType == nwItemType.FILE: if self.theItem.itemClass == nwItemClass.NOVEL: @@ -105,6 +106,7 @@ class GuiItemEditor(QDialog): if itemLayout in self.validLayouts: self.editLayout.addItem(nwLabels.LAYOUT_NAME[itemLayout],itemLayout) + # Export Switch self.textExport = QLabel("Include when building project") self.editExport = QSwitch() if self.theItem.itemType == nwItemType.FILE: @@ -114,18 +116,6 @@ class GuiItemEditor(QDialog): self.editExport.setEnabled(False) self.editExport.setChecked(False) - self.mainForm.addWidget(QLabel("Label"), 0, 0) - self.mainForm.addWidget(self.editName, 0, 1, 1, 2) - self.mainForm.addWidget(QLabel("Status"), 1, 0) - self.mainForm.addWidget(self.editStatus, 1, 1, 1, 2) - self.mainForm.addWidget(QLabel("Layout"), 2, 0) - self.mainForm.addWidget(self.editLayout, 2, 1, 1, 2) - self.mainForm.addWidget(self.textExport, 4, 0, 1, 2) - self.mainForm.addWidget(self.editExport, 4, 2) - - self.spacerItem = QSpacerItem(12, 12, QSizePolicy.Fixed, QSizePolicy.Fixed) - self.mainForm.addItem(self.spacerItem, 3, 0) - self.editName.setText(self.theItem.itemName) statusIdx = self.editStatus.findData(self.theItem.itemStatus) if statusIdx != -1: @@ -134,14 +124,34 @@ class GuiItemEditor(QDialog): if layoutIdx != -1: self.editLayout.setCurrentIndex(layoutIdx) + # Buttons self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.buttonBox.accepted.connect(self._doSave) self.buttonBox.rejected.connect(self._doClose) - self.mainGroup.setLayout(self.mainForm) - self.innerBox.addWidget(self.mainGroup) - self.innerBox.addWidget(self.buttonBox) + # Assemble + self.mainForm = QGridLayout() + self.mainForm.setVerticalSpacing(4) + self.mainForm.addWidget(QLabel("Label"), 0, 0, 1, 1) + self.mainForm.addWidget(self.editName, 0, 1, 1, 2) + self.mainForm.addWidget(QLabel("Status"), 1, 0, 1, 1) + self.mainForm.addWidget(self.editStatus, 1, 1, 1, 2) + self.mainForm.addWidget(QLabel("Layout"), 2, 0, 1, 1) + self.mainForm.addWidget(self.editLayout, 2, 1, 1, 2) + self.mainForm.addWidget(self.textExport, 3, 0, 1, 2) + self.mainForm.addWidget(self.editExport, 3, 2, 1, 1) + self.outerBox.setSpacing(0) + self.outerBox.addWidget(self.headLabel) + self.outerBox.addWidget(self.helpLabel) + self.outerBox.addSpacing(8) + self.outerBox.addLayout(self.mainForm) + self.outerBox.addSpacing(12) + self.outerBox.addStretch(1) + self.outerBox.addWidget(self.buttonBox) + self.setLayout(self.outerBox) + + self.rejected.connect(self._doClose) self.show() self.editName.selectAll() @@ -175,7 +185,6 @@ class GuiItemEditor(QDialog): def _doClose(self): logger.verbose("ItemEditor close button clicked") - self.reject() self.close() return diff --git a/nw/gui/icons.py b/nw/gui/icons.py index 9340d900..bc0bd493 100644 --- a/nw/gui/icons.py +++ b/nw/gui/icons.py @@ -99,7 +99,6 @@ class GuiIcons: DECO_MAP = { "nwicon" : ["icons", "novelWriter.svg"], - "settings" : ["graphics", "gear.svg"], } def __init__(self, theParent): From 0ae853618c823efde0af6d70b635a2a9e741def1 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 17 May 2020 20:17:53 +0200 Subject: [PATCH 32/53] Updated changelog for the dev branch --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 554526cd..e33b8311 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # novelWriter ChangeLog +## Version 0.6 [2020-xx-xx] + +**Bugfixes** + +* Added more fallback icons so that all icons are properly set also on Windows 10. PR #211 + +**User Interface** + +* The Export Tool has been removed and replaced by a new tool called "Build Novel Project". The new tool has the same filtering options as the Export Tool, but with more formatting options for titles. It also has a preview window to display the generated document. A Save As button provides exports to HTML, novelWriter Markdown. plain text, PDF and Open Document format. LaTeX export has not been ported over, and interfacing with Pandoc is no longer supported either. Although. as before, the HTML export can be converted with Pandoc still. The new tool also supports printing. PR #204 +* The statusbar has been reorganised a bit. The stats section has been separated from the save status icons, and the save status icons replaced with generated LED-looking widgets. The amount of statistics has been reduced to three numbers, and the rest moved to a tooltip. PR #210 +* The Project Settings, Preferences, Item Editor, Merge Documents, and Split Documents dialogs have been redesigned. The ones with tabs, now have vertical tabs on the left with horizontal labels. The dialog design should be more compact, and have room for more tabs for future settings. PR #212 + +**Other Improvements** + +* Some of the package and version checks have been moved to a later point in the start-up so that a dialog can alert the user that the system is missing dependencies. This is only possible after the core PyQt5 elements have been imported, so if these are missing, the dialog will never show. PR #210 +* With a few minor changes, novelWriter was successfully tested on Ubuntu 14.04 with Python 3.4.3 and Qt 5.2.1. This is not necessarily a level of legacy compatibility that will be maintained, but it does currently work. PR #210 + ## Version 0.5.1 [2020-05-14] **Bugfixes** From 59e6b725bab01aac6548dbdf892256845bfa2387 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 19 May 2020 00:03:52 +0200 Subject: [PATCH 33/53] Made some fixes to the index (including a highlighting bug), some cleanup, and added more tests --- nw/core/index.py | 83 +++++++--------- tests/reference/proj/3_nwProject.nwx | 142 +++++++++++++++++++++++++++ tests/test_project.py | 108 +++++++++++++++++++- 3 files changed, 287 insertions(+), 46 deletions(-) create mode 100644 tests/reference/proj/3_nwProject.nwx diff --git a/nw/core/index.py b/nw/core/index.py index 617ddb65..60129b35 100644 --- a/nw/core/index.py +++ b/nw/core/index.py @@ -41,7 +41,7 @@ logger = logging.getLogger(__name__) class NWIndex(): - VALID_KEYS = [ + VALID_KEYS = set([ nwKeyWords.TAG_KEY, nwKeyWords.PLOT_KEY, nwKeyWords.POV_KEY, @@ -51,7 +51,7 @@ class NWIndex(): nwKeyWords.OBJECT_KEY, nwKeyWords.ENTITY_KEY, nwKeyWords.CUSTOM_KEY - ] + ]) TAG_CLASS = { nwKeyWords.CHAR_KEY : nwItemClass.CHARACTER, nwKeyWords.POV_KEY : nwItemClass.CHARACTER, @@ -107,7 +107,6 @@ class NWIndex(): def deleteHandle(self, tHandle): """Delete all entries of a given document handle. """ - delTags = [] for tTag in self.tagIndex: if self.tagIndex[tTag][1] == tHandle: @@ -130,7 +129,6 @@ class NWIndex(): def loadIndex(self): """Load index from last session from the project meta folder. """ - theData = {} indexFile = path.join(self.theProject.projMeta, nwFiles.INDEX_FILE) @@ -169,7 +167,6 @@ class NWIndex(): """Save the current index as a json file in the project meta data folder. """ - indexFile = path.join(self.theProject.projMeta, nwFiles.INDEX_FILE) logger.debug("Saving index file") @@ -179,7 +176,7 @@ class NWIndex(): nIndent = None try: - with open(indexFile,mode="w+",encoding="utf8") as outFile: + with open(indexFile, mode="w+", encoding="utf8") as outFile: outFile.write(json.dumps({ "tagIndex" : self.tagIndex, "refIndex" : self.refIndex, @@ -198,7 +195,6 @@ class NWIndex(): """Check that the entries in the index are valid and contain the elements it should. """ - self.indexBroken = False try: @@ -265,7 +261,7 @@ class NWIndex(): logger.debug("Indexing item with handle %s" % tHandle) # Check file type, and reset its old index - # Also add an entry for T0 in case the file has no title + # Also add a dummy entry for T0 in case the file has no title self.refIndex[tHandle] = {} self.refIndex[tHandle]["T0"] = { "tags" : [], @@ -297,16 +293,16 @@ class NWIndex(): continue if aLine.startswith(r"#"): - isTitle = self.indexTitle(tHandle, isNovel, aLine, nLine, itemLayout) + isTitle = self._indexTitle(tHandle, isNovel, aLine, nLine, itemLayout) if isTitle and nLine > 0: if nTitle > 0: lastText = "\n".join(theLines[nTitle-1:nLine-1]) - self.indexWordCounts(tHandle, isNovel, lastText, nTitle) + self._indexWordCounts(tHandle, isNovel, lastText, nTitle) nTitle = nLine elif aLine.startswith(r"@"): - self.indexNoteRef(tHandle, aLine, nLine, nTitle) - self.indexTag(tHandle, aLine, nLine, itemClass) + self._indexNoteRef(tHandle, aLine, nLine, nTitle) + self._indexTag(tHandle, aLine, nLine, itemClass) elif aLine.startswith(r"%"): if nTitle > 0: @@ -315,12 +311,12 @@ class NWIndex(): cLen = len(toCheck) cOff = tLen - cLen if toCheck.startswith("synopsis:"): - self.indexSynopsis(tHandle, isNovel, aLine[cOff+9:].strip(), nTitle) + self._indexSynopsis(tHandle, isNovel, aLine[cOff+9:].strip(), nTitle) # Count words for remaining text after last heading if nTitle > 0: lastText = "\n".join(theLines[nTitle-1:nLine-1]) - self.indexWordCounts(tHandle, isNovel, lastText, nTitle) + self._indexWordCounts(tHandle, isNovel, lastText, nTitle) # Run word counter for whole text cC, wC, pC = countWords(theText) @@ -336,11 +332,14 @@ class NWIndex(): return True - def indexTitle(self, tHandle, isNovel, aLine, nLine, itemLayout): - """Save information about the title and its location in the - file. - """ + ## + # Internal Indexers + ## + def _indexTitle(self, tHandle, isNovel, aLine, nLine, itemLayout): + """Save information about the title and its location in the + file to the index. + """ if aLine.startswith("# "): hDepth = "H1" hText = aLine[2:].strip() @@ -382,7 +381,9 @@ class NWIndex(): return True - def indexWordCounts(self, tHandle, isNovel, theText, nTitle): + def _indexWordCounts(self, tHandle, isNovel, theText, nTitle): + """Count text stats and save the counts to the index. + """ cC, wC, pC = countWords(theText) sTitle = "T%d" % nTitle if isNovel: @@ -401,7 +402,9 @@ class NWIndex(): self.noteIndex[tHandle][sTitle]["updated"] = time() return - def indexSynopsis(self, tHandle, isNovel, theText, nTitle): + def _indexSynopsis(self, tHandle, isNovel, theText, nTitle): + """Save the synopsis to the index. + """ sTitle = "T%d" % nTitle if isNovel: if tHandle in self.novelIndex: @@ -415,11 +418,10 @@ class NWIndex(): self.noteIndex[tHandle][sTitle]["updated"] = time() return - def indexNoteRef(self, tHandle, aLine, nLine, nTitle): + def _indexNoteRef(self, tHandle, aLine, nLine, nTitle): """Validate and save the information about a reference to a tag in another file. """ - isValid, theBits, thePos = self.scanThis(aLine) if not isValid or len(theBits) == 0: return False @@ -435,10 +437,9 @@ class NWIndex(): return True - def indexTag(self, tHandle, aLine, nLine, itemClass): + def _indexTag(self, tHandle, aLine, nLine, itemClass): """Validate and save the information from a tag. """ - isValid, theBits, thePos = self.scanThis(aLine) if not isValid or len(theBits) != 2: return False @@ -453,42 +454,39 @@ class NWIndex(): ## def scanThis(self, aLine): - """Scan a line starting with @ to check that it's valid and to - split up its elements into an array and an array of positions. - The latter is needed for the syntax highlighter. + """Scan a line starting with @ to check that it's valid. Then + split it up into its elements and positions as two arrays. """ + theBits = [] # The elements of the string + thePos = [] # The absolute position of each element - theBits = [] - thePos = [] - - aLine = aLine.strip() + aLine = aLine.rstrip() # Remove all trailing white spaces nChar = len(aLine) if nChar < 2: return False, theBits, thePos if aLine[0] != "@": return False, theBits, thePos - cPos = 0 - cKey, cSep, cVals = aLine.partition(":") + cKey, _, cVals = aLine.partition(":") sKey = cKey.strip() if sKey == "@": return False, theBits, thePos + cPos = 0 theBits.append(sKey) thePos.append(cPos) - cPos += len(sKey) + 1 + cPos += len(cKey) + 1 - if cVals == "": + if not cVals: # No values, so we're done return True, theBits, thePos - aVals = cVals.split(",") - for cVal in aVals: + for cVal in cVals.split(","): sVal = cVal.strip() rLen = len(cVal.lstrip()) tLen = len(cVal) theBits.append(sVal) - thePos.append(cPos+tLen-rLen) + thePos.append(cPos + tLen - rLen) cPos += tLen + 1 return True, theBits, thePos @@ -497,8 +495,7 @@ class NWIndex(): """Check the tags against the index to see if they are valid tags. This is needed for syntax highlighting. """ - - nBits = len(theBits) + nBits = len(theBits) isGood = [False]*nBits if nBits == 0: return [] @@ -512,7 +509,7 @@ class NWIndex(): # is ignored if theBits[0] == nwKeyWords.TAG_KEY and nBits > 1: isGood[0] = True - if theBits[1] in self.tagIndex.keys(): + if theBits[1] in self.tagIndex: if self.tagIndex[theBits[1]][1] == tItem.itemHandle: isGood[1] = True else: @@ -537,7 +534,6 @@ class NWIndex(): order as they appear in the tree view and in the respective document files, but skipping all note files. """ - theStructure = [] for tHandle in self.theProject.projTree.handles(): if tHandle not in self.novelIndex: @@ -551,7 +547,6 @@ class NWIndex(): """Returns the counts for a file, or a section of a file starting at title nTitle. """ - cC = 0 wC = 0 pC = 0 @@ -579,7 +574,6 @@ class NWIndex(): """Extract all references made in a file, and optionally title section. sTitle must be a string. """ - theRefs = {} for tKey in self.TAG_CLASS: theRefs[tKey] = [] @@ -602,7 +596,6 @@ class NWIndex(): """Build a list of files referring back to our file, specified by tHandle. """ - theRefs = {} tItem = self.theProject.projTree[tHandle] diff --git a/tests/reference/proj/3_nwProject.nwx b/tests/reference/proj/3_nwProject.nwx new file mode 100644 index 00000000..5238e40d --- /dev/null +++ b/tests/reference/proj/3_nwProject.nwx @@ -0,0 +1,142 @@ + + + + + + True + + + False + True + None + None + 0 + + + %title% + Chapter %num%\\%title% + %title% + * * * +
+ False + False + False +
+ + New + Note + Draft + Finished + + + New + Minor + Major + Main + +
+ + + Novel + ROOT + NOVEL + New + False + + + Characters + ROOT + CHARACTER + New + False + + + Plot + ROOT + PLOT + New + False + + + World + ROOT + WORLD + New + False + + + New Chapter + FOLDER + NOVEL + New + False + + + New Scene + FILE + NOVEL + New + False + True + SCENE + 0 + 0 + 0 + 0 + + + Timeline + ROOT + TIMELINE + New + False + + + Object + ROOT + OBJECT + New + False + + + Custom1 + ROOT + CUSTOM + New + False + + + Custom2 + ROOT + CUSTOM + New + False + + + Hello + FILE + NOVEL + New + False + True + SCENE + 0 + 0 + 0 + 0 + + + Jane + FILE + CHARACTER + New + False + True + NOTE + 0 + 0 + 0 + 0 + + +
diff --git a/tests/test_project.py b/tests/test_project.py index 7d920a37..a49cba7d 100644 --- a/tests/test_project.py +++ b/tests/test_project.py @@ -76,20 +76,39 @@ def testProjectNewRoot(nwTempProj,nwRef): assert cmpFiles(projFile, refFile, [2]) assert not theProject.projChanged +@pytest.mark.project +def testProjectNewFile(nwTempProj,nwRef): + projFile = path.join(nwTempProj,"nwProject.nwx") + refFile = path.join(nwRef,"proj","3_nwProject.nwx") + assert theProject.openProject(projFile) + assert isinstance(theProject.newFile("Hello", nwItemClass.NOVEL, "73475cb40a568"), str) + assert isinstance(theProject.newFile("Jane", nwItemClass.CHARACTER, "44cb730c42048"), str) + assert theProject.projChanged + assert theProject.saveProject() + assert theProject.closeProject() + assert cmpFiles(projFile, refFile, [2]) + assert not theProject.projChanged + @pytest.mark.project def testIndexScanThis(nwTempProj): projFile = path.join(nwTempProj,"nwProject.nwx") assert theProject.openProject(projFile) - theIndex = NWIndex(theProject,theMain) + theIndex = NWIndex(theProject, theMain) tHandle = "31489056e0916" isValid, theBits, thePos = theIndex.scanThis("tag: this, and this") assert not isValid + isValid, theBits, thePos = theIndex.scanThis("@") + assert not isValid + isValid, theBits, thePos = theIndex.scanThis("@:") assert not isValid + isValid, theBits, thePos = theIndex.scanThis(" @a: b") + assert not isValid + isValid, theBits, thePos = theIndex.scanThis("@a:") assert isValid assert str(theBits) == "['@a']" @@ -105,9 +124,96 @@ def testIndexScanThis(nwTempProj): assert str(theBits) == "['@a', 'b', 'c', 'd']" assert str(thePos) == "[0, 3, 5, 7]" + isValid, theBits, thePos = theIndex.scanThis("@a : b , c , d") + assert isValid + assert str(theBits) == "['@a', 'b', 'c', 'd']" + assert str(thePos) == "[0, 5, 9, 13]" + isValid, theBits, thePos = theIndex.scanThis("@tag: this, and this") assert isValid assert str(theBits) == "['@tag', 'this', 'and this']" assert str(thePos) == "[0, 6, 12]" assert theProject.closeProject() + +@pytest.mark.project +def testIndexCheckThese(nwTempProj): + projFile = path.join(nwTempProj,"nwProject.nwx") + assert theProject.openProject(projFile) + + theIndex = NWIndex(theProject, theMain) + nHandle = "41cfc0d1f2d12" + nItem = theProject.projTree[nHandle] + cHandle = "2858dcd1057d3" + cItem = theProject.projTree[cHandle] + + assert theIndex.scanText(cHandle, ( + "# Jane Smith\n" + "@tag: Jane" + )) + assert theIndex.scanText(nHandle, ( + "# Hello World!\n" + "@pov: Jane" + )) + assert str(theIndex.tagIndex) == "{'Jane': [2, '2858dcd1057d3', 'CHARACTER']}" + assert theIndex.novelIndex[nHandle]["T1"]["title"] == "Hello World!" + + assert str(theIndex.checkThese(["@tag", "Jane"], cItem)) == "[True, True]" + assert str(theIndex.checkThese(["@tag", "John"], cItem)) == "[True, True]" + assert str(theIndex.checkThese(["@tag", "Jane"], nItem)) == "[True, False]" + assert str(theIndex.checkThese(["@tag", "John"], nItem)) == "[True, True]" + assert str(theIndex.checkThese(["@pov", "John"], nItem)) == "[True, False]" + assert str(theIndex.checkThese(["@pov", "Jane"], nItem)) == "[True, True]" + assert str(theIndex.checkThese(["@ pov", "Jane"], nItem)) == "[False, False]" + assert str(theIndex.checkThese(["@what", "Jane"], nItem)) == "[False, False]" + + assert theProject.closeProject() + +@pytest.mark.project +def testIndexMeta(nwTempProj): + projFile = path.join(nwTempProj,"nwProject.nwx") + assert theProject.openProject(projFile) + + theIndex = NWIndex(theProject, theMain) + nHandle = "41cfc0d1f2d12" + nItem = theProject.projTree[nHandle] + cHandle = "2858dcd1057d3" + cItem = theProject.projTree[cHandle] + + assert theIndex.scanText(cHandle, ( + "# Jane Smith\n" + "@tag: Jane\n" + )) + assert theIndex.scanText(nHandle, ( + "# Hello World!\n" + "@pov: Jane\n" + "@char: Jane\n" + "\n" + "% this is a comment\n" + "\n" + "This is a story about Jane Smith.\n" + "\n" + "Well, not really.\n" + )) + assert str(theIndex.tagIndex) == "{'Jane': [2, '2858dcd1057d3', 'CHARACTER']}" + assert theIndex.novelIndex[nHandle]["T1"]["title"] == "Hello World!" + + # The novel structure should contain the pointer to the novel file header + assert str(theIndex.getNovelStructure()) == "['41cfc0d1f2d12:T1']" + + # The novel file should have the correct counts + cC, wC, pC = theIndex.getCounts(nHandle) + assert cC == 62 # Characters in text and title only + assert wC == 12 # Words in text and title only + assert pC == 2 # Paragraphs in text only + + # The novel file should now refer to Jane as @pov and @char + theRefs = theIndex.getReferences(nHandle) + assert str(theRefs["@pov"]) == "['Jane']" + assert str(theRefs["@char"]) == "['Jane']" + + # The character file should have a record of the reference from the novel file + theRefs = theIndex.getBackReferenceList(cHandle) + assert str(theRefs) == "{'41cfc0d1f2d12': 3}" + + assert theProject.closeProject() From 8cf7183b18f41cefa4b367b6a5e3ce7a5ebe4e48 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 20 May 2020 21:38:46 +0200 Subject: [PATCH 34/53] Replaced the app icon --- nw/assets/icons/novelWriter.ico | Bin 145258 -> 108042 bytes nw/assets/icons/novelWriter.png | Bin 32303 -> 0 bytes nw/assets/icons/novelWriter.svg | 162 +++++++++++++++++--------------- 3 files changed, 84 insertions(+), 78 deletions(-) delete mode 100644 nw/assets/icons/novelWriter.png diff --git a/nw/assets/icons/novelWriter.ico b/nw/assets/icons/novelWriter.ico index 0a27ee4f650ce90c62d0dd44b981638d2ca67ce9..470ebe7276d232832485c5341a3595d4e01a1ec8 100644 GIT binary patch literal 108042 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 BaT5Rl diff --git a/nw/assets/icons/novelWriter.png b/nw/assets/icons/novelWriter.png deleted file mode 100644 index 4543f575787d5034bd4a80e8ae21a2298a8646fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32303 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 diff --git a/nw/assets/icons/novelWriter.svg b/nw/assets/icons/novelWriter.svg index 56a3dff0..e8df3435 100644 --- a/nw/assets/icons/novelWriter.svg +++ b/nw/assets/icons/novelWriter.svg @@ -1,68 +1,82 @@ - - + version="1.1" + viewBox="0 0 270.93333 270.93334" + height="1024" + width="1024" + inkscape:export-filename="/home/vkbo/Code/novelWriter/Icons/novelWriter/Version 3/icons/18x18@2x/novelwriter.png" + inkscape:export-xdpi="3.375" + inkscape:export-ydpi="3.375"> - - - - - + + + + + + + inkscape:window-y="0" + inkscape:window-x="0" + inkscape:window-height="1344" + inkscape:window-width="2560" + inkscape:pagecheckerboard="true" + units="px" + showgrid="false" + inkscape:document-rotation="0" + inkscape:current-layer="layer1" + inkscape:document-units="px" + inkscape:cy="665.4051" + inkscape:cx="469.95914" + inkscape:zoom="0.49497475" + inkscape:pageshadow="2" + inkscape:pageopacity="0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" /> @@ -76,36 +90,28 @@ + inkscape:groupmode="layer" + inkscape:label="Background"> + inkscape:label="Box" + ry="21.166666" + rx="21.166666" + y="5.8208332" + x="5.8208332" + height="259.29166" + width="259.29166" + id="rect1467" + style="display:inline;fill:#b6afaf;fill-opacity:0.69999999;stroke:#857a7a;stroke-width:2.64583;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.69803923" /> + + - - - - + inkscape:label="n" + d="m 82.55,52.916667 c -11.726333,0 -21.166666,9.440333 -21.166666,21.166666 v 52.916147 a 74.08333,74.08333 0 0 0 0,5.3e-4 74.08333,74.08333 0 0 0 0,0.005 v 52.912 c 0,11.72633 9.440333,21.16666 21.166666,21.16666 11.726333,0 21.16667,-9.44033 21.16667,-21.16666 v -52.91667 a 31.75,31.75 0 0 1 31.74999,-31.749997 31.75,31.75 0 0 1 31.75,31.749997 v 74.87708 h -22.6441 c -1.45336,0 -2.62361,0.59079 -2.62361,1.32447 0,0.13836 0.0421,0.27171 0.11937,0.39687 h -0.11782 c 0.0818,0.53871 0.32835,1.05778 0.74517,1.47433 l 43.8149,43.78699 c 1.03733,1.03666 2.70767,1.03667 3.74499,0 l 43.81541,-43.78699 c 0.4169,-0.41662 0.66338,-0.93551 0.74518,-1.47433 h -0.11782 c 0.0773,-0.12516 0.11937,-0.25851 0.11937,-0.39687 0,-0.73368 -1.17027,-1.32447 -2.62362,-1.32447 h -22.64409 v -74.87708 a 74.08333,74.08333 0 0 0 -74.08333,-74.083333 74.08333,74.08333 0 0 0 -0.21446,0 74.08333,74.08333 0 0 0 -35.312564,9.074382 C 96.123154,56.500593 89.772151,52.916667 82.55,52.916667 Z" + style="fill:#740c0c;fill-opacity:1;stroke:#631d1d;stroke-width:2.64583;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1406" /> From 8e49368c4617b95adf0b01999f968e98720b0828 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 20 May 2020 23:21:33 +0200 Subject: [PATCH 35/53] Added an install assets folder --- assets/icons/1024x1024/novelwriter.png | Bin 0 -> 40282 bytes .../icons/1024x1024/x-novelwriter-project.png | Bin 0 -> 44572 bytes assets/icons/128x128/novelwriter.png | Bin 0 -> 3879 bytes .../icons/128x128/x-novelwriter-project.png | Bin 0 -> 4874 bytes assets/icons/16x16/novelwriter.png | Bin 0 -> 530 bytes assets/icons/16x16/x-novelwriter-project.png | Bin 0 -> 634 bytes assets/icons/16x16@2x/novelwriter.png | Bin 0 -> 908 bytes .../icons/16x16@2x/x-novelwriter-project.png | Bin 0 -> 1183 bytes assets/icons/18x18@2x/novelwriter.png | Bin 0 -> 1086 bytes .../icons/18x18@2x/x-novelwriter-project.png | Bin 0 -> 1371 bytes assets/icons/24x24/novelwriter.png | Bin 0 -> 754 bytes assets/icons/24x24/x-novelwriter-project.png | Bin 0 -> 918 bytes assets/icons/256x256/novelwriter.png | Bin 0 -> 8436 bytes .../icons/256x256/x-novelwriter-project.png | Bin 0 -> 10005 bytes assets/icons/32x32/novelwriter.png | Bin 0 -> 908 bytes assets/icons/32x32/x-novelwriter-project.png | Bin 0 -> 1183 bytes assets/icons/32x32@2x/novelwriter.png | Bin 0 -> 1742 bytes .../icons/32x32@2x/x-novelwriter-project.png | Bin 0 -> 2544 bytes assets/icons/48x48/novelwriter.png | Bin 0 -> 1394 bytes assets/icons/48x48/x-novelwriter-project.png | Bin 0 -> 1959 bytes assets/icons/512x512/novelwriter.png | Bin 0 -> 18587 bytes .../icons/512x512/x-novelwriter-project.png | Bin 0 -> 20472 bytes assets/icons/64x64/novelwriter.png | Bin 0 -> 1742 bytes assets/icons/64x64/x-novelwriter-project.png | Bin 0 -> 2544 bytes assets/icons/96x96/novelwriter.png | Bin 0 -> 2736 bytes assets/icons/96x96/x-novelwriter-project.png | Bin 0 -> 3660 bytes assets/icons/novelwriter.ico | Bin 0 -> 108042 bytes assets/icons/novelwriter.svg | 117 ++++++++++++++ assets/icons/x-novelwriter-project.svg | 147 ++++++++++++++++++ assets/installDebian.sh | 21 +++ assets/mime/x-novelwriter-project.xml | 8 + assets/novelwriter.desktop | 10 ++ 32 files changed, 303 insertions(+) create mode 100644 assets/icons/1024x1024/novelwriter.png create mode 100644 assets/icons/1024x1024/x-novelwriter-project.png create mode 100644 assets/icons/128x128/novelwriter.png create mode 100644 assets/icons/128x128/x-novelwriter-project.png create mode 100644 assets/icons/16x16/novelwriter.png create mode 100644 assets/icons/16x16/x-novelwriter-project.png create mode 100644 assets/icons/16x16@2x/novelwriter.png create mode 100644 assets/icons/16x16@2x/x-novelwriter-project.png create mode 100644 assets/icons/18x18@2x/novelwriter.png create mode 100644 assets/icons/18x18@2x/x-novelwriter-project.png create mode 100644 assets/icons/24x24/novelwriter.png create mode 100644 assets/icons/24x24/x-novelwriter-project.png create mode 100644 assets/icons/256x256/novelwriter.png create mode 100644 assets/icons/256x256/x-novelwriter-project.png create mode 100644 assets/icons/32x32/novelwriter.png create mode 100644 assets/icons/32x32/x-novelwriter-project.png create mode 100644 assets/icons/32x32@2x/novelwriter.png create mode 100644 assets/icons/32x32@2x/x-novelwriter-project.png create mode 100644 assets/icons/48x48/novelwriter.png create mode 100644 assets/icons/48x48/x-novelwriter-project.png create mode 100644 assets/icons/512x512/novelwriter.png create mode 100644 assets/icons/512x512/x-novelwriter-project.png create mode 100644 assets/icons/64x64/novelwriter.png create mode 100644 assets/icons/64x64/x-novelwriter-project.png create mode 100644 assets/icons/96x96/novelwriter.png create mode 100644 assets/icons/96x96/x-novelwriter-project.png create mode 100644 assets/icons/novelwriter.ico create mode 100644 assets/icons/novelwriter.svg create mode 100644 assets/icons/x-novelwriter-project.svg create mode 100755 assets/installDebian.sh create mode 100644 assets/mime/x-novelwriter-project.xml create mode 100644 assets/novelwriter.desktop diff --git a/assets/icons/1024x1024/novelwriter.png b/assets/icons/1024x1024/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..537d7895bed66201aa8d3617fbeced3bc2ae6740 GIT binary patch literal 40282 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

-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

|C4L@ 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
nB-jTnE9aLaoAq2%Ufs~|s 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 Vb)og4Z=hKi22WQ%mvv4FO#t{7(+U6p literal 0 HcmV?d00001 diff --git a/assets/icons/1024x1024/x-novelwriter-project.png b/assets/icons/1024x1024/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..d0eba36dbdd1a71864417f850659779b115341aa GIT binary patch literal 44572 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­q(B7@{^~2tkJimpcl2E1yRv%TO@p~w^zg7= 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

Wip_~cif-eYptA$hGx5UhH^Fh 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 N0IrSDs=j9*^FLQRAm#u7 literal 0 HcmV?d00001 diff --git a/assets/icons/16x16/novelwriter.png b/assets/icons/16x16/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..5723b8c583743cdc46f83484c7a5afa157f6782d GIT binary patch literal 530 zcmV+t0`2{YP)WW6JzBVb*E<3IW1~rCi~F;>YP94{LVRCE;%|pTnqaBX&elAm_SHKPiL&i1$@5r zwA;NgNwZy)AWk&dE`rE&cB6B3HPa{*B$wa+J|zf!O_l?QNW9^2S4^dD7ZQo?cZdV< zSgnSPRx4n%S^>NN{P5sCzqkmkWV2_HogKw-f;~Y*V$TIpR0UB~0RTYP`I~Y%-eb%$ z)B&(-etWyQmCv7Sy6h27oj#8)!_ z0EdM1{)O!A-J@wzO_sf@nari-n*auH<>Agb;#8waVwU zHO$dbepD(98V2^l0(zhpl0ja8g=ZVC1aZ&U*Amq(b_H`czMrLQR zW@fPG<^VW5JS1$l0r*}n(`hsw28PDQ$QO%brltV+d47&xE(7p&e;;*lum@0jGIt`I z&x4eF+1=&c`Z|eJ>i+2wf6;5ZJNrg3z1M6=n%vMhuUXqwhrK^(_H9LESDxVX4ra&i*WG*J|VrKKfwT_>4L zVi*Q-9N&(h3$$9Tt&@|JH>p%=NKvj|b#-+GfU2rQQH1aNs5c+1TCFzf^|}Y}2WF_P UE~m^V!2kdN07*qoM6N<$f;99L=l}o! literal 0 HcmV?d00001 diff --git a/assets/icons/16x16@2x/novelwriter.png b/assets/icons/16x16@2x/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..6e62b8e86fdf74cb2efef9aea8e429fc86909e1c GIT binary patch literal 908 zcmV;719SX|P)~|1x8WI|tDEia?$(JYirjH5_SWHYH6bFsPVIv?QY%+g6dwIFm;`1p_dV9ZEDl1Pe0$^BzWH?-rF$VyEgM+eM z^M9nOd@>Mt@NsOcJr)dBTp2)5r@4zPk}E9|xwkPf(URQTE4vcFRYW5Z+xq0>qx13% z_dp>rL?$#g?%(xz;tT*1KYv!FwzushyIcT}2nL>CNkvDPHES$H3NXdXtX?c4PDbPI5Xn`0J!IJC92!nViyKLlZmzt4ShDsIh5r)yYJuEQ$?}n zO;8l8JT>*0Au_e2Bb*CxE*L&a_ z7+B2*kuiThGP0J>tY~eR58^y?003l&XTEI3fVhY`Lu5QnrDRGe7Hc|kc)bUtzyDJ- z5O6)}>Deq~PANrARii`{MeayZ#++_@O#l=wq@OM1l3x!_tW^+v`#`DvY ilkoh?%Dd_5Y5fmbidspfW_pJJ0000FLWNk?0!$>XWfbER)I9$6~RY6B85LrN$A3j>F;joTh1K zcXxNQKp;3zeRw>cJjZdnTU%SIQV?XJBM=C_@9ph9ck#nq1j8_*#>U2XHk+-nEC7n4 z>PV6-Hnw6Di^b6E^|drjhl)W|l}eC|MBsh)47p4OhS5>P!(nWAz1WRJP$dvRtWu%l z)-5!(x1X9z5X3PA!!WfzpD$#y*;=huYm_&x&~ZAQtAm4s`Xm3Rd-t&M;spSJl1lN% z&JKu!170CYCWB^p7+*ek0IKTm_X!4r006mM{@2SSlkoX`yYYCO2T`&E@wK(%=iK%- zpY}+P#js|#R_%#4|SpdlAONI;Wx7k@N zc6H$ktMypx?Cd->&h2(b3jNCdxSAR$Ef(}oPNMtKBZzc5UO4dlIkK5dMJY>n;Doi^ zy^EWVA0PW&W;1>?n~^#E-kCRV@awBrxNI_&owMu?98eUx?%d&N61g0TfdQVDdjG!c z;uQg)rUp`#>Xa;yN_l=Zo&HDwAIbg)C=F1sFAx+3;&74q*8rqi?eTN{l`Hr}BDrvY zlIwu+;X|x6HzS))!!SC^i@lzm#ZEAYsNc`iH&<8TdHNL6_I6ylefxX>wKR?E_wSz> zleDy8<;fFd-oEAOTQ6TC83^FU)YLx~2hQ;mDz9F}*LFK<)M}nCXluibsVRJ>*PlJ{ zq5#fUG0gfQPnw$hZI9PFUpu)|ln5nK^gUadrpt=9~LR5AK78e&02n4XVw}<`x zeTjTTO&}cLOfTg7+$Ye4k5(%&@TOI&OlDt!BKA*?J!UCevD1<^G#9}c3 zKqL}DC=`OCC}_1>=yW49N{?b!i#ephn1C;2*+`}&E?cx!{KmT xs;;j7mL$nfFA^Z1&xcZ})DL50W4{#Ye*zfoZ9p_h`%wS@002ovPDHLkV1g(SGrj-- literal 0 HcmV?d00001 diff --git a/assets/icons/18x18@2x/novelwriter.png b/assets/icons/18x18@2x/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..fd16d0bf16776d9a92f820c71fe174f9c53cce68 GIT binary patch literal 1086 zcmV-E1i|}>P)(^b8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11ItN7 zK~z|U?U+q$6Gs%s-<#dFy=%v|Hgb|;t8rx9xGoNjD6LwFQxW3Cp&|&0B9OWCP*e$W z;J^V1jzK+eK&phwJ!&opqzdKG8^IC*r%I58RY;_WWH%rFSby)lUXrx6V{hsjN0s;= zXZ}0$+nIUq?GD10e!OubXp`m7IOhU%QH(LOSgj_;uU~%y0Du4hKi$3^_xgO_C{8CJ zB6Smph_GlFw5ID*-(9)#Gv2v*b7&wKyrVdsT?MIEA)kjgi;Leg5XH}BMcGdl005Ak zPL%BSFBlU9d$+e~Hz6X4L=Lv!AobcaP}wlVVkTp&Z#OFymRnho3u|k3GEMxiK%$kQ zu)c18e(&B$X=%v|L?{P?>yfdsmw!x84;B^|J=Kj3g_lYqA`-}Q&8DgaS0Ir2=+vpS zqN?SN110a@KUAKZ>)(F$(u)@Z&(i5$md{Juo}Fbj45_N?@&p0K6LKf z%YSn&T6#GEl-|B|H$3z=m}VkfSG32ELr*3qj@F9BJty0iKxmpsl}g*0n{ke%xw-zt z-Mgc_6F{915HD@s)e1hPUPkmZU}-4%*+)Dj7Q)i5m2tfiru2oW67 z=xXH5nFV!dCSL)HD;3s2auUd`U_6pgDhqW)SUQKMn z005|=Q0}Yo@u&7kM6dTF5#(RL_F9eG77*ENeCXuKG>T$F$w5)1!4oIaBuNeDxV*V( zSv1=MLbtp8!QsPe&HDYLqdIy#4M~xgN}^S?wFkr)M?q*>kWml_8EcrEOp~ESdHMeq z*KX-Okd@v8S*dlk7X%Vyxl-RQI-Lz|T>%0B=ouc?3I9qRB#PvTMzwbZWLaE4J%4`T zcZZ{vO{IE)G4Mtr+Q+9)Hx$TfrNUl4d>G_J2mru27wR)0H%*+MnhJp+5JRNU@#9Oj zo}PbvAy@*TAW-b=*_4&9sA-PXnVApy^0EtH>zBArER(UXK6nrT0KmRJqkm*XQ|o{_ zcBtKce<611(lh4w=d8Tw^A#c&E<9I5p$2b9qf8Blv$1%5wiOime1*uxi?ai<*v4-C z9S{3fP*yPS1ZW4UZu|BE0|3CdX_jd#GCB%%@L(<$kI%9L2XffgX9+_@$W5~>)&ORT zhViZ9a&?*s)NnXEdiipKYBlB=9L%@!77c^Srujtpb$WX9>tn|pq9{fsNkYWVE|%Tx zt~$KlrkQ=~!U}Xv`{jpg*M8fXed5-wL0OWH?)R16pF~TFrEvpDJ^%m!07*qoM6N<$ Ef@kdW5dZ)H literal 0 HcmV?d00001 diff --git a/assets/icons/18x18@2x/x-novelwriter-project.png b/assets/icons/18x18@2x/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..a8307a129029fda5bf2c75ab431dbe570490ddfe GIT binary patch literal 1371 zcmV-h1*H0kP)da6;KGL{)^{U5UFzhp#OrNRM z>b3G9%Q9ZC7qwdb`ryHX`Eda?G&Fo|GMVld6%}Q!nPgE53k$ThwULpLA^Uv3KVw0u z!hdKqnwEYMo$LVQpRrnT* zh3xEXo<4obqeqYE?CfN8bW{K~kH>R9eC^uzb%dmm5q>*&4pVV4DQRg-zQJI?U@$1w z1_A-`CKtc#q5i_HTGAsWYkSZyOjKacy z46PQu!?CVFF%L%9>C^naaU;ReQEcVq*qu&A{Q2FxOplK<+^f7%$e|FAuU|){R%0zG zVUyLG7@+Ke0`@gDEE^wq@POBsE+Hbf_{azyCr+R-nb=fczha;@54HR3S*(W-LzLN4 z8;!UwT)?_x$BOf<8Au30#hEi$YHAcvYNL@ob#>TXuDJ3gWZOqVtri9ncpv&3%A1~! zxwMqLUAtD5C!rTKAq3x^Jh`SE|GASot_lqe4bj}(jL~T1<;$03Wo5B{|9)=VxIun? zJ`RV2#>Pgfs;Zconc?2OdsI|Z(9+UERaF&%K!A>p4yvoG(Q3782MUEk3=R%rv)ORD zT->^Ki{9Q|v|25%UcEx6)8Y5~dGX=}0FoqOHk(OJP36v=JB*BsP+VNREDWr&Wt%r| zX6x3i08C9yVYOQE`~7rxcVjY{=pRWX5NS*E_ep7!?kW!I#qr<0kPNpf;B zxw*OI<>fIuJB!(DW@>5*uh)yq<-%^abNlvfWLaJ|mtuzI=H@;~k|Y!Mq7_20d-raP zMkA@Iskq&4bUGa>l?u1pP0r#SyDaRr>U27>+wEwzTKs-LPN$QSk`lIT*}}7D&zP8) zK&R6oNs>G_H#Zs1pm<7Oym;{|qtWOsDk{o~Rk=jy;lqbRgM)*6YHMqsM+E}7cI{fD zUa$YbY&Iw4gH<%m&(GuY`NrP9ecN1JU0o9%`v?fY#92Jwi}1qwlhB!q`RVyeoF5OW4p7!VN)|41^G5s8Hb z#1>UdWP&16Ap{~pGzH_hK@lNw;xx5y2SjU8ho))9p6#CRobRWra~}u*U@aV;W*DXi zLw&*kfMT&2Uszs_ptW##x}&{4h-uoWlm7!m*U^nEhcMgJ)L(CN002x;#Ktgg42D6~ z+x%x321QrW0ObC@QHn-8`{w2@ zYTAL|^GT29000h`E8pVvO6HnEI&HJ+tqRa62*sy4MidL?wV`PZH3R-7{sU?Q(004_ zYe5^F)0wLkV0jOEW@augNo>O-#u!1Nn%rHXDxSER}OQ}H&ty&?Cy56 zJg;>Q58pluu!*8Jy1M$&O3TTz?PhzsPtRtX%=uD0E__KOgx0C4OEciFXVBsIr+Wf{ znEAN?cz9v?$;sr<{QQYIU(=8~{QleCKp=*BUVAieo|s7b78Z`5*3y8nUMmCuV(07Y z9&TVj@h&d@W^Q1t(*;dCb?EvVT*dEX1>sz-s7(~Lr<$SbsHCbV2ms)HDD;+P+1`3x k3PK1es_OZ>m6Z=a05*pCLt6Pk$p8QV07*qoM6N<$f{VvcLI3~& literal 0 HcmV?d00001 diff --git a/assets/icons/24x24/x-novelwriter-project.png b/assets/icons/24x24/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..14e47ad3333d4df205b61dc03732d51455493566 GIT binary patch literal 918 zcmV;H18Mw;P)g9a+A=ZkcViK%I2g{tnOV9P4iItQW*Hsy>x$Y z>-Hckfxe7FeF`)L!H0tMwNG1FaRVU|?4%23K6Hc`%au#4*L(ZmlEoSmt?c{sJLmU1 z-_QAX?-A5!VPWBGhr=-hNSsjRa@k!jmmkOD@o($pMUDCAkw_$|C`#)|%>fF90>xs{ zER{+>OixeGzMZemw6(SM)6<$)q^hdq^?JWbr_aLi#Ex_8D@pzp>FhHl>EqpMdLzk3(u(xrn{7K>~=ecEhzbHMwdP&F2kL}yL= z^}j1P6X1x1_%F7s{{e7H)dh&!SUTGr>W=;(8pV=j?0!GKfq^pt>V9a0*RSKfc#(4+ z59iLG2jHK4p2ssYl=Jy&-Ea5q@yC-VOgwmis6CrzD**T~9Il!JxKx!-Zry_Y{c7KP zio)pZ?6Kwz0reETe3>iv?<2chI3p20o1aJV`x}m_yG6|)_Ed@vpAVl6wFmY0_iLJ$sz$!4=?ns&szAz*WJ^PoVIkYyRuH0kZ_ zC7aDMJUmP;mm?4epzAu8Wua*rhG87PMW$(*wTX&RFc<`&zrP>5-A*(brLV7#y}dm` zp%D3ep7HT sdwcuGy!%hk)OG!riHV6hA%q3+2Fox2Ix$~DM*si-07*qoM6N<$f{cW}A^-pY literal 0 HcmV?d00001 diff --git a/assets/icons/256x256/novelwriter.png b/assets/icons/256x256/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..b59a2cc0d6d0be9a55586fb6853fa5e0c16718d1 GIT binary patch literal 8436 zcmcIqhgVZUv%jH+9+h5%C<;iGDjh-(AV?9Uib(IhLqM7|0RibnNDvSZA@q)bf(S^7 zNL5Niq)G4Z%6Hyh@V<9Wa_`=o*_qkh*_q$$t1 z^R&y^kYNS@4nRX$(ZD}PA}H7|*;s&!ZQpi^1L+)Dlamizu|{u)Crq$z`V z+&7;@@#ryne~0T4H)3DigG6H9MHZ^WlM>k{lenbb79=^&zJdMm-Gd+Z{;6pV|Fkex zt>uF@XH4zvUhd9$W-qOVM#;S%X_12iNUTtXfIeU;}xzRhiZ>S!a( z0`hKCdVcDoWEdkb$&=8V`MOT1j~R+4xuvYvXEu9PFgREdzzXi5A zTPcWdxjSSVC&hAjCZ6R7h>u>wGADmx8qS0pc1k*CYfF1QX63meoedeC9{Pmbg$PlN zX{lJ(JmqB8X2Cc>0AE?e4kwy3$t9=BSv-HxmZj3HN)hQ0P$j((IL8fNO2*%lpV{#X z^K+>>$@cnY{f7;&OAOE1t zf}ina!^_}Yo*d`8&0wub!}dDE&mV0%)w9Tfx>%+FG&z`n z(yFzg^>~H?7grayrwPxegIJ(NM~@SpM=L)uGc+8mUl%~Ce?B;~Y4QCdWFhOm@bT^b z-JHaIxt-5FR~M{Au0ASu%pS!$PicrS4}Go6>Zi3dUV@N0M`X|*bVM*!6mVs zJF5~jP@?P#LXSnRE>vI~d@HhT`OMo-BQb0D1CVOabV7YvdFI3(`L)uf~l6eU;S_vC3L(+gYnEqwmq6Dl|PFY&fa)KQhNjGg-$Q znqLeI)pz`WE>sr;d)~DEGuUi3!{lVIF4j<=;X`%<@kZF&yn%mEI1B?-4m(p-YtkA{-UUg%H&s;eg8W`mC2 z9JLR$8c>EBB1GvmA0Vj^vE^&W-$4=@0Fj~Fr-h6ir|L1u6uyE;FJy^UAxlZqdv?Vpfe~SScDWOu*`d1YN5I?(ufN<}7)-+THITyt%LJess zfk*@;Ay5SC0Tj4D2mvtiyZ_Bsw|)^gYWO;9HT3oS%-1sksO#|ofqW|}**STIPAzmB z0prNqV&JuwPla4jW)Sq@24lMrAoDd;HpTts^GHp`o}BJTfTWWO3NXq9dXJ9OSXUO~ zzlh;g)mVaYdD{gHV?Kg&lj5U|-mCsNjP^5rr%5fo-4P_95a=$H+8ivI-5MyC&&Krp z(WjDCTj6NyN6l`JzMJir+Gkg*-l$JeH@3ZD1?uBP70*!0z;B+NI{>zwM2*A7> zbJ!an6s&ICJwMURGjRN#XJFgSrlxJtJf7O>UABB$q%^B4lW*E=GZ-bk*|HgNJ@MfZ zwWh07C3XJ2QSbGcCd^WAy!L8Qk!t8OR5M%q+MV{bzPC?>#pRaoVjMzSu|79yK)nac z4HsRUa7j7OiRM(>Nvr@`=x{On`ER2N!S=n$-(>~6pAQs&uyW%&ONf%MLIEg3L61E5 z?m}8b^-_Ut=~&9x$-zOctpB^9iF%h(+-%sz)Dd;rE&S8N@v;w{YV2650;!1%CMFG3 znnY_5Mf%k@Foj6Ks^8-ph^IHMSNUy&G z=_?d&ZNv((2@P0n(Rq)4bvw&>^^@<|MSti679jw5{OfSL?;vzLz6Bhb$!X5dlfou} zH&qngje)$9Rq&P~ZbkmM_+WbSZC0kHd2dg0d<=~slVnJ9 zPc2^vW}OjVcqk|IMN@u^IXIsaeso}PxJ^fV&pL|qmIe)#7$zo~d6-@1TV)nztloEB z0bF##cw9AmkI);7A{vynVC%b|cwaq=%LLEG>noBZmRS1G4SdJo{& z5+h1zzpzP-^OJ=S(a3sV{nMa`a15${kHw@d0###J7nqr3cReULSJ|v>Z7%( z3BNElHd7~6JtIQRd^2vnIKoTh2b}F~Nc(QcBr3vkM~FK|wigpiEdtOCkFByhV#y)f zS|obg_tcR^7f}r2S|Ky;tRt+Yx8>IH5gydG0;JJ4;rdVlMV@;KH`|wl3jqv3qm`H=0;QOY{n-eP_iko|d?) zk0&D)IbZP(*%)8DHhObdwqd!W+?st!R$|( zSh?G2t_%)HgtCSHo~KN?>fO&nthn8#W7hQkSK?+^*oj-{>7txq4%O^0Q4ll4{K1U< z?roSep-N^?&2Xx}@O=}tM{H$8NigICT8{gU7tzw!pv_8FIiGUtGeR0x^Zidc)THKi zvJ^wmg>Rta;;z~f;phG3Il`$taB9z;Cr~NkF3hx(7j}kgnLi$VA%2+AOCV6=8g&C8 z0?cGRpYkYJT^VxW`>U9)CK=-|MK$VN?``b9*F*E_EO5R(?XJbSY8UDkYKrxAn7oJoL&wuFYSZ*LR(tV?g~JeAt2gL;qDhV~VEVG=``& z*eBaA?%>2hHnorw%kyP@qxrB7$%O&OhqI(8yXm4we`x73E=r;~#HiDW=hPQVTz-~; z_`FF|8LFYe4MGKfi&fd5M32u#%p}+e^dc5=+fH^0+`3XaXC^{`!eexk>*~^-F3FRj z;n01J+-sRElwia&7=C6i5Qe_H(L69Mf4)6?xZe543MkArl43=jeptx4*wyh{lnS5f z0u+1{y=K2^Soq$dliclLckQBk)({Or{f@SpE|flMsY8R)Fn5j*n{$sZjl50*l=EI0 zyi>`@Dis?1>C-Dq3wn1ALn=aG;#D_#E)Gx48noT(bJIVohNT;19Rr2bXkonRe@M%p zt=hJJ`1V-{&^3RO`znLd6g2aL{GckXh1Bw^AY0Su#k3Vd(3f}pjqfJ)Wo@3eZd#=7iV8kn&o#Gfj1itFR6(I+Dw zOv4E%0b26WpH%84oN8f5gL8#zW%P^yH!U|FZ5Z)s@Kw$*=%=oLxGQyb*lE6ZF0h)3kS)`Nfh!@Ko9J&@LTH8d84$40;#A=4u%H(LzbP85pxDnTxGn_ zh#7-(51`1C8?u;a==bNl56@dAD@v497Zc&MP^Y0Gibp8`Q5K7>$2=Jt%2GEq?X$Oc z7d1afSN}i=Y+Ooo*0Jwcn?dyvA7Th$VILV1&hQ*nT8=xLjqUeZZ)-D>4h*Ws9_%LY zHp`VJ?eWJ`vC7Yh2A}$`E!0@&-M?*300+kedf)Oj#E19D{xK|u5lop&EyF_S!1d%w zg}tL9bT+>@yjB34^2O&7R)7(2q{gb}S8y~o&fzaQN5ayyIbcWZ)6w(rVl{?5S#SHJ ztup<1MdVKh<`M%s@BXHZHLQtZ2~m$n=cEr~hkwm2pFPKtqFNCKZ*vMN!a@>{K8|bg zAu>g3v1T(kzb1UVrOep3iFE#hwJUv3@fhvmyd3ew+k)nC*Fp1@CV9cOmI{>kf4eeh z>$LGsftLtS*Z9)Dt%}3MT$iHr*8az{?_M)?hC@dC`}l?iE{Tv;O*PY&7B2dqdn~U6 zhFs6$I}RT&Eq$WcyqNB&)TE)2An)T~d+{u5Fnwdzhyt_*cWOCn_vL3a8Lp>2@-o_t z6_rJwWukok*4}=EA!}0SoIgz)*a+H?JeSsy3ve&W4tqZ-=9Jp8Gp~Th0^08 z3pW!bZ|e5&spJ-*@fBwBD(nb*(7DWaj}m2~0DW5g0GwC=sIwoRJGKkkUpXede&~{1 zU>te3X}gPb*g52MTLP>8fdp`;Bz&Kuu6t`J>vuB{bre6Smc&Qhm`fZ3(Ixaufi{|) z-|n~7*I%i%yg2SkYHzPW4c=Kb?g;(kHGkO0GP<%N3ZN?1k`q;*2{=8BO+)KP#k^p* zWUWsRX9Nrd?6MbVv*jlzGfrnL&nAlegIeg^AB}x5G5M1R^2@2Iujd52JBWGR)6H#g z=htMH@_2oB!IPerM1juBn=QBdo&5Llw7G3;HJkXg=jC}eBG<_L`f=^P-<+L414}fd zaW`K%V(3*tn|gM3R@6Lnk3=E;XF@uCx&7#ywspaazw3^!=Ql)B+#AC7D%=?GMBtdV zrj1iulVf3>cI$N{PC2lbcv=cz#N1ZZgBn@8ZmkP++y*IGO0hG$BT8yc0XEE5TCVx^gRDA)9#-CH1djt>A7 zrnAM2cs(9k>SkvM4%hkk(Ez}`?1$KSsFqxg$Di(~Xh8Fk5U5G_MBUebvx<6`7DjhT zn}+v?`Q)$oDpX$*a)29@uTzhn5?m{8fdjFh+h+aIRK<{2`o4KxU9PtNa!Qm&<0dX7Z2XMnZ6JiU)Fr?0T4a5f9F+k0u+|tL0-fp1H4V)8e--~ya|*EusjD zQsI4=KmfS+DHx0@7naca|9}++EDtzAUOhu_(?Uk(rls{xXUFO|G@Fu&%hB`FwhvRhpn5xVM@k2^-> z$*=+d)YN#|>RH>obi;xQhXJe{cwBx*Zo5AWJYl?Z=}YOoJ(3G)-`6k#aB#Q%bF0vv zy$f!IBJhYERWIgrJFtB#Din2ku$ATCTE|?SN`y|%-!+kK@jGbn_0uspjk?nOe1sTO z;rnchAm7Dq=`gUwB0~4VXxF{d?oacIWsT3;D%SFl;Qnb*CzvAwz((Lw%C%k?cM{Q` z?t{NJO3-i7cPo!1WKXv~{cVRK8cL7p`vqa-K!HC<2OiWEobFWzp<&~3%AFHFLi`j4 zZlTw9^2;M^ve8qah_YW(Z7uBbM-RlvTmag=^Nr1Xw?}P(r?UkYrvhMVatSOTi>#vk zkXfJbk5lFv;5kYaCcM}I-ADRyct7mtsM?FVA9v-;g^Or_f6yD>akh>-vGli^I8usv zc#>4?+1Clmj#EZ?P{(Z&(hs~=Nrz~q;Rqr=_a(Q7^-UwtWK&Ii|wPu@%awoR7 zwwwR#6f4sbXnS#fi~S5A=1QB3`#YW4P{AJB`1b0_df0hD&BpnOeB&aB{|%m8c!fjU z326bTSZ%DcmT&ex+Q93p81FOKZ}|1>FV2ph)-En!=r$VbtbD!3HQxMF zLKy(I_xGQU4AGz|0#jo)$&`KQ`O7=x9c!AF$3hFKU}*># zDnz$P`y5!mXftok7LM*b)p9v+xmePnZt(Uq+PG&;Ed-1tNP(wJCrbtAt5%fZM_FY@ z(h@GrRNx#@0^UlD1Uvfcml9neN(=krh#kVmK;ffbW+3p=e<2$U7t+LjJp~v6`wVdA zgotd5GP2qK35G;>4o#R`QcHHjG9U4a%L61pGZiBNu3}<^v=dNhAXDO~&d9l>R{Ew? zIQgHZzOho_^-CVWX7NgK6_K(}0S|+8!83{8o1=&mPj;@g*1HlHzK&R%Qgp=S%(swBFFjwoAIs z2y%$?xeS>4HD)0?%N|1??}ULz(S}iF@Z<_z@X3+}d`d*d0OA+kVA5D_aEIvKksX-s zmfvqu0&*_;Kw*Y=j6lkHRxmd)*`WgYndZ;~h}hE$WYa<~hv>w5G}ya8uFdSv`X>xA z0RM11ax3e)5;xTAAMu(74->4L2PL*wla(#Q6}iy9$xETjf~eJ_ge=p;QA6^1um}x! zBk)l>#Q7MiFkr=lz8N)AlJ?XJsr+m5-yYa(*MMp{oePFZ?hXl}Idi?Vp;ph*l=RsP z=z-Ma!3Zx+bq&^OaR!W5q-`mTAcl*b+BmA<$&QHjj{Mo-qMM)VH`wnLQo!ALI!*5? zJdz($r3IewE1|9-kUHd6`1ezX1mm$Ixms;+Vk_4kGpG`PQ9(y`|J#p$*j^$2?bRtQ z3|J)7;E_eHZkN5NEerDpt5ToarW@w_8BLXW5+y{%qvcc{>^;X~AFVr0QYKlpep`4d zOadcF)XYc-Io|G{cUa%Zhc>r6-W3=AYBTNIcW^c~Ki6__aX%!u@3|bgd-BOSIq$2r zJu@SHv7yS~GU$-@*x%(Wa~&Cvj}3ezKw;)>nr4jS&u{gvj~>n(oM}cTD~Y&>EEv?T)ah<~^$t(X#+D3sx4in+RYRJhKB+rY$D(U3x zO#2-fol562Xp!e%869o3US$%V3Wkt7{4#$!)Ra}<^5Y3RSY52bCwhKa|IyWjPUoeA z8@S@4qch0ie8WEdC27O6_AL%CQ7YBf?+Mj`?vG9{))p|vl$WDfqRmqruOMt*B5yO? z>hG6!8I+tz+YwKtot(P$0Sd;uhBZ()hS~O$3&TO*!z5cSQ01H@&`OmX0UU-{NN4F8`e6I$5l#53_Fx>ZkMChh_u&K2K9{n}J zc?ef6=9VIYH%(9W^O~l-T)`?c0BYyHJjW&-xp^|k2v3}HuD{9rTuVr0d(cPfK36>tWnl=Sf^dhXMc|q&c8vCr< zhbgd6fR%I4?~E6Phtq*&)B89N60?3uwUX0M&N=LlsUbizJK0RF7yeOKfCPSK1yQHP z`O-XpleZZ&m2fwgMd3}i3~r(-F~OUfhPuj=mDG7qYW*a1JM$u==lqlFn)kfy{Gn=m z`I=>lo-0nwCFON_UL;IkBEcK1j;UJLq`5NE!-)iWBS(TYG@Pf!YqPYTr4NalWYCfF zc!36Rm@k1W2_^(WcPrb1@WFFmTE84ztZ@~X4KoHY0^&k_PvTyS>i1m*i)gSLJZJ%Z z+5!MdNf>FXgVf*zmfNdiyRnibY4itYX`3g-G93mNgenh0x5xcDro&pQ^)o0!|AhQ5 zql@?&gibRhgS$k+>T=5k!8!B!_g{eY2aZ>fK1iOIdcp{(#S_Y+N2z+`9FY|8d(a>5 za6TS1DWIf00DjJNHmChU+pG2WdC&hGtw=~ST07D8Wk7kPW79AIbYo=`I>Al8ppM`} uek`Q@`JQv>vSPnpF89B+eh~Qly@1$URf<;oG06cc0BES(SFS=lj`$zvOo0pl literal 0 HcmV?d00001 diff --git a/assets/icons/256x256/x-novelwriter-project.png b/assets/icons/256x256/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..20930c8cf17549b6a7f8881eb1685b83a9df572f GIT binary patch literal 10005 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 literal 0 HcmV?d00001 diff --git a/assets/icons/32x32@2x/novelwriter.png b/assets/icons/32x32@2x/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b489049e8694e164a549ee34ae03d10e67f12c GIT binary patch literal 1742 zcmV;<1~K`GP)MFxifdpx!o`ZCdv%=4s!>}w`1mVLR>o2(3V>xwBa$Qyg#v+}zq@e36Z`H1 zfJ^7jHRb5_-xpdem=}bIHddEbQY6BU+wD{ghky9?%$Xj5SpXgF?FEGv%df?yr9_rx zZCx(05JK?o?OPo1`3|*rba*iUfYE5Qn#^WqrH2OqkYyQ677L4c-U zp)5%Z;y6-JSLdj1X|Z9B`%p^Dgdo@8V6LmLZ~e5*mPf*2mJ)&i05HQ)MyHFeF`K7N zn>V`(D=ViE%ci9$Q3YUnd_23SvvVsrod#AEQLL^W8y(GaJbzx)XtnlGLeSs0ZdK2? zTx-DR<54ikVL|}O^1R0{iV%4F`qsOjJSmoqM#)fEI9+?-z+mpijX^aY6G<@uDoOZ{ z&dzPD&1OJx6(lE$h>nitJic<}a}1D}r*$HuaIY__#J zi)Fgu(4kj`{CrWV*M+2b4(RXdDn(AGK0f@1fn^zZha-#gcyu^H_>cCd6gZDZkY2wo zcy#H~j=}Ek5~W@jypGb2p8ozqRuoaWJvvfsH=`RLlU2APnQUQ;muS(2Dk z8c8H}dYYSg^~&_%>ea2OgrFP%rAvPI$r|fpUnqn!f0Eod5MP_rLs=0Y+Lqmg?nJty6B;kKw zyvQHEd$*D}oq9G9NXi#GF(LHbzFoEB`0?jTJ*5qRv~FG4)YN3#bnxI%{CAk+Xi;OM zyQs0z{nyQ#74D}`i`j_@A<>waQV6?5k#7vTQ5CRB07})&{iJDgdnwXsuNM zS{u+>s{ph%ptV*3Xl+1iDF%R&tkaWirc&^Db^VQk24+gutOWb{Zrr1wpEOm9xs+N|~WWx{L zySLHt^5us3&m*Cbkj&XvBoq>Uzj$$b{O9KS`tgdrd*3b8SM|97!*R5>we?MHYwH`O zV|YhK@}-fHwM;lX?}<$I;7{jt3e@SGcaA^=fqHXt!W94u0?3Fupy|kwUZJ|$Lv*^7 z{JRiApnPTJMAPBJy@}dp1OUV^^3D?{o(WY|sv*R}e{u3;Pco-P836!b4uqN-#Sj)7 z9w37N0L(%-c1#fjCE)=w3;=*K2ui~PWFP>5#X(RL9w0*j03-)NZFqnT1^^HTAuDU% zqKXItoN&iTZ$PSL@Gxp6f#Io|PQ>S_+M@J27OG*NWVHAfCi=q&bqyd20CqVT3 zuaDd96n$c8n<+vJBd;qf^Q#Gu5CWIOAx%$C{sI8N008{<@ZrqYyLS)I1cP5@XJ>N^ z!({X>j#7n1Q5dt^GistoNsuRtw0zHE9vEFpfoH+B7;-! k-*wnuKL7v# literal 0 HcmV?d00001 diff --git a/assets/icons/32x32@2x/x-novelwriter-project.png b/assets/icons/32x32@2x/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2d49d2e559c94704a006bef99cf80c0349a472 GIT binary patch literal 2544 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 AIsgCw literal 0 HcmV?d00001 diff --git a/assets/icons/48x48/x-novelwriter-project.png b/assets/icons/48x48/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..ffbd21d7e126b3fad4490655a4556309dad560d8 GIT binary patch literal 1959 zcmV;Y2Uz%tP)!D$;3(2FmBA4No2)`G3!W(;5cY97&NdbmKqi%rXsuD7Nn(6+k5vx+VH2A zVhe7v^G$Bjp7Z;i-}igZ`JHpmIRZ&==FFLL;5{HenO(XN1Yx5f2q&AHn;)*&H&Nlm zix;IpAn+GSk{lL`MXge)veT#eYK)DIDWOm(DvIJe4u@lCCBCXeg_Dz$$IWK*pSEq= zrjsNoGc1!}YHCW*>2xZu*L&~WxpONLAucXBfBw8q6vaQ+)YPmA`53HLD-{(LDp{8A zwY0SSHdVhR0)oNdZ}fWotVW~BEW;E~TwF{=MTJU|r2bSzED@kmskEZFqiwQe06gMq4j`&hqm z+pU+2LUS7P+X0rjPhKGmylZi-qtUPnO z8EtEWnHc~CMIm_eCeJQhKzaOl0eN^iKMP(jlbxM(fBGqHpL{}idOBg-Wo2cIkB{T? z`4*JhY&Pt6d(xapS-_*79>mGXRLvI#35EFArAu7+_+vtWz><2kTFut2TXDHu3=9k~ zGBOf>qR}YX+1V;dlKM}dKE2_!1w>!GcrEfV2#P}R#tkkXJBBiEyvJZP8rijL7gnnk ztyYUhqlrIOs};3c{X!6gw-)=YIEmAR_s1W()7r}KjvQH1CrJ_(izT7o*w|QTc6K(n zxIAM5RCYUsJ9eNiEF>HZGJf|iQ$0P1(dYs@F&t*_;zepc_y8dT({)A!+`gqjaOX;?4X~$0g6%-WE@YPof$ODKf6^&nhiDBo? zr9nd>hJX4g?a+_`0qeJH!SeRo3F`z=WJ6sYN`kr>uQ%P$Kn4V4=O^DPm~1wb1Y9IHky6|AWL8$SOW z`_7$=-oA~|YGu=b1BeNZUT&X1&*QEx07AjwlHD4B-{s`4;+LMOs7X$&)8s zxpIZd%1V4bAETqAGlt1cO0}ii#*GC}3!4h`zo)IyyS=csx{B zS1(IGZ2>VM%LNb@pwsE7tE*#X?&!Y0zCPvHtD3}RWn}<#cXyMOl|_AhJ(48R-Q5km6bPUw z3U0SM?iUl73RW!O=FOX2zkWR>TeI1WUax0jVuJGWa&mHVu-R-(OiYlMmxp0)Z_(S^ zi^t<(%a$z|jYe+Wx`p5G&%6Lxmg(y1;>L{|gu~%w?PGZWP*G6<5FgvI-U)?5bar;4 z)oR(ZXAgV#?j;h5(B9sj5~n58Xe1Jul@nY*0EnW9)9EA{jiS+L*sx&(4u^x>++5&g zE;t;Hcuv5}1g)v5VdLE4@1{+gFq_Ts`><#<%HhL@(dl&P^?ItRs&LHh@?=>ic4I2b zGK!+iEGs}1MRy<&(1gQb65SOS6&1yQXJ==}-(*bS{Qm$ZlL?c_^hzJSUXNa{U*NO2 zjc_`7e+Ui99xoe<1(>002ovPDHLkV1j7VsKEdL literal 0 HcmV?d00001 diff --git a/assets/icons/512x512/novelwriter.png b/assets/icons/512x512/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ac535bc6aff79c863687c1f0766948e080d553 GIT binary patch literal 18587 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 DF^ZVS literal 0 HcmV?d00001 diff --git a/assets/icons/512x512/x-novelwriter-project.png b/assets/icons/512x512/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..5348f53d917478cd8760d0ec66a816170961705d GIT binary patch literal 20472 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 k-*wnuKL7v# literal 0 HcmV?d00001 diff --git a/assets/icons/64x64/x-novelwriter-project.png b/assets/icons/64x64/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2d49d2e559c94704a006bef99cf80c0349a472 GIT binary patch literal 2544 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 literal 0 HcmV?d00001 diff --git a/assets/icons/96x96/x-novelwriter-project.png b/assets/icons/96x96/x-novelwriter-project.png new file mode 100644 index 0000000000000000000000000000000000000000..a950104c5000bb88bea43fd95cc6747c213194d3 GIT binary patch literal 3660 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 literal 0 HcmV?d00001 diff --git a/assets/icons/novelwriter.ico b/assets/icons/novelwriter.ico new file mode 100644 index 0000000000000000000000000000000000000000..470ebe7276d232832485c5341a3595d4e01a1ec8 GIT binary patch literal 108042 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 + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/assets/icons/x-novelwriter-project.svg b/assets/icons/x-novelwriter-project.svg new file mode 100644 index 00000000..1d9e9d5d --- /dev/null +++ b/assets/icons/x-novelwriter-project.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/assets/installDebian.sh b/assets/installDebian.sh new file mode 100755 index 00000000..19fab36a --- /dev/null +++ b/assets/installDebian.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +cd .. + +EXEC=$(pwd)/novelWriter.py +EXEC=$(echo $EXEC | sed 's_/_\\/_g') + +sed "s/%%exec%%/$EXEC/g" assets/novelwriter.desktop > /usr/share/applications/novelwriter.desktop + +cp -v assets/icons/24x24/novelwriter.png /usr/share/icons/hicolor/24x24/apps/ +cp -v assets/icons/48x48/novelwriter.png /usr/share/icons/hicolor/48x48/apps/ +cp -v assets/icons/96x96/novelwriter.png /usr/share/icons/hicolor/96x96/apps/ +cp -v assets/icons/256x256/novelwriter.png /usr/share/icons/hicolor/256x256/apps/ +cp -v assets/icons/512x512/novelwriter.png /usr/share/icons/hicolor/512x512/apps/ +cp -v assets/icons/1024x1024/novelwriter.png /usr/share/icons/hicolor/1024x1024/apps/ +cp -v assets/icons/novelwriter.svg /usr/share/icons/hicolor/scalable/apps/ +cp -v assets/icons/x-novelwriter-project.svg /usr/share/icons/hicolor/scalable/mimetypes/application-x-novelwriter-project.svg +cp -v assets/mime/x-novelwriter-project.xml /usr/share/mime/packages/ + +update-mime-database /usr/share/mime/ +update-icon-caches /usr/share/icons/hicolor/ diff --git a/assets/mime/x-novelwriter-project.xml b/assets/mime/x-novelwriter-project.xml new file mode 100644 index 00000000..21ecbe0a --- /dev/null +++ b/assets/mime/x-novelwriter-project.xml @@ -0,0 +1,8 @@ + + + + novelWriter Project + + + + diff --git a/assets/novelwriter.desktop b/assets/novelwriter.desktop new file mode 100644 index 00000000..2e6901d3 --- /dev/null +++ b/assets/novelwriter.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Encoding=UTF-8 +Name=novelWriter +Comment=Multi-document markdown editor for novels +Exec=%%exec%% %f +Icon=novelwriter +Categories=GTK;GNOME;Office; +Terminal=false +MimeType=application/x-novelwriter-project From c8656d6324e16160e0a7532024b5334ef8018baa Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 20 May 2020 23:33:31 +0200 Subject: [PATCH 36/53] Added icon to README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 775babe0..9e6863da 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# novelWriter +# ![Logo](assets/icons/24x24/novelwriter.png) novelWriter [![Build Status](https://travis-ci.com/vkbo/novelWriter.svg?branch=master)](https://travis-ci.com/vkbo/novelWriter) [![codecov](https://codecov.io/gh/vkbo/novelWriter/branch/master/graph/badge.svg)](https://codecov.io/gh/vkbo/novelWriter) @@ -174,4 +174,4 @@ They broadly follow Python PEP8, but there are a few modifications. ![Screenshot 1](docs/source/images/screenshot_default.png) **novelWriter with dark theme:** -![Screenshot 1](docs/source/images/screenshot_dark.png) +![Screenshot 2](docs/source/images/screenshot_dark.png) From 36b4321345417de33ab11eb338f482717a7610d9 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 20 May 2020 23:50:02 +0200 Subject: [PATCH 37/53] Added a bit more info, including license, to README --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9e6863da..19588559 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,18 @@ -# ![Logo](assets/icons/24x24/novelwriter.png) novelWriter +# novelWriter [![Build Status](https://travis-ci.com/vkbo/novelWriter.svg?branch=master)](https://travis-ci.com/vkbo/novelWriter) [![codecov](https://codecov.io/gh/vkbo/novelWriter/branch/master/graph/badge.svg)](https://codecov.io/gh/vkbo/novelWriter) [![Documentation Status](https://readthedocs.org/projects/novelwriter/badge/?version=latest)](https://novelwriter.readthedocs.io/en/latest/?badge=latest) + novelWriter is a markdown-like text editor designed for writing novels and larger projects of many smaller plain text documents. +novelWriter uses its own flavour of markdown that supports mete data syntax for comments, synopsis and cross-referencing between files. -The documentation is available here: [novelwriter.readthedocs.io](https://novelwriter.readthedocs.io/). +novelWriter is licensed under GPLv3, see the [GNU General Public License website](https://www.gnu.org/licenses/gpl-3.0.en.html) for more details, or consult the [LICENSE](LICENSE.md) file. +The bundled Typicon-based icon themes are licensed under [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/). + +Below is a short overview of the features of novelWriter. +The full documentation is available at [novelwriter.readthedocs.io](https://novelwriter.readthedocs.io/). ### Note From fc21ce08692fa889e01a8df6fc3c188eeaee71cf Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 20 May 2020 23:55:27 +0200 Subject: [PATCH 38/53] Added a line break --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 19588559..e7bc9ca3 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ [![codecov](https://codecov.io/gh/vkbo/novelWriter/branch/master/graph/badge.svg)](https://codecov.io/gh/vkbo/novelWriter) [![Documentation Status](https://readthedocs.org/projects/novelwriter/badge/?version=latest)](https://novelwriter.readthedocs.io/en/latest/?badge=latest) - + novelWriter is a markdown-like text editor designed for writing novels and larger projects of many smaller plain text documents. + novelWriter uses its own flavour of markdown that supports mete data syntax for comments, synopsis and cross-referencing between files. novelWriter is licensed under GPLv3, see the [GNU General Public License website](https://www.gnu.org/licenses/gpl-3.0.en.html) for more details, or consult the [LICENSE](LICENSE.md) file. From 2792b71a89b9bade8690a54dad49fa0554e06ec1 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 20 May 2020 23:56:28 +0200 Subject: [PATCH 39/53] typo ... --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7bc9ca3..7629e567 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ novelWriter is a markdown-like text editor designed for writing novels and larger projects of many smaller plain text documents. -novelWriter uses its own flavour of markdown that supports mete data syntax for comments, synopsis and cross-referencing between files. +novelWriter uses its own flavour of markdown that supports a meta data syntax for comments, synopsis and cross-referencing between files. novelWriter is licensed under GPLv3, see the [GNU General Public License website](https://www.gnu.org/licenses/gpl-3.0.en.html) for more details, or consult the [LICENSE](LICENSE.md) file. The bundled Typicon-based icon themes are licensed under [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/). From fc5a7ef6a43f69b59cb4a479c32bf7789ebc621d Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 14:21:20 +0200 Subject: [PATCH 40/53] Made the icons less flat --- assets/icons/1024x1024/novelwriter.png | Bin 40282 -> 99876 bytes .../icons/1024x1024/x-novelwriter-project.png | Bin 44572 -> 77434 bytes assets/icons/128x128/novelwriter.png | Bin 3879 -> 7864 bytes .../icons/128x128/x-novelwriter-project.png | Bin 4874 -> 6712 bytes assets/icons/16x16/novelwriter.png | Bin 530 -> 683 bytes assets/icons/16x16/x-novelwriter-project.png | Bin 634 -> 660 bytes assets/icons/16x16@2x/novelwriter.png | Bin 908 -> 1470 bytes .../icons/16x16@2x/x-novelwriter-project.png | Bin 1183 -> 1434 bytes assets/icons/18x18@2x/novelwriter.png | Bin 1086 -> 1674 bytes .../icons/18x18@2x/x-novelwriter-project.png | Bin 1371 -> 1690 bytes assets/icons/24x24/novelwriter.png | Bin 754 -> 1059 bytes assets/icons/24x24/x-novelwriter-project.png | Bin 918 -> 1050 bytes assets/icons/256x256/novelwriter.png | Bin 8436 -> 18571 bytes .../icons/256x256/x-novelwriter-project.png | Bin 10005 -> 14768 bytes assets/icons/32x32/novelwriter.png | Bin 908 -> 1470 bytes assets/icons/32x32/x-novelwriter-project.png | Bin 1183 -> 1434 bytes assets/icons/32x32@2x/novelwriter.png | Bin 1742 -> 3269 bytes .../icons/32x32@2x/x-novelwriter-project.png | Bin 2544 -> 3221 bytes assets/icons/48x48/novelwriter.png | Bin 1394 -> 2327 bytes assets/icons/48x48/x-novelwriter-project.png | Bin 1959 -> 2386 bytes assets/icons/512x512/novelwriter.png | Bin 18587 -> 42482 bytes .../icons/512x512/x-novelwriter-project.png | Bin 20472 -> 32702 bytes assets/icons/64x64/novelwriter.png | Bin 1742 -> 3269 bytes assets/icons/64x64/x-novelwriter-project.png | Bin 2544 -> 3221 bytes assets/icons/96x96/novelwriter.png | Bin 2736 -> 5489 bytes assets/icons/96x96/x-novelwriter-project.png | Bin 3660 -> 4830 bytes assets/icons/novelwriter.svg | 245 ++++++++++----- assets/icons/x-novelwriter-project.svg | 279 ++++++++++++------ assets/installDebian.sh | 9 +- 29 files changed, 376 insertions(+), 157 deletions(-) diff --git a/assets/icons/1024x1024/novelwriter.png b/assets/icons/1024x1024/novelwriter.png index 537d7895bed66201aa8d3617fbeced3bc2ae6740..5406d82e7fb021f7127a2a2f812f10088819356e 100644 GIT binary patch literal 99876 zcmd?Q`9D?P`#!$*c5oa+hsaotAv2L#;vh05%1k+CnTL>4wpoS>k*Si9%tJ^6N2177 zAw?)tgCrWvK1!PX2VP*mk0RX^kpnvEX066$t z9Kh4T9}&AHqu~z*e|?)E09e|#e<9EON?hPya-Y_lNhe z=3hJK^KK{&-&3#96^wFOgVs^mCx$|)eqg(Z3Xa9_;Z#_PGNH1@6mQz#^N!1r- zyLd?O{|`TUip)Q;bVpZiedCpxYaDd7oxLV-^ahflxm%yb>yr>c1)U&a^;%0TSdsr@ zj{gQ_*LC`8#pM+RES*Q?R=x>X+1cMoLs%Vae)Y$5@Zle!mNh?q=HWL@R{+r4SlqW2 z@b&4fF-6leW|a$Q(T{M@NAFKMJ^tSqiv?bfdg9Z+8d8xy^6Fm1*PRuj%`4fH&(7UC zFvQLPNS{{6!~Zx{y$<8JdUkJq1WGj$u==k1pDju-nnl7n2se*jiI92wX)JK*+yyV8 z(|5i|Ab{i7gT^ucu(XMK!%27Wh(LAvr19VHc$w!x!*et875|%4n+}>kzh9WV(Z9Pi z9S68Rtv0UzD0+V{wBps5v*axmmzMwjFEiY$P_ZIkOM_L;?^~f;OMi6!h=g<=3Q4Tg zywGMC%Ggq(u*uARa?b{zer;jq+MDP{`1ex zXbPLJh_0UC-@LB8$((=s(^$-q{n68x`898hHk_YxICZ^+#^B2`*oyRm-2cfCpY*%r%0PXA-p|9*Jtj?V}32Od`XYHrRh;n5iu z@aV%gy+>7Lmo?+#EL9a&`=8(Xa9-wuWd4P((Jg;E`c_T&js?+x%5z^+`nobU&jUaI z9DStXUaZN(=#U}pvOzt`p5G$N!k<&OvJ~S<)O?|t^S@5)u6B1lLgd90@noj2{>S+C z;z+X%QpY;Oq&ZMD+2*lN!>?Jkz7Vwp6BZ>0B4u2Ph)Lee#-Rz_g{ikS0eb$Y#SWhH z{1>-uzfLu3{_J&l{N`|Nzo$A_e(Mn7=kB;S>_Gk)nm;LcSklX}rVfh@q5ozX?_R5E zgra9SgzzK||87q_j>7PgOeE6a#C+sL%MfiHur?5$K6#}K!J*bUZNoT}n2aKag45#S z^!xzLgXiy&$Ria$dWW989Dlg7ywCfgAzL&LGZe856K7iF|ohkt|Olhi&p`VTp(r1ETL12_CI< z3lqtQ277rT_XO6b@SWfkZ%!9op5C$5o7?wBT8|mP$nKc z=3joV+{|m5qT=bPQg?me>*bbN?A@1jPVyF?qUFQEC+`+{GT#~X3?G2mBTT{$sz~DT zeXKZ~N|zv!@?3ErF`vrAhKq>-F`uMbap?VScWy%xW&pp7UAOpo#&0dq7EQyUk@u@^ z>&Hy!M%VG56i16S@%doCwYJ$Ai4~Awv}tF<_*JsZdR|Ir$M=k4CMNhQ^H&#}VnHT@ ziz4+WKoKSf4*bMnTN0L$dL><4O_l3~iZqd0%PA9Rq8!KP71m)L2@0Hkz0^JGb43e7 z=jUfvcs1559a^s6_0lr;0t>5+n;(KN8gBA4OO15sr?Jyp4OQ3PKXzaF=hGdERy|r| z1;1zv3{BMXHhk}fq-ozsD`kw9jN^$7z`HpP5QEeAb5b?jh$ ztcDUfT#sr~^lNJ&GIaADebef+T|F&$)BG(?ndS_q_szvBtiIi%ysBKtpgSa*iV?JS z$0vW3rbrL3_u9HDVnJ)`m301(CUGckQ>r!&(8xzi`{F4>Plh_0zYX2wMUmwo+c-8n zh3D?0VD|Q+=k*E-XFYeG_l{gBo;5wQL?7|z$alxN9OXe4U>~t@9n*DH;z{;_Xv?8J91M9=P1{L;l(2x(oETyaoyIUF*dmerrEkVmj)T zE)=n|lvg_Y1Z4QU;8nE7S@t0Lx%Rz4{b%VP@4}Fxb4@d}u*lJ(vW6t` zT^kax(vWAs5m!?6`0YNG9wCnXZ0S`yy!ET+S%hP5jkAdbFIcE+*&OSAVi>qH|D^k* zpQ|*Vjb?I4S^IlMz--4sB4Nc@WO9lCwNQFas(FZr?QL<@e|Esck_Hz8q8|we0J*ea zlcmv~7;wAC3;mx`GiAhc-n%TQ`htFb$GDrF-JAF8H^$#he9Pt?M7KXLE@LcnRV?4Z zXVSspWZUW&MC_=0pflYiH4J<$=&o^!0vv5m=};F%a!r#Z5zDh9VW~PK%uW}N;9uHA z#YO?)GBS{y9I&EA6L^GDWRzZ7Hzt7+_CsRAdD z59XHO;GQ|2a=bfX@yGqNvn4GaUu|Vf%I_djUWt?;C#~_#D-NfAq4OHn zA@?bdLMyoqx-OgC_;%0xNlw-MrV$^Pd#NcIjaQon0FYS9XG%fL;lD#*7eNtHkU%zC<4d z9^Tv$;?{Wh^mBKSNFdm9%)^v8s4UJ zPm9DlpVs?5{Lq7)J-jy^WvSfrG;)x}RLZ?XlZ$x4%~Kq%!ig5~U2}RnP|3e*m*TXt zlk9j%F__d`={kb{%!S5C9J^B-aR2e~-M8q}$BC5gFRpd7w5T~=j7W9Wcwven#zGkl zEOeH-S{eDYWC5$ki6*~3N=7W!-)Z^Nbou;S-4?OLdD#mac3TT-MQORF0l`mh)$3TF zunia}b8LFdP%`v~r+qUS!YJE$n3!9F`1UlZh!vEC zHFxGaku&9*-1=}OeA+h{$j3_D(K*#G)_0Qhzc@3V2yQNweq;LP{HH%-%L1I|Yc0&d z#Dm81WwhcKr((7D7c*0p@CjljXR@?08&TFm5r?#f)?px%nt~t#{6zRs7YWDD+_?L^ z4cTo(q9zxk$eAUZza_M@oAuEd_7%%Z(%x3_z&+i*WqsrOYW?^7pVCtb5KyJLd4s0Y za;=Q#{^)Qa*5(yoQ>&1*PJe*){oY+fQ)0j4{fUR!v^WKbk?8!Ga3p#X83g)j->1{T zo+t$2kh$ZGxcqn4jVEAnGb4e+{}i`O4qX58h2pwvW3VHIbsecH6;F%@do(Yoo8^Af ztWsOiym!_kVo`J1E^BS~`@Qc+3MnIc#5H+zW@-ie-nXM(&{y~N4Q6t8UyxBC2G*`O z5`_9_{RPL?tQh)e7o-&zZ(h&#SgL({Jnd?WU5pRY4||Moq;s-HeP{l$l2`tV#^ANS z+aNlcygk{pHTl_q@hgr(ItMDCv!@l zpVR0UsDv|F&=V(=bQCj$mA~`0?J}48nfH9LhfBJhiws)7_?vj~QA_z*#>}1Z6aG%> zb*8`kKQ3{Uhs;oJ3hCUW4RL!QEsPWE`<|&37X>TuEP`5NR)1WNw9|#?!JZvvmdLXI zvGvQMlcC>6{MH*y)XdFVcf9>Nw%W`&Q@Z6!u0L|H%t%t@(FKo>-+ixXyfyUQk!9N5 zNcY?akrHq^tAvfR$)3uzLzzx8|F8$~BWkbBVB!(gzOH3r+zdQR_E=(T!tE$P`kXRq13wJ${&Z{t)UwojrPAf4{2F}^`pWP1J ztPe!L{n*8BH2=}RqYTlvk#hKTkB!{3t~2P7xuV15-)x1lTVMBU_+<#{b~QAFonRok zDPpnjXAQyE@VY-G=hE3ENN3)k2jUaPXw=kvM3aLZ8saiPqiriHd3K< zX^*=1I>Nb+$$w`sj&48;MY}E1Mj!bx*_k4!3N0ecNW;Y7D*An3qd>vM(N?_B8BZ*= zzMj*uWL$KEh`FPmX;EVXK_Yd_`y>g3YD9vammUmE2rAY8+|T}s!1C+S$vaEudevNB zMVnq6U%15UP#LsA%cY%gXz%?`&tpAYxyAiHf60p*6*PS@LgVyUk<>7PTKmF!kjA6k zERMbJB4X8CZ(4aJ8gYjLjj(VX?11hvGZHY$vR(GlM-Zvxzyp}ao)R?c+`LV{BVBY0Yt`L~s~}wAK#Uz-6oGh5IbD`7 zb0ZH$^Wos2_>A&^O5Wrk@LkNg_`NIRy6Ti61UHH{46;H7w=H4Cd%mCLg&`O-g*%|4 z{zK#m{6nga`1SnQ>BYD;!!*8#aQMPxzvx+WBIqAEJGUDaK3Hl3^{NiVsQ{CSg1)J$@II4usvA=PVXTdTn@~h^O%ObhA29gi_W}L`>=T zw_SMI*JA%3P;%?o;GK=qC zp7Gr|an$^w9Sp8C#ju3(&;o{)9fp`o@y$#oMmNr4n$_`#&GMK@RCt6AHp)W2*v)3@ zOYfiExBqG%%=wk>!aJKzyW2<2uI1Q0C8bCQ@8UUlysdbsGlT!^Y}MG;>f<{Xn^Dry zpZrw+#j2}MQfUrrpGY7nEDY`Zn$Y$23td!PB|*1IFn|5%1(#|b>Kx%U1gs=lN^SZ$ zB2qWVAwge;jLuy5xv^4uXXkZ4MeO}x8O5qvyBueFyG89yat4S|l&JIBYx(=NwI$lE zU^zBk%Z3TtFpw67Vlz*|T|bXVMBHg(;pqA*uoBlezQ9xQL;Usc_#qZ2pRhsKYsq`d zP(jwOiNJ=L?9y!@;0Z?o?U6|CtT{d!k*&T&9ME`{zE83NT<>vZ%RYX5dtJLGEWW1Q@kdQs`w{ zE;7FLOIW3qM?(}~A%mkr2kOYc)5IvXW2IQN4@a4YT6*8$Z(~U zf%nk9xG^jI2X9Rq+#czkCp}Yb+Q5}xgdIoXI9Z?Yw>+f2G z4FV{xJ;B$8i)1I4&dns9JWEcr<|O7@Yk}igJdvP|#I&)Heo?wQ=SS}4b*b!5`Y{cN zA4G7FKDqA0!g!wX*s{z?1666=sK<(tKt2tRBmSS)fAwUAH5It7yL~MiUufX13VL@d zQXPPb{GTI7?D*|Z98Np46^L49oZL$Y6OUx8kRbuS_b#KuQL?Qe&T#CL+|Mo28mD_F zeZz(I%z*YB_scK-C%wEcA?ST+%NIQYNkdQA3qRK9giXn}HsVlo<^7OFSyucHw7Yi9 zR9|wGkbi5_D*pZ3^rh_IU&l9_Z$^F?+_D^c^5tXVSDCPMo>i-Fy7PNv4=3%$F`W=k zq{FetFf{NQvE}}{ctr1R8%HtQU958GenY@{~)zhgh;LW z5AbL*k5js;bUpBES=IS9{*B{zc1O{J{L`CmuN&ws--MoJU&FoDmRB|)W4wcS9L{X} z8x<}-t^!EjoM;l&n}~V1=R8ZVwToq-Mff;^;gG1hO;VM-bhr+I)zz7QfK?z4aU1Gl z*-Io(nGmu|s|jS$t)#YI;2-|{-^66G!3bn(k}jWAd8|d#azK9cPyQm^o1L16B))#X zDubUAGp;`2v2kKx&^92(zu~eJS{LrF_|mXJK3g*0@q$oFo9d{|afe^0osJe}$A7=y zu;&p{2l-`&)X<{l2THu<5357Vq;5i!~Cl9|}yN#l|q=0`W$)wU0Sn(d)i znQF`_%?8J>&#nyeUwBhBK3}@e#0r!sgxx+hLQ}SP$L4Y8EuMV;GISJI|4Xf`~hwUD|f1WJ;!0yx$M0r(f;41 z48^}&uf%1ol)}n0Xr8^IjFu=EL=3t*Sl#P+v`gwyvK9t zSnK?)t}L?+IO$@0RxXQj1##IhPwd@kM|o23ALv`$EoJp=U;Vs$QuN{S?Pn3wkCHB^*df&e zwyRdMS?e^^cU=6{F?tQOuWBX$^YR_K3-+gyQs&Lgx^WRrR_DIa%J3X&!P@$YlWcWsFIdb;Iga6tYg%=nxC$@lrg7c!F_TNeK@xB$BzFWB&zNYP`9gajCz zU}9MDrn}llS)CtC35rMm@Bsu{)h1?Yk2ElJ@OxGM+Vl4N{l%o);&Gd?3`CP667?;U zJ{hwh6>lbQbv}fooXyKlfG+1)^qr8CH8S(e&J~wWdRw}-gd)$wdK6Nf_9Q|UZ7_ui zGC`Y=5mi~tHXvaMMg(!TLOq}Qp_Yk)9dlqJ*zfU&K-x$Bh2Orsk}xt+{C$}{UoYqF z^n*x@OA!u6Xh6(|%eIeq>?Kj9@HIQ)dh)KL9JyuUEls^WF0S%#=+I>u`xg~bi72|f z=bknhD6W`0OVuZxb0~Q5u`KIyn{3ob(`fIz8hC4@i(Ko^tR4Bd)rh0k`1Jq*_eC zkq&Rals`%01v?P?^k#jos^!gcXQW#b_u$vlCuu1)_imw?YSTT06qH5+HU}Z`Ug>FO zR+noT!irya&=3P|#!7$kaO80l;paiEW3xr^6SuHwai?$Ht%SF#aUk>XZ3~UK=YQGY zE_YT)^w~f*IJv&2B+b~5rk}d_D)6^q?`Sz7?{%}<8nN-}THG>x+p+oMQ0@L9auEqT ze_#gSm{y;L;uhoZbg0`S^Rb&bI^gS*(~HX5`CXRB-aj$@Ik25aCt)7th&j#Px^n$E z-t>mu_Q+jugoMSKk+2fqWBU0_EzJ3TD$kTSBtgHarsJ#L`7aUK=o2{ldtB(5E5*P8 z=16dsv`N$=VZlF65wXtsIn!D(UFKKzv6oN+{vS=h^8lkFW{&<-jZLq35;*DZE3a6c&>~-53+=y?rG;5# zc*k+$NWC7+jIX#@f)yu~wMh<^NcnrXEl)Vd=t7wS6A7~Tjp=O1S0{TDlMAz?hzRiH|QppyP9m4{D0EKyS}=_oIoh< zLre`@5+wJH8{1D?Wh>Zu)LlqIv?3kJPZ#OYGiV13`suyXaCH>1MhnylUR4p8@tP41 zt!eKI`E=n_GWeGlK;F&+@NM{UV4bP3YE?A;+>u%;EIwn_ud=%h8Oh=m!&!z&ax4yg<2738m=hE z{5fHf)?dEwDR)KW`_2nB_)@oZJ^a**E~kb)cG)g`y`hLv*Qw%*K7YbxW1>LFsW6k; zFesHgpZdSAEatH`mslDB1B~|r_ahLJ_LLlYsCas-MPixL{$8(j)9tsvod$VuPlaj4 z_TwqThiL^KeJ^FhPm~iYJVI+7q)4DipV{42K3>W`rA?8D8W)n7wG_qO42YP95G004 zUU znmcGDL2mJHH7|?MjV-N4C;IFC)^4})soDT)Nbya_SCttJr3Zm&$_Asv9JMlIwjTbt?gBpWFkdTo7974Sr#KUyO{)XD&JJb6Px`NS!Vr3Vbzp^O)+`9DPH)eDT=e>@~3yMq=|$6 zut4s^8aLd5M{u@5ou%7vMf#3J0-Z_--FWZkMMm@!Yk^Qfw27Pm%Mfua^mTHKTYJfx zjgJ(OoU%S6x-UJW-G1f0+n&qG0_3*D;V0|@Bu0g0?A6kRbyr1Br2M1qWG$3z&m zYqsC+8^)M)nLkoh|E z%f#0g__j>O!q za}L>BWGNmLnIa7kAF&#&FguivdX^4`26%FxzE`Fg4TP6AGnM&KW99fbpx*8s98_I% z?vemN4yXRBz?m-D=#!|UM&gsodvEw5m_Ukt+S?brk3b|vmMRml7p6yG%%|VCoJRKN zybnce)5a%?YAm0w(;XT9!*JIlPZVG6=c|Ov^0^VlbXLVtl!QIwP9_8T+PEq>Caoku z!QPrnC;578u-sAMx*@s22ZH8VY0v6VvXG|7RjK-$>uRbd(QV*xC1pg>Zj%gpcJIb> z{fs^J!b6~V>&wX@+Rwg>f8_0;YU|YhlI@ad`D$aW7G~OB7N8PeD9nQ=ciHU2Q{LK@ zg)^CzFJ;f}f&n}X6?EzoF(R4$Sl4=w%G1=#pLcsWI`hkhnikYy_1xr$ z96gaLQvqc?C}c-;ghhk(6)EktI8dNcm}1A%)AZu$X-4o)ucG_ApDd&D?>+;HU(QjY z>GHGZWU~31Z$GEVqgJ=epUndZ2-CM-l56`+rYoQLzNGEz*ZViAyL{D1M|!l+`#Kpg5-C16m_EL?J%^|8$>4DQ;k7XBJcQpti^EE*u2#I%eCXldDqUpxo$zAdl z%}M4j@}+1cTMgAjxbWIb0_5;^Z^z|g9ZbvQ;k}=onPgCaLyZ;Vcyx3Sb9jjK+xO4T zprAfYo@>H>@SF@O|5)6YdF$UJ`TR^C(WCSo34=>k5vNLGM+|Dxb=u)bpE|xiH&rnUB;nQs`BIQfj9>|(*(Hs>P zqL;o?l*5F$3A5rSl=$VKK_qco77+2AN2t|b7-;6mkQd4h!cROjt!L`8ya%JdL<2dB@LMG6Awv9!O8u`qEwFEI!phB*e^TkM#AXG( zAA(kFKvvg;f*pT*g5&N^eAYYWhUS+_r~7udHlx*6XZCxu<~}}2#O{CdmA9U~J~sO8 z_x^VYGaCmX+KrKLb8r5_yFGSanCW4~kq*`Lx@W!##K9Kp=m=l2Ak_Thm7t&0ukwTw zC}4U@M`L{#bx6~L`P2Lo{l=WbI#>4of-HQ+`>&PRsomxL^P=r?a0Xh;z4@qpWn+p@ zDLw{te1P=PMVA>!U`a}DdjUEiM}K)cQLkm6>3ETooFTZ64VaqE$x`p)aI%N1<}bN8 zeA{)C$?mD!p9gks!a*!ZIA$epg7WmNoyJXNDzRMAZUODn|phi$B)(*)hYz~@x=R$qH@QFq%Rde%_H8k?L+!+FBv7Z#&sqpHtxBxkAS7 z!uJf=!@nYZG_`L83IJbydVEF0ACIDC)m7eWX{X-twO)AljfrN6H0_?~cCBUAs6)DB zNRJGn>Y+4$_4R)CQ@qjy+hZosZBRnlZaE}a{>^Vg=2T|efMCYK3An6!B7srkS2|QM ztjdWVshPX;UhwLD#lrQ;ma`+$E_kxoOgLvbjH>bu8srIkjU%JYr0FHGi)3&auC_=2 z9yE+NZ#Obm5twF)AL+nksW_4HxfTPG93hbv4);z4DUc}r^l=rAb?0J%e4@E%>~;j& zZaY!U@Do*M_S$iaJijG?jRb^*XxV))80v*;W+YVC6*%zJYkh*S!_-22uwk(e$X3Gs zr$n4^IhV_T5*|{A_SxpM5{b5n&R!lX+_zH$d7E8EqdZgSQR}RWN@?{oMC$fTYQFtY zE;iKq_mBj?4*S>enJ`+^bdgnlB_0^(oWoDZ8#2|GJvaQdy?9o*_+kt*4BUYx%;SH* z^yTNevb}pe;*B5v2DpO^#)IiTliuxfk&K0wrlF@AH)-&cYnCMPt)i!Ja=9!waQ|~i z_dWdQo#>gfb%RfL6sX;`0Tg@1XygOBfU7)+_utv{;6U7D1`eS^#4N|#KPQjQoG11A zGMA@d04EuiC(HxKtZDgc(3PWCP+>--Qnw#m6GkNU{x}Bbyu=)45NAQdMV>E!Yn6xr zsTjufyH5s3@?{X$bXGVv|3UMBq$P93T)bX8cDsibz5346tUr@C7eS;F?V$4v?p{A+ zACAgwYvFFX5NbVeqx0TOFIaV!MdcW}hA!B=)n77WP<3$Pt#y8t5zW0f51IR1ARve8 zQ~z*)$)N9IEIB1=@)Ch>zTi;QQ(`+BX$KOWkJor#d^{K$>3QXOxpnY?wtsJ9h9eoW z7z45fD4GU6s+&5YXCxC3qCJc+o8PFDsa-TEu;z%<g8X*-eGSNfN1z0oz_f`8yE0n9H*Hpa`A~FFOc1 zi?kQUTF*NB>r0>OBR3F=()-IO;Sho53lo}bOE)$PgR**vu~xY{PGb+pi_B{4$McuC zFY+)T+U(WME0JW3ZSpjfD2~?BL1^UdT^|Q_u|ccKQ4&@EYkzQQiFv9zuAhZ)#v(=* z8`z5=MH0q6ulU~$s3x`!J`mf@LVnT1UU7E*%RcVLeCzAiUvcD=rjC!!x>U12QK^$Y!#-mNPvP zd)H=F2QK=4oCaMd5%Vkf1g(Gs%SH=ZeZ1_uM|woerD4=*M!D;R*?|$2Dk4cg5{9TW zHU+W^{LTYJs+J3EQ`YQq@X;}3(tfV~Gen~PaV=ova?YKdrrfEOTgvkL?B-R?1Jbt4 zQ=XI7tEBEZs=0={pDvKA^>~G-}dCe`cKJ+C3GNs8kT&NX9tLbAc>>pV-aH{2Pd9l zxSNQwvlLHl4%3_M)Wr4YueHL#$*EpARdunp`}0Gr9OE?fsBs z+uxcPP4PM zOhQDgjXfONpIT)a(Iy?$P(CdSSDbA!5Uu{#_GSucwWKTJW%-<}3n4OgIv7Bp*tG zJ+}OrNn?}slI=Fu?Q|7U{KffIY^K6XQPlg=lL}yZd{ejLtt|DpnqMM4PPUNw9zWyj z+VHbG@AO9sVCPdG@M6z+c+jk0k){=JIFzL0`&K{(o8j%Z47aI_7%~4p+h+xay8P~V z!0Rr{*RbpZRYH&#>z$7eY4ep#DYeli57pn0sOnh{pJWzml$~`aTH%w}{phFCobKR2_bD0=sztPyA+I z)s(mcu#2A+n_#7bp2kMPy&Z7nWU#h>-!iq#x&dqd!i+9Uos_ip+VR&3ClhE(2FJEt zKe7sJ|HRzX<6fyI_mpp5o)3W*7HI}t!iir1=qBzW7>9HiaMJiTVjzbg02uKk6&h&6 z)(%z%mj_3Dv&@d^`cq9{SYa%@;b<`W&@iBJ(^^S%1Be*~Ga6YmB64>qGJ<4D9+K=^2GRGWjCjho zJ2us?ERjFEBQ)oX9#2G92|6=7q26RCk6-{c>9Qs_FLu4P)EtXsS@|^%0WoU z@G^mvhJV#W@Ta_zw-5}NwPH3Ajz>S}qUao)l4((5*W)X*og`&e=i%8Kn`OMQ7>FCX zGI>l|0Cd70rF=76goNFB3*nF(1CGm!$7x|H!-xb9LU`=?Iw$#ZQ1J>1+KxGIMTJn_ zISd~^V|IcJDv%Zez3na{**}&Kt4JD*%CI+$&8M)Na+o2k&nDdBkmq23paMdrlSyGj#WX_2R=YpCfMk+clT#r$-7pxx}y z^cv=0Jp^FldURSs0tW(ZbqLyuti&5k`ER1g{UDnd&wegdtI5eceLzkvz>rH1K88Ik ze-$=n9U6WAF@fIhm}bK3Pn6lV3nv9TNOq6EMR6N&U2^lX+ip&Ivm5tbe0yWv^a66% z$DuKLI~OwGlw)ngQ?{+i2HM0dG9!Ev1Izj~7mJMmIeVKUy6CugcgVfVrl} zcrG?v$83-Pk@j(ijdSx#<&6LpMCR8EZx9*xfW0O=<+exGf7WT;AEtY%Ka{1oZnsa7LRRLG;KNA|_Lu!9t84ATw=L1Ohcbcgv5!Jbw8y?q!#t$TFdV6FoF&a4k8|pK0gIf){WXs zZE%_1#!)R(`Q0my+Ne4S`}ppLq0cQ3UMA1S#ewn>2e~XVu=-C3U}Y2X!oIlq;}uU1 z5uidyfkxFK`;-*sm!kj+&_!^MPE+<9?A9U|b$FAotgfX<3l)&QN{#`D7IxlKyEVUf z^NWc92@}9mj;BCXr$zm|Q|b&Ubrf?n1kx$SO}N(MI`9f<|We)=#{K6QlmSH5``;DE6iJM4o|9Z{e`BU=kQ zMw~EvM5JnvJ)l0=%uUQ!ZyCwuBMWC}0^YeM=M;3GIJ!7;fNg@z(1p*&4TD z4P5To`xl0Le%Uu<2B#GU*)#_rt8tEHfBHi+44VRIKr?03>0ey_f9L-aJ z;14#|-Mzb=Bf=>VWY7?B(9b6L-)JnVy2W9|8M&*x3!ZX%L*e1cPTuTzV#Y@sM3#|d zU@GP3yAyXhq4ss>`mr!s_iWrX&O)e%r;DsUS?sWVpnd&~=al9F`RKtBF2~JTLuqd~ z?5uB3nN#ww?X^JJRTL?O=>_h~e|$!R6-mo@>L%ST+RXd@J1w%0wzpA#Bl}44Rfo9MBsn@S4|&y%?gW zsu{=`-CYIPsYE`)nQxgGc*ribA--dOUF@uLqd!@srVx;;1lhy|EX=&&MXje&yial^ec1sL*~QrxhIS)} zkoc%V!}g=y@zeuiBS-IirQg1i1lx(}jhp=sp9_!^K4wz9lyKGXnh@oQoG6iMwA=M> zXr#PHzMcc{pzL^kr6$0)qdli28|3S!BFMfIkUjG+G2C!|>prbzD1f;WW!H9C+-9Zw zM4T-yC=_AW)kt~^&&uJlhadN`U4<+_cAD%G}RT z#L0R&dhNtd^jWW{?8H+ln#4nBQI(!);i{uhMos>iT`@z%M%*|a2#i=L_w0j24~|SV zI{S=-xsH80Ga<*)_v+drsfb8@{lhw|OCC2I6w6Zxp_r5KQuvTAq`WVMAL31d^xNKR zFb}wR7#dUr$jlvG#oB;QpGSLs(d4qdZG_sfgaCLbWyc}CcqB3sgOFwZYD^VOiv7J8 z6bH!mInaX9lzO-8N9|`gKPmj%90zLQ0I}c(4nZBleX^Y`gJKH%UTBJ=ICy$C zCNiPb5PIB_dsp*P6t|!%b9R;VQ$s{g0s%?{CYmp-;R=*)NDiObg*QDZ)6JKBaChj= zyU&}xCBC6V*B5w0teXhSg@g0G*vjB$9!PZgow*JBznr`vp6Hq9A|4(77Dj}3_LMz4 zo&>N;Ae%o=!o=AhN@#%{H!*p;Ga6&dfjhgNkcm_;IXem?Gh_uCVxGT_w&A#+Df*BM zy|{lVm(age6Qkr0_*GUDsV6FzxA~YzU@^rFN}?i|(`I`Db9x2vr1%gfL?RMAdkYip znX}Jte*Kr-CvL?h6N%&_8-pos!X7wW372Wla*qn88A5`3h=Lyx%j}b}au%SnL)e*~ zly&h@x^{BPe24CfE0?_d9GXO4DR@hGmf|e|yH=#lmS+K3mb6JVCQ*MhSKtt9G7!)$ zah9U;-dDDc=ORECGwLNIfN2HrHd8D93JLx*&`k2umIO|uBCi*mU5-C{R_#2go|2?a z#7wPvvjqXLu+UMNs7d+-@3P(6J^#k=7QFm)%X{I>@)Fal-!mlLIa8B0r_4L#L|*j1 zB-+M#Kj!2ihp9`jDwzgm8J9`}YWB!E1iH6Zte@huW)x3mhQ1$D*qu3H}5 zf@ybr2WfE0bW7@&r*`zz`r(gDU5-D;L?ov!*&3RK1gAjPp73-NeC86fUHFjZEyfcw zrWt~aIDaW95MT4^s4@x4o;@x9mD%D4glgTc+)!k#7k{3`WnFKBkZEwK+Q^RgcX{!o z*x>v7BxB)T7}~|efD4+b(c0Ti>wk=w3szIMBaqeSOOZzrz83^^fbz&&0=KXpHm{i8 zrv?$W2_pp~J_Y5>URoY&g=dwmE#mxzwYvkAE8bM`=Un zd&nE(MmYRHHh8hpgbB(K?_G~b%qYDkYbNG^z-T6yL zGNl&&?FG2VYRquHL=I4Lx^Iz%$y6QAyhuRbTE6zhpWl*jWImd^qjXcSYMF#x5A*A1 zf%oxHbA@dS=l$&-ChyR6Mys@J$QW{kO|dDuBrMn7l9)d;=_DpAL8M-XBt@bN9jzch zgK3a*Tto_b7kDbQ_-*MxhCX1EgL=Fih#=aJ-**v2Bd`D+e_{>%oYS$48;1 ztk0FTREvm-S}}JV>dV=Nd?k_C^ab2gc$;5I5g~J8ku{DYMEI@M^%Fj~5&7b8JhB4UjPRE)Q+BgS>7ARN|=Lxjw30 zn+%M%dTKAwp?h1F<+tPcXHR(s)Ak4hs%c#$8F0y7BT+Po;x3;y^v3w75x3?q={IVp zD_&A7#QXv_1jr>QMBgL!OH9Zzw6*z4;7o_tFkA|0KI@hlD+lLe!|GZ5Q&>jZ$8dE3jsw~jn0sSj<3PJZS?-0bjuoCAEJl)ZA1pqo-dKxE|7kj+dMZXfu_m3GbZi?~eyR*F7 z!_p(ReYY-_Zq15B{sl+21znk2oN%au@MfZO#2ioTR1t@yn2Zx7s7|Mk%e~aO8rQRd zEYpF+pI5 zHk)TBLhUTDyveuX%%!|{nm;-w>hvkL5c5w0syXYE$b4CUm^+~3Hs81*`6 zyeBAHA3ZYZf9{SNoFky~SO56_G>Beyb|~ZgA#ngnLD+G``nXkb3k>>R3Nmr%ZMcqR-r?`vs+V-Eg+}wZ^ScjPnB-vbR?(T zKQLk6P2DUyjz_Rq{$-dLVSiH~K#PY2r=PTqoL`RsbsfP3X=BiK@q?!ee~>5&3BRb{ zC!}RrUexY@*KKgfK)0rOirWWB{$%*rY7gFqXRoq&SJSRmc%YxVvla```Z=D71X4|I z>t7UL1$qAL@ZZBiBps?;)dnp$`{eWiRe=_u?RRJR;C)ClXU*78@vhd3EGfJwd+`tE zZNo&7_iHwm1SrI^!RffMNt+XPGwTAC`nNNS1f$Pp<$IY#n#XSr-)55$=cpLb4WdMF6JpH^j zp!xfPILES^P-ug-Rs9gdv7dA?z{FKiV<_~YoAR&56BoGeOz+au6oJ6Xg!Lj03`-EW zCS(Pi@1H@x`Q`m`Q;Pz=j8=70^7P(2Zu9NKRZDR~_PFfhKehFL6fp?Ct)b)OApN$+ zQe)$Mn+$s4333uoxJaPWogCpPVgpnG#ov7aIUk?)rpNARhhHEnd7vzr{?vYabvP8= zsJ(pNB+kFG7;L(^ke#uTk*AFX8qkiiY_V-3uP}qma>FDIzs>TLgoUXX(Ana{0(^`mFuZrfck;LwU5Cenb}omc_u^%wwLdpBw<1@qdew0;eg`G zfMiYi^3~^M4t_dVHlRigfviC}tNm2)>#~I?{QtS&a8=9hhZ4^IQwl=7P^hQRch+3<F}aPX*EA-rd}9PIau8+lbBu$?;QSZWZU>q;Tv7Bsx_L31UEp zqu}UIVG9}ie@uOMJXL@E|G9&E&3o-x_LfohytX7OE5t=bC^LIpWGC4w$$K$Ki z??E8GVztPleTQ16-4gk}W85_C*{cK|Cyjfmh4h~Wy1~MjIoMpy7@({HxI4ba03Tfd zNQq__C?YbMcannDak1dDWF&hA1b#*^jbX^Os5Pjon$^r-EaGa`qNQ0YO1;_ipAGrBpMNQ?el>_|8aYa=>#+T_4 z4<6!E;a{x2SWpAsUB6_SKP_j++1hG_ZZRLlhyh~>j^iJ~x}8ai@~=J-5d^!wpZ8tn zkQBa@CH9jq0oBO8{MU5x**Twpr=~@}wl+55hW6JvVqV?8-6N}Fn_-ve%)|BmpeArk*Z>h|-IU>-W>|r}xOon-LGh zIqhuJ!aPX=?OAmDE4>}VuI=^O>9s)U{8RHY+1tB7!vXpcN(I^C4=_s2i)2ub@sp?z zIDjSzAH`A+~m(K2Zt`(*u0QhYFBDI} znp)B1*ATP&_c0Ko7fT0cX)1rd?4EpgUFP@*9KNLJZJ1eEzO}1AA0rM=$Wd;-Fq*}X#~R?gX;D_~h?Xz$mM+I9wv|Xfo`CtLWRZ-fg69t&w%V}Vmp#o=$zi056IJxJ-8zpQa(a~9Z=~-U*C2<%~1&7op&^HGUQf1-Z=MKSl1X@$CAN#5T+y4dL$uF!J%vJ+t0I6uYHR~G8F{_t z^|8iZTRm9KCBXzE9?9`r!xICs2~67SbCP`Q`QWPe;Q9&KwI zW00cEjK}->wrzZlgu?yZ z3Y!1}61)Gd^wNn^haKuEr$A_x8y&H-5agHJiM2+b@`^bX+BAca~#}w>+v!hXb>}46{5t(WyAC zc5+;;7jN13wnYxv;>^kQ_(tXL?%NZ-FnkjR8%(4Iy+-6HZoOyJmMMMNovXPDYP@nF zN59U7#{TH3mzJu`f_znK61U=^Amhg2;#nS(#XgR(-&go5sHNbG1qu~nzLAU3Sehtt z@|OaWgQH@Bt||eMum7`(A|Hy(iviJ~8SifM8^{^{%mtb;2_(92f&=FSpuOhY^Y5J| ztWdoW60jJ5=2SxIgi$Jn?2a0$>=;HzUez_R-BD8lfv4L2RMg5Zm|=9P`nsj+y~O=U zzgMR-lfAXUNH&WmdTWbj=wS;5K8-aTqL}%v!<@tv4)H|;ct(Tk5rE4t_9~rCjr~_a zAYrN?VdM2WcBa?(*qr(TW(<5T*3o^BY+gtZ8CCHW`q(L^br9i%4_fQbaTm&hl4#Gc zcZ`{)U~rAY5Pl)h8R)6(8#un>0=A&>XQt<@{E#3YFh$OA#UE69MCX4b;WSSSThrNU z`eDAtiI*&f?87X}Nw;dU<1cMez90S)>W{DrBTgqz9^V>=Cnk?geeSPSi75bCw|=dR zaL9DV`!Q1)6{qKmCCtb`3Zg+u8kGs;P|C-WOdqe%8gXH~_UZc(o7%^-K~I&pLS7rH zm;{qp4l;w(RC-Kbu&mpBlA|gZH5KkS+O&LgwCV5pwVmV6!yFpjiJvT^?=X;Zv;-4( z6kflaxIkHx+heHHU~q6CH#GdOBQ*0 zhYl<~T}eF0KV^T^7-}+ct)(GZ>0w0Ui~Q$TR~yF>85@6T0eo{H+L}q3Vw_2pZ9G#6 zaaz*``kSN5vVN#faph;(0l6IrFig<0{VVejOyCl3eyFcTKbFP;UCDPucR@!^pY?1x ziJDZdey*Dm%38@v02`NHFt-|$D(3Js?3h=p5@j#{ku_bdL{y$ts%mY1X_q@l$!i^6 z5XYpvHWH4}qs6i!W2vCnX+}1<5!+JlM`DokDCRW9uMveoLC1uVZ@2{B;QNacYO`emL|I--tHCaJKj`Nv2FPcEB1gi)ihm@ARnMG8n`TV11KOK0#C#|9mD{`ffZ$phU`pVP)A*a+j7nW5C_++*fa?>=Uz?Kofr4e)doito4;tr(XIj z47>uPrJ^_3Y#jiH(5h9yz0_#u#F)b#AK<<0*eT)KTvR*!g$DT3x6RtVBeKgEL{RspN%z?;YC#D#uT ztgj7GQ6tG?ofnO_x8_~u8Xe{!e8@FfMq$P`dQKH^(9%AIKN6s&==dh9N;PRkSRBZU z{Bf=P^Ke0rMpN}im`!vzA+7vkcAYw|FLSYAs}up|^3}xAIBJOK{6R#hB@)d&^67CD zgb5f#10KU*Q&3>F1das$#RZpt5v-#cc`?QCs^LOW>*A-E#_W#ddN=<(bkki|>NLr9 zd^@ev=~ZQDmM^UUo2fXyKUZ%us!!|2OV(W|^r2or)XMSC@$~1`M!%Ug>GIZkrbbc) z*L56_zBb8PaYKSli39%<%^9*yQ@zndRT}gF#8M9P=QGhJZ=|iPUMXiy)b6nVoY}le zb!3>#N{FNcj!xgMd##mptU#Cf$pT@>kqa2u1ujmb$?KwLGcxBFM#zn$iJ2|)R#d4| zBhaY9w4R*_W0p7>$|H2w*N3(0KN$Z+-(>nC9SSzac?{0;h=s z#^1B;P~VjB!OKB#8RA7hy4xY8W|W1qZ?9Miv78OO5>%)c}Z=OTWUpL-U%U z6-0V>S@l21!^29zlLQ#vTpFVKuCsGMgQf;am&-+VQsC-wZ8_7r*UT_ znd*fsv^na0tS(!n5TnQ;0C=OqfhR*_TyLYMBZrl1Up+jieVQBmm`AvQ9=DJ6n!Z?K zdhcE$Bhq4XNteub#*Qt^GW}J!GIOsPxwYO)MVv?9+Rf5Fl|Se)fs4?leZS>Wj+Tx) z7WO;OdOG(>GN~?Z->g=^Sck0Y{35qowaIW1h6`@0FIe2a&MsVE&5Vo`V`U~NNJvKDzy*DlP)ji*3a}T8YG_|(EbkDostt|a zb8!{usT|vMESMIz^<}TGQtAxMb!;5bFciwZek1$GWjD!NZ{3s+kxzn`iLF12L)o3e z)(Vqr6?OY5zs|5gI(iUAJn&xDpGl#yplcPqf2&qKNAW&gdmO#*)bWSmAiA^enQx&b z9QF@KF50lzs`aj`J1%{QC~a9+7>^`|D7QIgR23Rv_pI|;e%Go*p7jgM00hFbb%t!N-aJdMErupn4GiC9{LWA0L|2xmdFB_r>dY`{;gN?<49SFmv zj7`IG4}kMzsk*V_xI5T~GzL;q4Dlsi-UJsgpnk$VYDjANfD?WHe=U!T~f0Ddd21m5h10dJ@616CPj|YMGtK9Q=D94%KUtKgJ_wXc zeIu9tW|_vF#u*Gw961hA{@ZtmlrMUMSW-%&q`oG<{&{vEVl*0HIWr^daGetqI5(Rk zayos?no?+B+S679AAPYVzI*J9YO+^173Z^ZGaa}IbL+Ar)| zS9l#?S}wiVarnKwr30jWvsWupoQ&C)r2+-xZ@vzWEz8kw#Rp`gapIYDH`Rb6rz{PM z7G_@=t8;@1rsnw7N46TD7sx$;I6r3x!tupWW(;B31yGmhKvVAcoA?$>P;=qN#t5xC zXYiHD+SFekcGzPAl|}cC6Bj}UKyBZ%MY%R!?0zF;@WE=CwoLt07twd zOB-@IOa)esS6xM^@Ho;6W&fh3yU!i25M*g?JLM9_WL4s7+=FSyb;Mc@mp;MSEIy$R zTeo}9d5y>ObDWV;j`{!g0Q2m%o|1vcnY&e8A9KJkz%g9lNf3^L>)>MJgQ1JHLH1l=JtRX1>^c2L z3!v5YGj}3O$+0lVtOZQsR+m7QUlrK(@-wG4f2U8CpPkDYS&epE!nV$PTM_FpS(Xd%Oz2!uFFzd5tIQ{-tFkokZpfCFbq5t z9GgC)9h*KRPw_T1>()(XwVAbJJxLWg$-ig9tmIrV(x$L)fz0LrAa=EsMW2$|gPIf1 zud_Mw?puExvV*3+Czo@Cvrf#x(kWGBqU{O2WIrgyzygrg)G`;YS>*fhHW_5?FaW9ku5u_Y|v5Fg<2@fwmRmttToc;B3ajn?OgV_kfQ-)msKZdgtX5t(e9HUgl z&UMID^0n*CgY(`H8+DwL&g${B=F*E=&Y-R1;m-6#tH?W338yNI$EO{t-ssHMz~&A% zM-Gi!r_Y(de54+M8bbLm6KN!f#PZG6gG)U*|Ck=0m2 z`sLV}Slg_=I^1I}wNae9BsaYN&Fgo(UQI{e113-xFS^!N-v5Kgq%X;B4;gYQp27_p z*PQS>!Al|x1C+YqynUDy>iFe|C8&f3ZoW&X+WlBbp*Cb{+~Q!}U@+r2MD*a;nG8oO zZv@4@o$fSgM)@?1nv*XL&@UlS3_gK__Y&J3oBy8lc&9NbHhiaE_3DLE&#(J31|Y=TVX4-t44vsN=b0QM z#94fzwsKw0&?cu!q$C5RSL*>&BwpGIRJ(Qekc*&8<#afVOzpZB@MOUjb*-USgLk`V za-4*EH}Fe(YdvpEy=YrNrv%o?jBp9$mbY9OsB_1tFm`Lh28X2=7+(t#jQzpOZ~__$ ze39UU!(-?4@_0Jy{*_vOY9eP)no<87dw@_H(Q0&;42Zq;*$hINK)yz6MVa2-S7RO#`=2I9WKpD zL!lh3ghQ$J`j&NQ_eI_!>5PpA*tLVn@Qv_SayzIn=u(-#q-l`7lNmr-45hE|jz|iL z1Qyt?5{z{$!Eqv+Ay;9rF1n!k4=lejIxygj1rdrGoVZ3fFnCp8f&iAC4c_ zof9{zGdu*mT+>GbX07xrfwz3lj!28YhCydW_hm8`ichnJAs*G^?IyXu{+JhUGkjjq z*=!>L`^HoQf9yr31FS;8ni3zuX^iJ=)e!$>6?B5SU z*}flyAlR7fo(%L5ue#mZX6J<=D-L=w(#y{l)*(vQu*Gcm97rGhZ!f?q1QOhhzO+CG z9evn-k8_*k4G8#mCN07Jcn%DJU6}+L9}N=qdfHU$luY6#>jvq){B$m#{{zQYbKa2Qi)RpUY5k>(L5Hd_Vsch@ z)dA<~%_gdK@esa`<=3rcb zeZmffK4L}4o6-U3@z>4zzfSjpr7CPZ{a#y|!yefqHPw;8(8l`j;5qTq-2LXM)me{P z>xL`kS3ynI8XuQSzLTCu;W5*+$5)-hvw`_o_r|6*mUCgI!X0&Khcv9 z$Ou#}**msOyV~sBJ@n0+y~~?@*|+l9n{yZR#hbOf<{U6Ot~5L&`G8_?yJ6AH%GT3# z7Xg195`?2d&IpCBdbZm%U3`iyA^C^U155Soulv`ieYHclaKr;)FQ7MVMTe6UljSBG zDvi;NCSYaA`i`~*o=yf{TUd_yc#C~`PxM$|F0G$cr{UIXz`*YMx=mOn&mRBcJV6fY}WG~S2hc~a6NSv+|cT|p(o#_6tTt0pGYas(C zmJiP?NU9B$qhIAUl1;h?lNXkSGRWkfsuz`LkwUoQryGZJT^E0^EMNJI1}pGR-ep;I z!xrYDw~a5|`(e{=x@Sd&-pIi9qJbN&xBaH# z_X|~xlR5vBZ405yMNPa>g1gfKY5bD$XM@Z@6Ua{v{ zJX5L~#t1oc4N{)fNp@aE`3g?sS$^5nn)3jgOdm()(2&4mZIU6lH-;w(^PUeeFg0NO z5+uXd?ZTq%8JVaYf!^|O^Qu-L-aZBVKMh^pFH-8{vpZEh!FrN_ zJ~7lP05e#1nP2l<^%D?M~8r#NI-FM?R!|v+QztW zJ@r>*V$C2JTw4h#-Tc#nV+SDv1THWPd!{sK$h%$UoBIniSJXmLg`_B|u4foRD;;XK z)$qhAyZNtIcJNA1zTaQ&qT9?M2!zaxx_}!E++T44u5hN7|A~i7W~&0g6`S1i*&1LE zCGO0g;rl-bdyOJ0CBKO-lQ06!xHB{%oIXfqPCr!jsd(|j%v7BXo#PCY#Wtu5+tozY zRcvj-MWaIz==~v9CA{0iEm3H)F1`7)VY!LbS!{XC0H`Y2xB}3R?ALK8Jae*(OdUC) z1I;)$%i$4W1spE25Np+!x3s8UYIs_RBbZf~gWk3L4@pPKvXqFRaoW)x9K(JpoiF?%+ z0IDi`+;Oe(a14>u#B~pB-{bN+vc4G_m zHfKq0bk+Xm#WexiA$7ffd6xA9PnqkUm%ms101#&736Zta5ks3{7Yv)0^X5(%#MM)3 z@G10q_XG>@rd3x~I097&63m>pb?zY1r$c(z9CyJyFvHH)4u4qYu0~f7xQY6aB?(%} zB2Ed0`@&DmR(m#O#7gPm6NDi_qsLuv;I>l_5=aV|^4s6*VUD?0-4QiDUiGL!4GcN7 ztgZb$>>=z)bE}lsPr%btuDR@wojC-L&X>)a5+^aP6ys=jg8r~^5~TFUk;p#IWE0K% zgR~eTmBQQ79g{KEz<{~eh=M3x&j3pkhj)SZ7S9^yq|k@lCh*Plw?bA(0=s;?H3ZyU z)Yk(e<=_hrk0yG)6I78zTzVXtSc2|u7yGc%`8sO!$~6(8RVl~jnC{Lq3M2cQ`y`WM zR^V1bPnUa%ug1q;Gv_FEg2vT#M7h>7%ZBtbrm++ys&z|*I(NO7eg6f%o z+{w=uxB-FQ&4mDk0GYPf!hcEU6|)DD`AD)bFQ+u2$f-xyuQ{oGA|PC zP5M#P0yemxfrC1(CU6v2?-B_!L1S7!2KAbg5?k5`?}|#LsUJ32rWBlU8#~qvZaP*@ zcY^+XYANG~w<6H$j^8Nvwr$vSTWU`jU$@Pk-m-bnS}_cPA~*e-3+|ar%M`)xS(0Hk z@dMX)t6ka#X?^){clN(9q1NtFfUsy&(js zWJn|=<%U4-QU2ks?>j^g)Xo-a05UlaO7kqLE_@W8Z@Gh$+PD0jy zjcbQpBj-9}#_tf$0);Y1{i(katcD|Ka(=T0N-Qb|YvOBcR^6Q(r;JrHO(aRpc~tu{ zX9M0-KmIA;PI`2gE|6qRY1c60OxBjD8svV)d(~_5Fl17hyXr~VtKyFhN4dH80Co&L z(la1(u>bX~SJfiFB8Zb?V|r=#gr2!sNTojRbg1Nouwu|NSfGnC(4cGR%H)94}I(?vYYP};A=8C8^@(7aqEX+rQOJ>@{ za!;^Qd&+|YY+FBPF1YZDC3RDUF~CQ zB&u&5@*&kl^o2^Ixx^lE?Xx2q%B;(ii%cv}x0Wo=)|8cqdtu>iaoW~LW++VSpSQ}5kg8TULoe2$qVT|!|^Im@Movib^NtOPJ^Jl4kK*e_(* zbihaPDZ2RG$Khu@(&)Z$DfMl2c<)<*XZr;`kEdEwCCj-neoPUIT!%e3`Zw*G zl<+P6xD;=Q|IfAz#C7Sor(TP7OKVrib3Sf%9l3@KGnc$uDf}_Oq&`=?TCYa$@E%IW17X3I<%RG zo3K2{2+l>eH}u18=vqUA3M&g!bJ`aNXAoK9_H=~m8QgwGBf3Qw{`B%bq^Rlvj=TU^ zKowILvz8@sV-zD24|g$n<#u^UBjdSVA*htnwo*EjnF%0Q_1M|m*yyc8_rhc`Bs6%M zhqW*1KK)&`ogE4@6e{Wct*VBG_o1P&$1utm=0W;Q#BqvqJZ#@DHoEg^IL84( zHwt)t3i(zC5sn8w7Ts$v^VW6O#Ia;uA}NxCU7MszrM{dT{p0b^)?*i2P2d+4!zFlF zu1&^;?}M_0=Xk2-66`-8#f>IEJF7LXv$NcHc(+J*v@bWmwWKJD6`GPEh6FH}3o?3w{IELgCbm%*-Lkqs`ks8sG*XKar^y|>z&mP8*F=0dyR^rg*2JOKY z5>?xh4>O?4#R(PaHm=ZDP)tymsRMT+Ipk;p09D>prEbx_+pyW~IuCs#ztJr@eYB3;9dIdGBdn#eD4z={E+fDO+0IPcVuPC*N&ts|&fN0lJ= z(cziI_tmZ-kqcAyH2BRG0eN7N1{_RY+!*$s`06*p3x#XM29+~>EG{gYHD@WJeB$Hx39%lhHs)Au#ro6;4t zo-dEfjMvXa#~z@@UZM1Kl>3a2X2Ve0&2*s7IBbq)iHLyUSV2m(79{`ncS4;kCYdyx zK@Z~N&?_^|MuR22dkrGoO)&9mdmX87ym<7(yf zg?$;M!pGM^js&5DcK#JRte=v&aVmDrO(wX$@L^C|LM|)BHOjXIpI%sNWt7Eu`?)G@ z{A?KU|Fp!;KNVW)@ruXlpRBmGUYh`3NKXKwlpeo2!{WYA6TQEr!XDkT!&!}!bjLpX ze*+Oq`#sxX&`?n^mzW zcyRDOQqT+{AZ5oYpIGA#k4|encNB?=f4iBGrxU*6@&bfIZd{YusDd*MWOR_@1$dWU zn-X)!4E4N{*WW z@b^8m#5{8@shF_#XoGZMnQx(n!wqt zIQis5HNDv9dr!`f@?}E1VC#=mI?*9?x$HEN?7_);7*1hSo0(D|4W2#1ga=U>R@Uai zQ?1XT1%xz(Hc}idYU0$}e0nE)Wz4ij>oq&C*_%+V_BZ&XEa^YaAr?Ep=;Ks>^+Nsb zDJ{-7m}gyO#!Q4Y_ujgH>y$%|nlXw%@SO3aZaEyaQ%<7|Ph*beGRQ{?*gJcDJXZ?s zM<#W@k4L@P-4v(_=eEa{d+wA;6HC9@vHgC5Ezp%NwD`Rhog2TO+qa{mav-Z< z7babC18nc|k(4h8b}P2Mal>}L-Igdl#iz^&`CPaOu{RRb&S6M<<0;qq8;fJ;iOlkn z>;(MP33Sl!WfTB1z4hg$W0;(#E)^As$AKtV#l>jL6xt+ZR4Aykieqg#n`e3ce^EhVgOk)Ri5+>X(`K{c zK~w4ydWdl6N+A+k2w-W()4A!D-$@rY=#*vhnA&z zh*l6OIw~sbVkycf%>T50v!`5*gbXX8V$^W!zZ^9gm1ID}k$+1`$n)1cyhjOzP)}3I z)!};3v~S_xbc{4?{-dfcL;@kfgzwB>mi2@bnZf}*>$;jy?wY41^vbVgxiK|ws}+pa zvlJe}==Q^(R|`N*nftwHaB!SZwS|R=*C(OkwJRI>NmdVVtoH(2G}uBoGT2K>_`j(f z-+AeoDQYQX_eaT1Of16Uma#mEBc(`g%$d=%20!CBWaDab0&ByYd+r7!ct$?YfB9Ufb6$SGG*1Qwcj^LH~{F zU}g3KBsx4E2Cy(GmG4=Cr&hYKV32DA3SR8C|38Gv5Q(3lK=l0C_9IemFmZ5Go=ljB z$00cvoC^WYS`Cb3;3cS(g8E^Lb)3AT(as3d(IcuxZcJ3$!+3xyDR{%ZtC_&>pbumP zew233%zAb*{+V79kGqGzr3=sUJot*(jwmMPrfE-oy0_iDyj*^!QheGyB|cg}g+)s+cc^3N69Bz$n($aZDkE%x766QiS5(IWZoiX$ zm|TTB3+&uq^ECH@m}Z9;Y(zgtNNaNm)Rtv2+BT)Y@PdqIe>y7q7>ryEr0-7J)8JG? zES)KD6caOZmLKIITuO%dm{h|fmVbKz$VZ%nvCCs~Qqg{7+RO|WY$0ir00s2Ve zks6u;a#J1$-R8!$$c>f1r5sxf;(>M%J|TM_lyo?l$KGuv>9sA1FE;?EI%okepM@lu zbZ8l{p5+1aF@?_14z>wq5>x$3HZ_=DQx0?}7@-+Bfi3>imQV=rW{qpv- ze>@t0ffn*+Lix-M@Nag7fDg}rOIv#s$-n?8@tjg^ zXm^G>mgw{+b^(DLeoaJ^w=0gIYO#50cEj(#+fj`0YlGM2eHcwktm%I*Rb3esC~&o#_TIwCn7?Syu)W zlpKReeA0(Q#y3vyk=RYM>b>8Xm`XKdmREjWNYy6hDu#gudvNpR@$a%$y9<;hzX?6e zZSPua;h@w!x|vb%IdK;KAj(T_vt4E5?374#@JAqyj?i-i&7R}}qBH?(Mw27fVow@E z|7y#a%I~ni0P9%J$s%kYYaf_{4;r{M&nY`|__CuA;ceTR zzMp7Mut*$m#P7_#nZrawFlWMfLI`6~p^7~oKOD!XFx;5OCRl`G)W&aTH(*)*NxE-P zj3nhF31un};#)bNnAEATZ(;*=;omO8`2+mGEl4R9Xw;G`fOk``jc0*04^D14)a zFvoCbC~)bq+bbk?I{kElARJnwlygJ&p8YqC7Xmc6Mma$r)f^}xzy0cd%CD?k=((T5 zOpX11P-**8o-;vx;_$28uhtk;QQ&88yZ3o8 zxm(2oucL<-BsrSQ?e`E#i#N}hLDv`zo7IaZWWu$yfc24`bXW?~h<=9~(@@EpaFgpf z814jB`izPHwr^*sj<|P87ja*?^`wqUh=1j&%L)Ibz%KdlyPf57ZO|C${ZS{%&rg!b zsd#)c083}0q35MswsYSouSVh#4__`Nso)R`MhN`!@{rix&Ykj*D-BdeU-g~=OSF{i z@sbh+IH4b&EI`3}s}S{aMNfOeB>LYQAXX&j%@vqEfc4cBwt+Bv*33wPc$RJp}28lWpO z8uT#FA;Hvyh3=|eBp;M6nu`X{zoh)3BI{wY>jVj5k?zrTYr1pn+^=}*MrT>z)Lr8j z_UKykUzJw-G676hJaG9QwctAFheW+H!R5z1`R0a<{_-U%B+&SyL{Sql2`Do`zO9Mt|MT|M=wo1Y3hWL-@p>E$ zdwn0hbVR6H=836)|i9?H6c4+YjQ8=e9sqofi&_0~||2jv7YeVHA+ zg{sYxdH4;ee$p+^yH}`PcmMd#F8uSNE=0lVSmFMZGrF-Rowmmdt484XvPGD9{hgD6 zJZ}gInS_dW0%2b~<9Bqigj&u>(=}zU(xUHY#i!9oBck_qO4& zk1{AX5uE%jfX#jgVaLO$pUmS|BRFq?P_#QtjB6I3gJXfTMTTo{r0M{J3+E>MTX;s9 zSklHj_XvK*=Ie5hu^{apj+=fT?->CVf(;L%?p~aJMzbwj^uD>A7*Xok-*X+O3H*DC z8!rQ-Zq=bj$WJJEb&^9}fqLKeu;cS|Pb0E-8M%OP=X=wg(yRBMZHrs-yQ{wwwrgcs zLxIWl&Ktm#(Rx1~Y!x52z6`EA8o5@g@>y>rJR|dwxiE>dDj403 zKe-$7GvUI|2zv0HQ~A$NYNgK~gMN<%#LUo;tTg|_ zrLf4TPL8EO=%c6gxq#l+x7@h>RgzUYo}3#MC#)49W=ei6V{h0_ZTrSC)yn|_)CC5J zs0WapXW!FEf!|o=St2iz#tdongpN~#d51*@nsZY6l;6bzppSK&>fRP~bn}B2mKk1& z51={v+i!Tr>aZlKPJ|mT^N_>7NZ`_pxuN>vh~=99 zI3in#zJ118q1vkbBa+qet`EqMeoJn^)B{reSXvDCrf8A}r-{29^Ki@N-1MToDKsXS zE5Q8SUxB*gF*^vD*O$j73GUJfV63Q(@B+XdtO&6O>t!si%wouY2HuA0yUhn|93XMw zMgh>_P;<4k3ZR92!*HL6>S{g+(itx__U&t=gq#XNr2Ld`J^}V9)P@{QQi;T;gaU7o zz|3PL<`mF32tR@h%0C7_67MWhIV1yEyXeWT$KR6j7oIJ@M;eiRR|U>7GQ#=78~P8y z90`0{xP{ZDx}Bq18fv@G+!$s~a+s#^1iJ(SWKfC*rw5^=dT_X1yAa2>2dnU#->J|A z05>Psj575gWU2cHga!CS6Q&~bu! zySH?Ji;uj#I5%#u0Qk}2BE3jCnwBR_*(;Vo!Iqxy$17d|h6GQ@XlA;4(;dvR@zgD9 zg-8s?xjzb?0YE)727>x)q{m^)aou*eDt`gcR!7fCS(OV2|GY4xL<3+DV(dr$RL%kN zf_pGIy2K-hX{S1b&~(R_t^lygBcX+m6F&$Khh>~&D_k<#hKylPy4&w(*&zLpjWe^e(DX?WoZ{7F1ewK zZo!M_pJd~;P$0m0B|zY zeQ_^#SgAjcOF3hOM0IFnBJqQg*K``{cHR@?v01w?WUyvSkq}lCT4cNpnh?HHdl< zSY4J52*Q9y4q%j5`{8()63TH5vHbhIR|KejN&r)M`0n5Vm7Q$}h{TLdKmQ$CQO{lU zj5>X~!s6Izkmd1O&M3(Y>U|C*|NL%_=XWzoQc+M7$%HP~mkkB{ynh;1duL!^6L99b z`2nm5NyMAe;9Od)5{6v#&zZn!wG_YU$a&|jqiyIh$Bgo^5*;MJH|ZLrd;FqAi>44k zsr`2~UD^>OJML})1-`}dI`$15Q+U5gYp`C`^kTu^#`PeD-}WE~4+u+~OEG#33xMUB zY}#>{7t8E5_p=LweGkewaA9|Y2v@H|f^Lx$_(NT3GMt(~gFZFuJ&MA^l!5KhAr!ve zazP8Yl?W+r%z8_Y4;B6Qes0>lzujGW`-XHUh z&`aRDJ|MFD=%4C=(Z;8p5!}bBwYy?F)`?~-TkU!X{Ha z{wK#9USAI+1qbLQC_N5-Y;r5et20y5kX9nmQ7=QTLqz_^6|JkfeIxXp1g61A6{lUP z0e-p524$}!cr%j%7tD}7xV$rPMKkpNVO+}jO_8M@fOQ*}CK(O((3z=r>a_E=1j`9FNVghg@X7w@B=mzpj*p1so6Q{pbwSIhhXC3CgJ4C8| zE;EnJZO+}D0+o&0i=nu^o+-7NW2fiPcS6@84aWZ*Ov~Iu6IEPb%)uvmOfk@F+kMLz z?wkx}Psb2ROGK9r3m%#!66@*Ve?XAsV65i`S38$!V&2S#vOGw>Lb(uDT~-rhhLMla zjzz{PjST;V+f9S{-!44YX@FtxI{Zw{f$&qi8^OOMnaqEeQ&_jV0ewpGpTJa=#BgO? zlOmxvjumg-Q`Qs^2W?XQEl566FLxRRoLf7Jbf|N}kY(40S2xAoOgnYS2%qAB-@8;l z61ACQssjEAbGKLf!EAcbPdkONwnUVz;t+}x_ZWmbJ_Fo)(3=oRz9^u*a8IC8N(8!F zLr<_#1;%YVIs$>NRHO&L=DJd@CeECb=|7R9YJs>NhQ3W$Uqwx|eS4KuRSIzwz%VO9 z`tL&&$59}Jk6oz#YI$Vd^_Bw{y5<7)f3A`M)HrsBvtj&LFn88+SpG@d;@0cWcb|m< zdb1l1M5J#WlRE`7XkB&3LEA#EQvhh8uGp1N>5PB+>FR5JnG~#Vz1#(BL{OeFVfZL` zs=H>VeCIOJiY&H|O{YBtCP4Ug4^#C7OqUUOiq+J{yN<@HxP4NIJ`~{*1%dIgA^;|1 z6^7U=`qW~-E$=G-=LYeKrLQ3>ns$&D8`CfPQCRA0kkQZXms+>GGC^Cf_z8TK4ibQ% zPJ=i9O zn4yuDRw)UK8WfNcMjDk6q(Qo*Q*!3L`dz=Z-nHhR`RA^C&e`$oXFvPgE5Wq){n-93 zAygq=SWr%D501LnoH0cN^DCJNz5DPaPf?r}Cmh!PiCmn1A1*?b2CEF&XL>;E3RN;1 zxC%}V7MPFl+jPA+}1}@gf;o%{ameoHq9OiLQF17 z@EDvRuJN$?@x&_u`G8^d<-8Y7!T&=kM-S*89>vu57~v9Pfgwr&XU0I7rvsT5tyR)=7U7!!r`UC|R^Wd6J!iw<{q4x43BS z+{lrTX9NVnecvODgFM3%J~0)>X-d%JwKmaUbqXQ4HCH zJp-YV(^hZSy_EjtPQbt2H|JlcFsNaMn1&$I&7?0L4_qKK?8917;WU`-X7c9sRma2mlj>wEaT|9(jCbgB|ag{`IU- zbWezAL@62&8==REJ~dGZptVbKM=mFBA|c4OZfB?p>^^eBhR17CJjVu)zxodb^i@Mw z-`jE?!*pmz<@wMz^?6zUy^VK*u;5U^+pV+VKe;pgE%eDoIKDKPDPt@YEjS4pqL}fh z%zSScU|WGSP;$H6vrgZ4M~3iParp5i|7D$j$UodrGScpy5za&<7{1n~wub1;fMxw+ znP&bhNoLE`RE7M;q z%*6+I%`8cwHnU1CyytmRkjuv*MuzO!pvs%iqz0tXu-jC_-NAo1>K9+y4>KxTVxkPw z867V2lHx!&_)xpp9XmDP)xZo8 zGLd;KVcolHOyFNb{7VV=0G9-TY$mX7fxI(nL+248wRS{S_kYil8>N9MT-SyW@1#v* zf(U!U3s_`u85dd-p7|4n|Nn{Tyz(O8Y@DOdk{%byWbm6>`s%69o6vWPJ<+;dfBWH( zXaxcHs12vKJvszTHk;x__ELg@t^~kt7M668m~Vvh!@p%FC_~2hpDKh&Wx=)QNLvd{ zLZK)#BYZ5&^$YviEuuv5pMP#^C#Y>0zQ9-yYuGzdLP;HbR000#UP5cQFgH9eVaU7% z0a3`z4?o>`WrUNXTN~bQcmx8=X-Mf^p7gs_5nfvZp%`wvy!q{PW!?Yz>z@a4Xy3I(alcGi@9nbSwE^Ht^)<|659|c+=!F-F?Og6Zs1nK^#V1K7^7ZQvNjcsi zW_binm??k^8zDGvObdb4vv!}sQTU4NZ%0o&&!8Pw6r2p5xK4oy{f62CW z;saXHSX&kmxG?Z3FR~*#nH#*whDlvRN*D3jLa+j27X15!pbdX*fBC5~n0LG1Nedx8 zipGzih6aieP4e{N|KM2JhnbTIPT1owD0vkug__31pzSq;cwN)RLe;1u zV2m3Wg0l4-s~F{S80S9_0#&rU;I#eINZco$M*5{TVkd|~MCa$-qy>vRKD<;(hgI_a ztG0cAkl7X@@+y&iwTrkma*=s*G~fT8V83A&%O5~yvRa#3bG9OdEXoT*RR3OQ6F38mgb4zWR|r71>;&y^X2KUMV2uIXOG6l# zVRG|S;s4&HZj`2_`KV>_mqW<|RW4U@_Ulfc5Lv%rka-xBzcB)+&v$Ez;$|KK>nMyvNsrRC*3GvI}2&Z z$Xm~`0co(za4qmR4HT_YDlkx)=t}o?m=>ds^X=Qc^>;(V+mOJjpd}!M^`pP&3l!Qw zudJnkJ2c-}tHzy!qTko)+f=r8g*lLYK>ZrIr$ABU0|CDZwOdF$#p9TNm7#Q(If@`U zQj3LR45$8P$2cs~^BU%P9q_>jPzbKubX1{U$piC;t&6jD!rsqbC#D&Rz8^}Wb$=e6z{ zY={;JXa4g+zgpDwEvf^U>7LDW|A78n8maFl^MXGDd2<}5=Ls5!;xvyHcusE(c@5k@ z#fdRbLvu*F(6@s6-!JoiRVpXkOJUBl0RRpL@B;0CGo!VqDRnr`Xy!zK{C42*=*~Ss zWd4*006HklDC-@j6xzroEz8HNi|d4|Pa}Zv&ft!;X3RTN<|M{gqxJ;wzZAh}MLR<+ zn!;8*j(WOz8*M|{{7ncdyXw!jVOIv>`xdZjWby`(Mfasxq{%Kv_n`_~By%DqB6^mdjfy;49rgKGGmSGG2-CJvEs2+U_H| zkMJZe8M2HQLi1cw3LP>_0epy<^WmX1D z{$qAtp1gaktBKOU-ZD8#`VA*_o9`puOp(+QL};u_YQ|5 zaKFRGC*U5e-JeI7`BNb^0aH&!ZppzwT_sOo`__afeonzOfgb{Dteq?v6qB8nodnJH zgfI2vpZ2-L?XKAi;mBDDFdM~B#aB>x4xQn7jc`s9XASk^uBdZXrilM1is8%*A{!M0 z0NQ8(7cU5=MY{W{bkn%iqx(+Bzc>B|Vd(W&02fur)sBjLRjSi;37^Tho=~&b@xW%9 z{Vfp*v6vbp7yT;!6fjUgZ(*TmYw#~LYY zx~D&V%lkSVW2Y8^+{peaO@+>97;=^dqA<8SLd2(GHN-s?mCxH^(OeY#H0TyI(YkK> zqAz$0=c(fj`a~U{<4=S1uscRLx;kKu6|xMk|DH?&X_3SH2wA4-2DXo7iLriDI>x!8 zl%dWj%4xKVfm42LlRZtx28@n1!xN8>D~O=h>~D(3D9kPWJUva`>=^T_sKDmcWMp^q z`vU;G-iwxZ|K&u(#OV?%mU$f(4w2u4qf8YQTl2Au!sIX5y%IWdD1^<{EorZf@O7iY zA1UAlMViYlop?>f!z_az^Xivj$(}KxY2eX)*XP5hn?Vyst#_4FwihNnz}tzA$Bg)a zA|TBQfXa^H+jKrQX3kKx=CyC4%)T7YnYW{M2Z9QPohJp(8fQzkTBnru)=6=8!=89y zjaMv{uN8R2?fqR?>a~kUY|OvR*q%#{JFApJ}$B}_%X~yjsRa_^fw^Y-Zn<90wxJ`cX=Ioq-Vfx z^E9Y-U4$5#Fh2^MB7Z|BlFD!a92CNxT&o^u%e^T z9i&>Aeho$K*r!wDxyD(rZ>JvX3`(wTjbYBWl#^{$mA zFL@jkAzM&T*kkp;e+Y@XK%7Lg+pl}Dxkf3CD37%7bQ$goyOJl%tO?|IKW4X&=K@=^ z<^+^nxR5ftjcj^!6^;MG?JNWw?%o7u)Ne3mX^XTw2ovJG3l1vVZDC4MMZjV={h1^L zB%U$iB3XA`Z3z@qFR7ubZj}<1%3|MkD_Gh(xv=ya%WvP^ zXH59~W#j^}mJ+K{+nXFrE}i2HDEonUg$2jBj*fY5;E@_|WSVkL;xv&FD?%3W44rp( z$31zgqltHt=Za*Gg!s(pqVK7ZW(|>2?jU!r|JQ#H*4$ejzRJbjr5P`aoor>m^B@Ee zDDQ8N*;yF@V7fg;f9v4*PUl@ELVyVlr5>4-9Oez8gL8X-gMINvxEQ8NmC;pKQAk*F ze}G|uU`mf8-#s+{A=c}#5rGTDr#4c;jB}wzhjY@Iz_xpFmDO}jK*M9o#9=9iCy%aH z_wwt0^}M$bEdJc-=x%W8&r9uJ6!aNSx5uAN{;8Cf)*^O(Hqz;jfI zuA{=U1B~p|w6d6;tsgsXQU)K{^S<&xXQ8V}!n9zm2l@^)ybvb=)?b&`2BF@pP8-MM zpcfma)cIKY7Xm*Z2*!VZRfIB+zzwMVS9chK(NtCY&Lo^Q_k6Xwe^3=gms938yFKQp zY%$6%ct#WXW&h#-X#t$pkGuZF$>2J=l$-+BPGm=&l!-Z)WV8+ydt1StT^OcEA}Khx zU9*cCrg&qBxR(A5nI~}jV6&4FMH2V6$7G!@VR@RY?A_-${G{AwuAZ}7x1}(t=CyNO zVwmW2Uvp=WiF}h26;$LQio|2o0U4)~2tGY!_XF;<=6$E!*_4HdtyN zP*bdCY`;3?kbJ1xTqT@qH|L=w|Lif%xfXbDixKmT5sFZBBcwG8&vo4+Ro(QiHerc= zYrDH#{f3?;#1O-g9TBMvHS-1~h13{tquVN33zE36|56g}dc_6X2mr{Gq-5tM_{jtB zBV}f(GG#*smUEIEH*bA=eGL_KLniVnAAY?qzHvWrxFu{~LV2Pg^1M3(kgUP$WOBSq z`B>$de)5x^>!(-QrnABXN%uZ|^t8hX^26t5vYuVK!n&BK(9H-7$ zAzoQ3oUo*Bdld=EriZ=`Abv2@5bm?vkNZ0P8m5k{sXRlCXV}D;kXnHLr~Yt*XK+ET zw>gV&;E1In#6_3v@iJd5G9t;%PD3~?(M!<#iCgqm^b}2Gj zgLimi5-}3PWuv$;DxwymU^$ zcj<>0d%*(eSh2@_JBmj|AQaC)*=o^px#o9MeM6+aPJ6c<@d-dwV1(se}itzbP7U}oQ zNl!JWQ;|u7#NsR@Dt-dc{J=}%RKLNH8i%_66rJ>w*WKm`S#McGc-rSTHAihxHI;uV z{T>mLyp>H&{~l(TA2s@MoB`E0yXb392MeUd89CMj`e|x5ezUU-JLHN+S2~U=MlhdO zX`S~&)Gvs1@sY2LSttTnmv++dMo>j8N*V2BpwujaSuyBJEJQv)h*`KS zHZSB3wvC;q+^W69LTbhXj{r1hb%`xm?5NqcqSb&uv#jZK{vNBle>@*88A|YBKxk;80R=M&;* zxlLgyGW>FXGQwc(TOQJc$LzEAsJ;&L4<*)oWRB4mwZPhNHShGCh0S&5$n$I%X3P!A zn&@N+kg5Et)&olCAW_`kcx7r$Wm`*~$5cUO{}}*Aj2HpgS@O4m_z({Pa@kl%_u$ZF zG0-7k_EE$^Lr&X38f{>WF9n5m@vYT`fx;7?H)kbgQ_ly_WLNz8F7jboRfSoxo>x|S z{SWj_PP{FS!ORD%OKacT+~(eFUSc~GKWWlhDzG+5LWa9FdfOM6I}d4QPiC(B@9Uh*W`6y_pJzDM-DYSf?55XDil;og}R z)SGX>@Tku)OuR-z#ocN(dCbC0oe*N4;@#E0tp2EvWNJP*IN#RyT?2VXB}>!hC&P{5 z>uK?aOZ(8bV(ro4}Cn}lkGOlQyL4`xc2y(*V9%0au(1Jo|%0$oe*cx3wJZ zDV%u+9xsmJ^DRY5?0J;2zt#{xoR}Q~78ORM`X=skgm`R0)*V>==<4XwmBygE^-go+ zTMNd=bA_s!dnr;mRG{W;ZuxGn`$`5Ii_tSX@tNGTwcNVtA-__Y^OE1jw|g1L+7X~2 z=ppi)3g-2l0iAW%AAkxjluNu9J37Xa>)~X3uYB3;4jb=W&)E|XcvF8%3Xl`PlTd)n z2+ZX`Fn-R{xkUK(L?3<1bgQG=nDp@;?jp=YFKbs!K=;;q(dnaSTHseMbtp)+y$E^E zhAkRt^boUBfR)P#zncdd3@L*4wz2&TX^>AT`TZ6x%{dF-h zE1u)n(@$<&zw}JAf3v2b)kcA?#-pS9&$q8+JDOPg{a$+^Z>`s!_sRx%sW0SU&14$Zh-f}=d8<%Srar# z1wNNBm?uKlC2`E(pqb5jU@r}JyE&OH49ezmsffH$wfh-lKXdf=@$r#4!u~ii_j{q4 z@_t+tN@T01!hGjCqM!_uBK8T08$Y{wndsusBzwdwc-DMXc-ud@hd2SUam78Ad5IMg zpEo{!sdap_qlJf!@I9%vxc>}E&Wv@q&p_8If4O}mpkhyxNDhC10Eb%ePjBj@ZrDaY0oRy4z>?1+E&ban zkqJseGzLQPS8jF#*+#=p#(L$h^u{_y{J63=NM`#;6en04DEOTkz?>HZFVpeT_Gj`o z-ZLW{8jQJE(KrWsT=Utt(noRM1Opc9s(zpOXAEz}a@u_HtS+5G)HkvF?(0hs6IRs} z^mg1;j(F2xcP|rb-H6l5qmp7vk_uPf)oC_qzNj0?79_`jT?bKAT+@s?S|Tj&pG5MJ z&$!a=#f1aB{645FbUfIj;fkOIxsApXeN)8|$*b4NrfXOEZD}%`i!u2vCE<26rAFm$ zss!P0s|ELPhS4Ha=)#wKzoW0$j!+V`(%{Q_7vAyNR!qq$v&8>R9Yo3x8W6)2!D$;P zWW@?Ir=PlRh)WI*m5xDdjqGlzM{9M6wL@`4`*3SVLYgPhGiOrOW^S{_^Fyu>aiy0D zilznFE7l*z$`xXFhfl-DbdJSrmd!nUVLGgEBR&kE(_RMj1WbtG+CH;nrcPU85-7n6 zBmvI$jGdp^WV^?m$WRvSMgK`9*tJ1QP3?f2f^TVLC&=SBHO2>JB1%&zUg`LIa9wKa zN4$xC8mQ5gfmmXk&foJb5OjJ8gPiL5HK=d)m-&yhq4A>xFjA91JdMj!RNpak&y!1; z0TTz=MU?hsPuW}8a-!@)Vh1%L@+e?+sCc9vpObCWZhV$<=gG6NvyZQXU1qW7K&K$F z`P|?iZxy#))z4#73u#1`N|#67o1xM}mvA9`COmlp3MtVF6sm%VR_p-Oe8o}oKAW3f z$!H7-i!ZKuvKeLi7VkJs-Lnnptm9w68Mz$=W2h*BSfY$1*T!_)m}6(j(LJQ-HIZ|U zN`BI93}V@Bz1}p(oUml-ylm4_15E_fWwB*HLEuuYYr)wNb7y&5#QCB#$6sdGg&aqf z20yHz!hH|3=3XuFz0Xuuov4ZNFUL|oV-H%ZDBKOM`z=+&7<^At0Qdgk>WV^ z#i{#|s;%24Q?VTFgnF~8z>J20 zQM-)}Oq`Wj>oQyxb2K1R3w%!;+o2I>k$cf@4Fb*@2+U_b4lj5i91LQF0oo_0qyG1< zX3*)Tq2pw9jEThpq!`Zz@7-?!cu!j3hMZS=*>MMyDm5f)|4i3Na`{V}pZQ-^NTAMf zI}+xS{t_!p#Lw8jrD1U@-k%kHl&+safeE?9lYyAmg4dv?pD}GNP7A0;(eclqnPGpL zwxdQ!Ye5Y=8>%5)UME`NaWk)$X5Mc)glGWy*F1{w0)h!tH9)l=&rBF+c>)J;FCIu) z2h!k0JI$8cDIt_>z-7b(VPi4KbMkfeOSKV+v_{d|ptlX_jS;1%K(t^b+ zdi)sFqQVT9O#si`hg{m*CzT#5ZA|}skFBfX z<=v-Q#tlxT9`-%9Oh1z%%2;@EDZ&Ws;r2;Sms{9-k1u=7pc(na=0=)!FE@PjV(_0j zeL|CvsHH0?VOV>EANU~y-Dr}a?7n!$8p>3{?KbBTBsNTe-hleuAVw6p-~uzXy9jj@ z%}ZAPLqp9f{=tr55ZwmNps%a-(A^!Lc+sNe4~c}m?9oV0g+(qXYTni?sy30^T3m<7 zvF+;*gHJwJwltxhE=+kkyu?<|<}v}vk|dWbYrhq=mZ&w|uywjkynXL~Q_KArNc@4YZ^2%@b^u3~| z*oIjtOZqZ-1&0&f(X*7tqzO~c+1x+AJ>$?R-IQ?{nscJgjrl?j~9 zy~C_V`CJSxqRIxzwdY~ZkRjb>1Utz*IIhtFAGwKZ+LgUjAni+<5{LemE&cC|UsDSM zq4;MGJ;j2gxS7dS|LxJDm)nV558vHUtqSZABWe0$rSuN1{F8!mOOKVh-s4ebO}I*b z%){a)kPY+Z6QZQKkOz!wO9Lm;FbZlW_%KWM`hVAII~G*-Id4vBtxISCCXQXSUS3hbF-XGQyqZX{HJdvdNFS( z^>)WKAVsG03s(q^E-DMr4jEO24DP8h<2N<*P?NI)6=xYiQks%mi`q7A1B2Q?viD8< z0bVoW^|CIT`}@55ryuo5U0Pc;lcd|(*v6p-#G+KVtjBLP4o|R9K9>R3|M07Vf_HM+ zg19$)KAS(zdu{UUiVBbTOb;iPo+l#WO(A>B`QDbQnWV=s)X>L5<{G1j<5J7fpzuUv zxprfcqiiGh^jjKS+ArF_`or5L#@AA)^DK%04w+eiUGUf9$HN;;>+K%~StD>a$Ok$e zZ7Oo|sMGgSAna24mJajPyPGxx4p*{m+P-*|joL^aC9V_ohB|vaDLg)d;qvUG#H;k` ztxfuz@Ow|O_x|WFcg73}JboXuXNB zuTK?~3N&shTk_J$7X(Ea^=7$e;lur+%_;_t$?#ac`bx2DZq zhImlXOo+PH`g>dEua#HIPy}aJ zf`)92_Vuii+pYVov%@{M4EN_QsGKf-lGdqC7uRZK=XuQ2Ojmz1n)s3VdPFb1$w5x5 z7!i^i%};G#1R@SqZ#Uul#bM6WP9ZfvzA}pkSPpDLgHdw1>!nErPgclpQQUXI8%Mq_ z$v`8!Z{-=;`_$mWb0^NoBY)W^w^n2=V1F)5=`vxZtlPS|fUt-{;#An2&}C9>BsQqx zH1`Xhn!voI=aA2dx$B62hnufE4^l$Z<_vEjbqCv!b~hhO-CIt;PK<_N1hr3#J_{S{ z+&+ig9M&x$qdv~T^cP2c38vlZD z$82AUBs2A@f23Xd4!QIhJGp?8()_1b<^LFy_7XfOsHclx9?sJf5mLtT+7Ua79dj|` z7L4I^=`Hs0lEZp*)5pTwF-@tOlo;7+PR!&*9E}%P$?B?N1*~^`;C4mem^mi_zjU%V z`msZPm0B32b9(NS5H^?GMVe{87`(HCjqTg+5h4Yqp4K1DW0Q*i=yQ-LgovEm%0bLznYbd%0Mn7sDSc$wI-b*7QCPM37z@F5P2C=08j? zisN+b!HGu1pS>BS16F>MMkj$CN5IU4(42Y2O7k+E(!fHwisbrujqx9!v%}KwpWvTT;UioA1WFwGT zob;0hZ}wZcQBx4qx$7wCd8x~Xx{C~-<{Nl?GS%$ysPuMW5Y&e18iuAqaAJ1?I%2+2 z^xkj;T$l(@i?~qv4Nac%qzlqiH67A@{mmHZ-KJ1)R-&-dkLE|eZ3@L8bXyoQU$!I5 zq5kg9r9IZIj~PwD3F}juzpGMSKdfz?;uLRH$J{$g-2C?OA@Rk7JtzC_Xy>d7@{le% zuxnM^@40{;4pMR2LWj5q9U`$`>z#D36`NGJ^O6iogEl??ZQq$Bw=zZl4V+g40__JD z9*_ncfk}nk?tybb$KSii`m%4e^@#zuZ*g(@!etc@l;A^J9h62cd>rf10Jg435c|zHWpDLLkeuFHE{#28!@R3`qXlDkFtY(> z6g;@(UFo8$z8&tpoKnwhyg|Lw>g(bJG+#-lmV^1^ql%-H&QoB$JLPy*BFVDdo=|b@VQj}piQD1VCRSc7~#+*J|VCzXK9hD zNt;%(;Dep=gope7ehX9F4~G|viiusU*k3?Git9l}`5%3I{J^fv_ROy^>X=}U<0_A8 zDa<0d$3)iZUEqOr8}#W4hg*gdlZ-NvH*+Yi^8EN1be9CFbkxlB!S7Fkd zj#Ywd4hO87wU|X5niyJPaW6yQCV(aS5d|lwQS-(!Oemx`WO}sth&^4?hrPw(lTBOj zhoxiFo!s?dmHUTF0Z%7Y$7kJv4&N`?cVn9bj&3@nlkQ0?!gmv`Rf~AN%LITG1;N?*=g(m~UO{W=b>gf~B#lkjnEp^m`IsBr@=^$XAU0fUQw(q!Rr<5@^nd_i|Ap$>0YwK@@37$^>27etTfV8I@WrLjvu4Yfw5(Sm5 z>S@qZsS;D`sxF=B0yYj^O`O6c^%}FCUOiz_sqMFpC*a$2wzY8Y^6W}Q+Y9P#{5XmZ z3&Pexalqa_squCzoX-Q&=p$oA%*pXyUPxi~d*k4HODWu`9^k+h`W)5wy|(a9Cm94+ zjsMm})Qc|xV;#DOKJdbp5h+9#x21NDo;{%UT@WIOHXaov9PRDs1_rN?8{-cv{hDm)y?@pbpqQ zFad>TEw8RO<_w-GjjF794m2H#>75D-lXRZ!OuZ5drPCd}urrRxSwgUj&u+_;*uU)D zpRtR|a(FY(`W*3twdfeQMfuK)7Vx%!X^F}_QX-_f)c{{R);B2qj=$F%))_)~vhZZA zm_%B^Ffp`lxR_l9_sk6>m;!h1?bd|0rN_Hj(NA08QnF`*=Tei}bb#g#udvDXSL}pG z_x25|;cT@J$D0xY&{cOt(6oL>-#M@JPMJ>>^jQmxWqz|%$=r-QiT3u>Y|xLJLKqtE zFeTW3Q314xGOUp|A;-}2LqvZAXUTEzE7pMyyzHw7SJI)o3t}la*av&gWd@cU1UK(} zr|sJ^n1kQP&$dR zLF*i09g);CU746j-dPWK2}L%ep=ip`9YT z(-r^s9<@B8kDJ31PD zVIb#Y8+N|(U!HT}I)TKOYVx?Nj^K*HBoj=CqT)j0Reg5pt7=uKV`b~1v6c^$4nhu znbb|9B<`5cbUsN4OsVqOF5Xj0LX6d8 zQ9%D{q8}ML&gdtIXU?+yqN-^LTy!OWo3DX_SdH3sfYSq-10%@J!<0gA6Fme{yY<=OqmPN?B|UID$vtHVkDSO^vF(mP;nFg zh%6iR3dGqb&tJzCa^XC46hLLJ(=p!JfZfM4Gu2jXukMt)+UM8;QJ_(G}0GYpuy9H zN205$9ZK>|T;s3KC6Ar?RQdc=o7DV$HrGRPS|xtG7gDNn5&qro98PmA08#O}?dAgH zUM}0@0S6}}@)$OYQIqKFK&W(^Ju^$))Z>0=;zjEi?5wzf>q?utZTJell&a_rX2uMT z_|T-gjYLDL{3?y|NKV4y2OMkUfWl!VZk`Su-RLQfNYFA(Q*AhAv=+C#l}sA2APQQM zCJQ&FxbI#jHG6trCcR0Vi;BVuLN6rS_S$Q@LkXflB zrF_vsW=Urym{)8Sv<(qou6kvKP6GgFwhwSei|Hp*hfD0%6BlGtVOw#QKsX<{7RzJzi$(aym2AR?7q5Jx z$6ZL>^PhfT+eg-S-}0OBx9%p!@4b00ah+YI!XH`aT}#FD#ME)=z(-gL8iTTOX!`Ew z7&ntWUJjccO{R6=Qg%6Bs*wzTS$xvVL99jT*`K)A&NX!xtUz}Cerj%wPkeaF9)cOv z6wRE|N1Mde=JF|s&3zMz3kNfeBCG&cse{=&#H=%$_uDFfCnbh@_dC%^i91u^GGeWY zn(#KagwqYD$OemZ9A7|yjAY1W8b*=9!%gC%@0wIuRuxfryht%2L-5SuGARMR5&iwx z-D#jHQf9mF@u|0tCFJT{UBRm+aK8Kx^pMGq5T2&{*><=gsW}NmYTcnzq_=GO-vyXRX$Lf`WTLzuW2AUkHPtBiir~^63h#4 z>YSM*v!x7zU*&;{`eRVFAZ|Atl7C6qeOshD(rwW$*- zir=45eB9ryG}&vU!T86Eah`eC@d6g+UpC~4_$`C_gs??udt9=C*H3t!>3IT_(RJEB?3QRt0^=1o0AS4ro^|!-uMfENsLQBA@rC|VmsuR$ zD;$C{e|7B&-Q6#D4qGA|p;SdaU9z7Wt8m0t_OkSN$%I(z+_Zres%rLK%YWrCuufAu zEctChimTbvW3Or|vMIQ>Pnw|?K*ANYzKDvzO6~;#{p7d`WKtOse!+yQPx&)6c7b+F z`b&t{LB$1gV8Qq@xxy0>O3*>Aq}z7&&HnX>&<{34zQvRm z!17bGgfyp1YN(mRemE|#-*^}hf04EHew7J1?$Q}B`#K%g%x(MU6LASLku=m4 zGG8?205nxnVIMsmm{%paf8a(_?SnvFmdGFFJ?1OZu(tv*pXn-702)7IFIjR0AKuOj$ z%)%;O3k)!(nw}!EaM?6jEC+ajC?SyxKnWMGfCc!v8ms69L$8qa?NqVW0vxRu*>Fet z=XNi>jfFa-jGK=nF0WV7KU8peV1`7?q z%-+9Me+u{u4??m(ayaN|gWvZ7k!QP=IXr{n)XOhWeLHC}Qrgl(8Du7&R?cNh z1qmME1jtbu!iE^T)e3tW-duC&9@K0f>dK1O*bV1}Cae|7RXL{TD#-l;Kl4s+jK!8D zPkM_VsajRo^VD*_mgCOfAH0A^N95KM!Bu@IJ_m&hKjKo*zh_y*;WZwC0483X^!KLr9dYgC>_0&p z4A1{G9({hX>U+o6B+)rfO(z)xNQ9T zkuNf*E>!RxDJvrf`oJgOmThoYe}26GTFLQ-GsDcYXOFzMqW5NMI{t{&?{A=Hf+sHV zU+P&};kjab!tMowz^odsj1H8VPDTOeY9IPhP46Sj;#ZR{-Y##m+SS>A5ZBlP(RE2 zhQ*^q05cenq$^7}7~ra=`0?HII%M zm!nRHS8GW^S8TcBU|Zv%dBG8l_ukzEJ6Ql4qkNFdXVwb2HL`YZ_eYQi6)YT4WJJ{~ z;T@lw{i}Iy{LiNnVunae{^;@Mi(MPcCv`QI2oe{gr+TP=_RrYO9tIgQ@W(HTjLjhG zjPk~ZgA=j&_+QV%k{mJztI~G!RypJ)t*ylnH8H^3dJ!C|*V9a~%~0ve>+*(t;Ai^g z4LKCo5ez_!Nf3Ny*Y;#1a2TtRYtTn+%9X{aRxMUL+#80C<=nkrR^2xtjejM*-pUn4 zj0}+(n12&HT}nlCoF~jn7jN-h86775ezE!6W*H_Gy#1*}uN-gdKFSJf2&DWE ziF!FhdQHnjCau7M2H%J+i2!!vu=Y){gQ!mFeiT5{AA``6WL~ZveP|WEQ!h^j8n!be z^XN-t$Hsa^Ch{~?2>+S7O_CZ`Csm1_QbZEnlQ(nWD8RNFjg@me^~xXmF4$@*&}-ut0Sx=WmxDLXsN+NsogzS!MBFOQ z5ZHOj3{DePIoN42e6|In?_$9q=q~IJ8BWz=v05{4%2l{3kIQ|&43ZGhRus03E&yRj z1ozRMRJVV1JFX4T1Qx3qfDEbeoA0Z~u$+{AQV3`B_vgr_i_TNJyAErjsnENjIEMd# z<{R+Lmd`0MsOj1jD=WbTlTAkQWG))Mxwl{g-sb|(RAXYsE@wBr6_0nyw+A~U&JGf0 zLv>W|K);L$>i-?&1Mf|KwYI&qslLB)gfr(3k87(YCzQqt!GO=DK>g+_hjbN~Fh)!? z1PmEi$xzt#Sqs}R90!n)4+<2KDJ+Ya@a0WevC@mm@rSIl@xc^_IjFxms0MDa0(141 z+bdUg z_NLW=HbDJW>_f-x;`~cHlKTbH>IaQcYSJbZsY;9#Q%usJN|tPKy9q?ZmY>o7 z-2Jb3z}j?Z6@6FyeVL)@4RE4H+2Y}mi90j6_8S1=ki&BE%i>YBjGEn`lLBXiaM5O*kQ-b-*uOV!A#t<2m73L)eaD6ly z*7lqIT`?(`UH%5;rAtq*05T(T_$m>A_VUZQHL)h!L9PMd7V=(t$7I8mD9?@Zb-=*H zz&HL%GfQzD>H4y~`pt_|s*dJWH#$XdI0Or@##R5l05oEO@hj^Z(4Yk*m&_epR#LHE z?p4R`UKzfthpS~^fl?n*AElYi(ECa)u z@A;l{o@bDoOADfr8oS2#&fo{sKs%90c&5;O@Ud7Va;96TKj%rFX!E=l*^sAC_*R)z5@W!xnV|6+~!6!D(sEvQT211 zmeGT1@q;0DV4w;h_ffpPz7#SGpUHQ>E*|x|n(}CHCS7ml(O-@&9oO?fw!_#3V3_?3 zat59Ff1S$IglK>y<6l3(3e~#L8)c}DBj^&bF>8p~S7KZL)(*Rw^wgI`p!vEG7v2*Q zsD0gb_1HMYm5uV1s>LjPiH+*2-rRDIXMS#uWzH8dV3uVJPWbVQ&2J(YbI;Lr;wcfBj6*;|k&6$^k%G>g_11AAph?Yo8s=wB5ifbxM`>q0 ze&+8;FzfyqW)B0BA3u>Hta}=I8{SN7*#ACMnWf}}#?7K`4h0x#+;nPbaCr^L(NnG^ zh)g@5BX3C}a8T(gE1@DWf+4-Zo4rpo&T#1f^+Ie+>W&@#v8Aq8GrzdWsT0nA=c)72 zLre>y0X%|;M^K_nPwNDYF?mj@d6_a=46urQV<-HsNI&eY36q99r0X>)0`A=8-~cF& zdOG4S7dU(G*rt~THPd%m&q6IdHt4~G z@U+9mBX%9KA70DbV@XC?tvPCEWT|d5Y~nKI8476Lr0{LFV4Rr{5<#q|!-RoeVKntYiHQ~ye@ z`7TJnbd(*NS#UfMLc-w5XfbSHlXRFzzU$+X!f6eywx%%!q+wum66xh9bR{DniIhES z{}%oEN;07se> zHO=pIJkB;d;Uj!YSkLOy9)GS1cK6;6aDU}{^2h3=_50}Aqdd!$RaSn7K;~+K{q+|S)+Xn??-u&#>j>SqZB4a~sd>u1oAsu^+SKUa*A6xL zvNLwdl+{e9R2q|s#+Y9@7L{2}Aav2MzzKKzL+`veslI-sgw8*Hk3PBUK5X=w?_v=k zckpxzeU@TALk^DLeFOOFc}0}aYHWWJr$NqAkG+^N_L$me*~kvAvKTvNGei)~DwZiA zy%4X~+YY&-sMBa5zn)j|w$;&pRConI8V@6YoeF)RLWbh;v9$_97(E)#t*M&Ge%sAs z2tD_!NY~zt&MtKuJPXHLhODtn6}W8K#7U<0#V5{w_o>_b-2LADSZz>a@2$g0&QA5$ zmy86n#&eFJ_yC;?9WSZ8TyM}$w?ghjC23eva+uhTJJ{V}*X2D{wLuhmIK_?Gb2k(+{>lV89L|q5dRH4VvG2;EAV< zK?&N`2Ror6Dp(bR%L{$etR~I>a<7@ETkZTr+nUt)Vz1tGx_+~&YQLz0*2KSakjG-V zZcK27%_0n2W2Tw~du*_qWuOm8D(KR41{AN9`mjPZG^uwB1aYx!`XwfOsthKGi$o&%ud-?Tw7&!U?*3{{tR$ zzSTLzuse&3SBq@EifJJ*>&I0(MKT506K*T@rWJ!>)*BjB3hN;@o$5tUV&K%X2mBz4m<^ihe&_M`4)wNW_mnuYM)9fk`#RKuG!F&Aekt9{&FuecsFsb{DjFb~KgO;5gr<4*_y$_}!A|Aw_@!!DCIC4fl)3ix9M z!3iNM2Z7yfWLjcs_S&*c5m2}{CYodnqmOa7v;v|4fo>5Y8cs0;DbD-W61J(q`~4ra zQTzFTL$yKQllMnqUyT(fZRyZ6OSce~-*#sIT)ZLcuep^F*lq<_Ubv1v21j%`6h=<0 z7x`5#+>o`J2m6#Zypk3J*n5GzD=|Rh1xULHD{d^*#AgPv=jruDXa1dGfe=KR>|`;7 z^(e}U5#aJM+-ZmMAP@DuuY$_th8AD~2)2kxR9D@oTRa|EhnZL;OfmWOgt-fe83+aTM6`DV5^w3gpu~!6`}c70S_qtZ--m0{&`M>c?Kj#nF5J3!#24J zS<2KvWXAy@^elc|J1F4xYi6o?ZyiCMhk@9TyCs!EK+i&1x4g>2ROQJE{=O-s8?CtX zh0-MZ84XTI`T7VO#6~Piu|Js9_31j0k;x4-)8^$U0dB4-*3cj#$d_Xu2>(7006wQ( zFd|kjj>N8l6czSL;h~PNjj5yQlL{!|SO%yXdrG*4jmiZBd=m|CGA4>yLlYVE^`}*PZ#3yTyQxzHs0V9v zCl3euRkK)T5VVr*Mhv9C4(d90hodQZ-JUiVf%5A!6uk;t2ssyydlgw-$&i-j3RuK2 zp`9hKfHgzAD-{2C6n_hNerH;MXq~XV3nw))%JNt%4v1ZU!@s{Hi6*0kLT;cgcwLne zBteMIkJpx`M~;dQL)m^;=NoLP)q(hUbqDnUN+2qf+QBzp<^cB3X0LQ1-T2}PIUr!2 zIUbOF4-8D$5?ZEqW2Wd`H6d6W1_U)7a)*mJkWvJZVB&gMEGteA!6C2gRZ}i05=aFg zB63_xrA!?ei%*nNm6vX}%AKP$UXGrjU^xkvIh-GrCe&P7zUA4v3ZWJMC(UopB*nRmFP8{fBE1lI}n0}S*KUG~18BhCLJ+5%_-NV#% z&j2;UbiLrYvF8mwiwE_Q1}rPAghoTiBFE7^@QuF`{F$wxzmHDNDj)=9yzfIutY_>Q z6gKZ5AdK+UV35(xOV(FJ<^cJiBGQV?w>@rA@}T|EJXWgYGn>2IVFZAbZY$yz0%!UM zTmEyY+QElXn}#qEaPfU)4K+HC5X`Z-%|u0m3ToPV3o(#6FL(=$8z{O1i;Sj+7T$i0 zyg2-l@xr5#z4JiAk12|(ci_SX`Z!&lXPM_QAh^Y82CEU6w5tZ4k>ho%7lg|Dvz8wL zs=N%~v6n*hK9u0_^_WkEThJUm-DQ4^>>sN4{UeSbHQnG>g%O@Z>`j_=fROHgYF4mm zcdcSn1#&vq+?^WG0+0g3?2xOHmrt6NDctv3`35%fi#`kDJ?X?G5M#_r`*XVa}eOWRTk(}X%0N!sO zt*qON)V7k+AlSTd0h~IvV%&Jwbm3j%XUT$HdHn0MpvO*Rh&AB0 zhUACYENp(*KRD(C_TD%QCO^HL8u{ZDUwE%YTY3EVb%ovlQk-KBwB}cKfHsiIE-5pi z79>TcbEjL(p=%0AA%S4S0-DbI(HpmmdUw#UgC4&P-50zs8r{m@tY1^Nx^`f3(}Db$ z9@y3rVXkEb;Bj%IX1mo_EDO|l8ief?IH{-k|AAA->`jK%U20ot+{A*l^T)Fs_d!?uxich%%r8)w6gBM9mVXe>?eg&oeM z0)Gb!Dgw9=*1?ivO7LL|JRA-4!-&=j=Od>^*(#mJF` z#ru~Fnp;c!?$rWh;$0bC=V%=!@^fd9F^>ya3s zMDDLRvChH}?X96(HzpPyw#srfcl#xj)G+OzNJ7 z*E)@b_T3n#xxs)5i%@N)8$*yt5(+-_xch%?F-Fddjs*PVxMODWk2FH~TL|x?2SQzb zW4OpDsSj&wt#LuzB}EsYmfT4<^KOltd18?4&PWjxnX?y=@B3`Pf+jWyPWO13j}tGv zKMxVz#UK)Z;SL8Y@;nCmDUYov{)`n^^~*xX;;|9VG8Tf;QxrEhtnU#GsU><4y0nzw%$Yw@1_xwZ5uYlfx2_r9vD{$ z4nPa$lmkrNC_Ha!_i}3oKdhSz{NH&45Ve$)4vH3~aus9&tBtil(Vj?)r80l{Ko+nU zvW+~CKr^cQsE1M&DLwc9xd29HHQrw~my(dLqB2|o^M}?cO1HzHG2>EWsJC!?W4PCM z61^DgvEn^eP_qAwm<&Fd9%shCLi=y%ikWBsl=#H!fRqk^kkZ&|ip0HpZXwZvHJsB8 zm%XdG&>G{0;@@~vAUBksFsDeaueZJVFyEY$5iCXiHq~(p4&bC+A&J3WA3)tw&lHmT zOqj?Z{PbDh^PJ}lK>!z{t7PTArj8=4>CXO7B)bQl0$8y?KqtQeI#n7R2NfzzIAjL`gsNy%U7eW#&Mh#&nuLx<*f=UX2c zQyjJk4pfZ(0l!_8?{hh55V5+;JrpD2$k}hac(^W0lx|ajk#oj91MhF0g7VP(q>eWP zzV5i2nmtly^QTJ6Jmf+1-%?N15R3^%f8+GY5TB*h`$lv&UU%4*pvjn5dcX|^NgS=n ziN8A(9C{#B=#&yEC-!&LnsD533!6|P#!VpWV)Y}>&# ze<91}Dvr3GDTnhBpkYN=j5wX#%iy)w=f!RNpcWK5aPgYX+cJ2`NYKD_rf9sx)^^g~yHh23 z{xb1R4EENi{2Od1hsP+XjEP4Wps|;Uht2KXV~H|FCBs4=8S(JTu)ojgY03^HA7}t> zm}XVnT@(aYTn?5BcN8NpE@*0lrI1gdB&Y+p5NU&2G+?kN9h7%0$TJ!_% zPKj2dL)nY5fS}h^!ZY^lSN}9Fkg@n!z8T)Tjq5R=!x9@1n(#Qid3kgT?HA!*I6>8D zg=&}EPxA!|LS8HH zCw$@WzBk=o!|A*_jEA)AXf=ZP@QUsSaFqAdND3ELEcv_19H^gpV`5+3_PmUSlZJa) zgluP-MHU&$eL|h3+hxzZ1x>wqEDFL(qC>m)J`4YWdMOK}ChiA5yi`4=m=^``vayle zopA!Cj7U5qdMiY|(2z)S&Nw>IE~bNzo{xt-YVG-e0GI`Mv1Qb|&nl}z&!?iI8#$;_ zGQ{z*PVFyGjD?Q!koYE~lRSZNUegzGMXAfy3Vng@EHLmp?0c?9@er*-UuB2*#1|dA z@f><%DFR8ntuG8Cpvuj{%r+Tu|K8K>=0!WxK7V;aFW-v_ z)w-PUP6+FZ4K^II=f)w5)u4YhE<(lRxB*a8;-(dcK4ugo67QdgZre&FJ22z7KTQM> zG*~5QTnzmn05X>ya2A5;WRK?XI>;1J!80$2PnG8Tr_h9Jb0a-_iVDF&;X}K z8TDyHe$d=}T{eQ9u#|En-;V#>jYa>6s-Qe*a}_1V+9Obl`e5pn^Zr&{k%5qz0&>fX?}=qWQhaRGacAp!pr) z648+GUO#JWYCUo(PMsMqLj42KXmcdciaYVx$3Jj3k)7|x^l@3ft$!y~%Tt&7)9u;b z@IB6h-gF_F+JAw|q5N{eq##okOkVT4Gp6M><~9h2*TvkLD7J^x-q3|>yx~GXq8)^d z?+g%_2)EB6v?*jXO5XeXxmO0=7PoL@?E6Oz!a|3BC;8MrS-cn$=qlXYB8(EJo(@FW zXW?`@uAHlU4g=kc1~@K8wVk-7<{~xhS#NqQX}L) z3Wk#G$N1r|v(Dj_lWz{IfgDR(SnfOEc$?ZlMM&KQh7;&?g{0Wc3nc3_&Yl`#M zY*4eY`+qw%EGX8@QkP5>-V-});SSumjMv{W8!|uv$b>O}AOrx98{Y+%eyDMO+Gm-4 z8u|8`V*y2X#&7ZDw|9Fr68%r8&3c>R2cRq+C6$P40HqOgfqbJj-5n9wF8AM$SBszr zU|73@i}u3_i{FX4^)W|G@q<)ndb9?7SK)8r-U;Uu@m8}qI6$ZCciD+n~ z2=j?C{Bz_mW54qX(2*O+9907)n3vrd#p8VZp%RU{Gq=1LK@~!gaS}nNL=k^^!h(;5 zr}&z&j512nnCnm>`KghjQ1UyZ*F*Z}bP!!_YTm_YRVnn3x#{EFnw>n}Kci|s!;T~c z9y&Bu9mMS;js6Zp2$J3vlXr~%i^GZNulK0^XGJXAWB_JDK9qc2+sM+2Y<2Fr zawRniDn^6Ek6&4^6IuUe=r&CxeP({oNG?9|DuwK?9Rj8pAcYxfwyn^NfHX7Wz49xb z*s|lh{42MQeZ5c2F}g)`=#kXy``OuT22@^Qg_eb-Krt4E{pC%=0_9}G!MPH%uTgOG za=Dy3Uny#Rm+gG;T`n0kIAtM69&(ky6C*VhQA+`!K?LT^!iEEJ5?kA-7CA*`INm59 zI`JL?Njet4DnrmszRFG3Ss|7}o}doKA3ZQIp$%Jl6SGyNP}hB_`A$t^-B9yLxM(rO z=3U8GsxT2EOe=S8qxuInCk&jgep8*TA|Z4Ii}awVBkU9`dNbJgH}HhKpPhcX;8z1J zLwbHM9+lBpP=v^rG3L&cR7=}l*QE!~mTqLz7E}kL#DTHlOm@Kec$hthdRzBvlh^}=*L>C)#L?!CGUNS+ZyfBy))~a4I+s z(2;~`Ecx+puC9UW$JKSYqdbpx2Ek_PrVslAu!HyqZFJyqDm7;)u8?(Z0~J|dGn2oj z-?Zy1(;2$gt0`7lF&Nf_H9|B5e+k|Vly6x>G9@OnX~niIh2cCoAM>LJ1RfI6V=;c`FwIQ)fEW+taZvaV#!)nKPx!`fvr+>x{f7E{c6DIO@Pc8_d zjh=WqGF=LwNL^OmdvizhA2$#)d_#aB3q9)Bf5arufX>{fiig5$vq%oHjV?<^OqiMW zF!9kj}-t5W~>8|8ImPKZ?wVWgOGp=FD_xoYR56%g5uC-BVhyX^dnu5 z0i++_kALZq)6MOy=333k5(95w1zjijjqHho7)g}`Pu+n>V>)t$(01n)#509(5ir5S z!6_bke~Ibki9pOHA&tk;$P|R5#(nD)@T%d<8#G8&D2_bqmT>@h@N|n{0L$P#I&%fD zB6IOn3(q5c_+{MivyzrQ!}dVm6WkoMlwKbK^r_U_tS}c31+S zprC?hceu}vaMr*D78b+Z{BpaUnNtvcC%-Ng42IFKuKCFnUKNQ(`pDGYN|`?PRl;q+ zl7JekV)mMp<{vOEScilD433ZtA^R*SqRg1vx7O zp$;i1b>4nMplLV2=H9!1FReQWH6KQstbH@C;vJbswvz5dsF@*-(-}pRk>3}@I^Fg7 z|6Ki)HK|a<0RazRIgf<~mvPaR&^V{_1C?g5LRO}6NlZnYFc#*$F}kMaOc>fCS|9hW z-9i%??rbpYr$hlsf`w?u-(=BLPUpzS7($KZDhG2C}*SvaycUwD4=t*?k4e~?CmEH-Qw^#@bFc?WhxM~G+3H#aROjCUZ#Vx zm`mK*klhUf@6vT-SVH%U;I%$1V0a1@$s<8id%U?3Z$!jv0Q&`ZGdSn?*w*>q*F{hH z9$;xeGDzC@{F&-?6uz5%3d@*)m_eZCJ+kuEl_(o?@gex)+l*T|z!guD^sBvl zI<-XP->!z2OGort2g|M0;v;%+?=I7TvclJTP)N$wR7=%W|3`M>&ypU|gfnfEiBc5kp zte&|?O%?U6+M@dSoQO1kk8b8TrdP@|4_X3AdKBYXqd4!AtU#oV4G`PAC^&;)RVkjD|AvksY1fV&o!wzPe;H- zL|}PJGI=u+nBU2Gkxyg=ieE4y9Ajf0Oc`9Qt*~ncfH|O`j;mKm%ojd1;Lf@l_@ZY0V zy?-O3ZL%q!Px+aMI+40k{AH#)qv9TKaSLDmV{RZo{FsV6@>-<0HVpVzOuK8H_wXu! zW+7A@)8_98@Goe^@d~5ob);=sMOg6B01)V98$$=7O=1Q;ng?aHz^QITr+AzO6W`+~ zjTw)Xb9(q3j&9F*j7(X={Q?K}BA!s>LQtoT7SaY2yc8w3+QW(1FFkLBU**{MgaIPW zV5iVrsn5-og(H3foPJe0FPS7OKil(GvP?JM3CppmU=ws(r$e8y_B5V+d$`nXm?7@C zNHK{X$=%kWLw_dC7Y?JeUNaIdMQ8&Iwq5>>+ba#KF> z@ORqF$M-~Y@1e2{=#=YRX>Ux2@kEeja77+e3i~(u|9vO{lUo))Y)md}3(6gCI9G7u z;NFZmq1wCnlh+`}q(A1k#|g&8q;lRc@M$<|zi~Qxf=rI zWdqq^`h}x;2lJ>|PB3|jRjJTt0Ne0Py@h=a3Epx!egJ&nexqn+9|Bw%SA+zg_nM?4 z2SJEP2#o0;(}4M-#1|aT%(LNmo$m%!MDoC=6*|*XE`t+Dz>{6}ve-M;C37#ICb!A> z_#ZL(r5;?eTHa&9!@V_bw@1dZ65Jm@8aEP_#Z6PQwi@9Y66=4`BlokAcxeL2xy&q& zIaI=l$hXDsxu3rLwXRdkNazBkk|Op3+8AWR>-K{#)*@&`8ExQ3ENE7cY8u{0RC{SJ zc06?%odk*VhPUItV+9?Bzw=`Ps-_V3RQO>qqhR)4=H{Bjr2J z!piqfbR>`hkQ!aRC@3vo4o(9=UIMkYOp2}}2#(H@{k#;i%KD;S)6`wp{C#gXQdTq3 znJ#^9N3>{2;WD^aL1v|{P0tPm=rpMg`KXs3g9z!YX39q)H{aggoMQwBo=CdVWyX}k z1`vdnsTfp0-;891KD@zP`XR>=mjN!i?-^fSP{P;em4B`ZJ{_big3g8;@>frs^zE$T zJ!b6rQ)1O|#V823&shDB0_qdaiUzKO6x@ArmE8v6ldd^yTr7A5(i6<{%dOY~3_?=ePcB=zGCbyBvTnls~8E4P8aLq#L$+9w<0BSdRYzqL(uiuK6^`-DKiQvLdih| z`|ipKL1(3Zl@qF(K|~|%#FE(9l2$WDw<)G`PcPl@HUnrZHhHGbLKhDsdtqaM#ask;ksO?#IWK?^ZO^}jvd5pS&&X%?(*JXVyULV;TAl>yygM9UOXY> zhbf7T4O#VLMdgwq0h!siC2)A>vezl)g}>7}!Vtov2o3$f2Od5@nIfnbvmL|q92Sj7 z&h2Zz0vE~7rH3+^-&SyNvKCPXf^C;U9K%8P)cDsKOYF^egMq9|K$p;ML7n=y!Z|bh|^iK=e_MawcXaA?KL0X?P5L6NEzqP$zZy7?VSArL{--fLx;xagi_^% zi3ZAAegdb1=!T~}W6-Pz?DLV+CyTsA&;b5v7Eo@Fz4etPxiSWunb`U<@0S$W9#udQ zN_GOJo#r`1i(DeQ9PoP6tBWQd_tSy>pJxpZUFc^JB*xx92w!CX_4|kk_iea?6KoA# zsxz9rk2ih-2UTAuE>W0ePI3kk&@n;{%Lrznhz7L%=o1>q^!fuY_@VT`%7tevXhD+Q(^p8z#m9?@J6_IZ@L1^x(nB4`lGdcvYhhon%qKf8hNZ9= z!qF`{ZMS;jb!35;^bm0ks>kaWK=Nv{(_g@e)A@v5*rmcqeDfX@*jzpOit#_BLqqZf z3?<@hU|zo*N}sSxHY$OhXUN<;FtV=a2uxMcjeJS87D`akihb&LqMevrK>_8_GaqA$ zk+0~s zd>}><+C&*$v+-mR&?M0r$T7C6XZ*TceUOA3u+-)jy30UB*6Q3>h?9VUYIjT&v|4^4 zr+=cvR?^Fo!!e%|7kgznA?)puxH~Knvv4i!LkAvoOt7+_=uuB3@fb@mnMi`QVbTUU zkAUnYFsTa7lmn-spq~RgQ=S8FzO5A5EV`7wTF!fQN(I0vjnDxJS0EA!RrCOT1@8o7 z@v{Kz#RZ;=FoGdgCTfW)Gz{h8Z7g!kpH_A~!*sQYPdEBfJ(actcOk zKUmTi3#`0mHfEBPlqQhIb;u#vDRWFPpObf|#`aws?(s3v7~-`In87#C!5CKT?=C^2 z+Z@T0RA35^&ioen`!@|Or%sLk#0R1LPPN!TSwIZdu=M?X)nf!_#Gm1RBAPl_=Ei@e zi~CgJG+5uC&Q_XmT^hyqj);9tAm{p{#tX3GH%?^Jn?ZJ_0(VA0@d^NUOc%QLncIs* zHOWAe*+(aQ{SVWsMbSjdOPYT$JsETK0D)FJcrZV;)SMZbs5(-=<-o@vC+;K#bUEq} z;i7FZaK)1rW3G_2C%@^?8j7jDbAK5umulQEUxnXpA*C57>4-#J+UYK?dHvON0s*Gb<~)5qWD_ayfXE;k`Cde)Kxqc%e{$>P z$(_SdP%YIce%YdrD+TN~F))R*tc#V&gb7d=iuP|W2SBDLeF!g`n?hozrn*OJpNSG> zHm?iK2RhROG`&$!3$@Fx(wsi@Gw@XbSM1yAr0$Ypw)%iPNtIxr}Ky)nI zMut{w20=#W3IH^fQY+k3l|@f4rpEY5HnEh#kts?n`^BX{!uS*^ow<5&G?u6R9LLgs zbTzc`jH7RUIiX(^g+G#1w}?rk_(yOYKKu5K84r)sbyR|Y3EtTU8LZGFKc1^_&dGkU z9m|UZ5-(R#?F2dFBZ2$MIcHJg^<$^B>ehMHG*388mTh0ss_`tZ0j9~vf@&pSr^=M6~H^n-Hl zD=>Hvjq%H|yh@&a4Q6Lz1Zep=a~k+S^#$aaf6t+>W5F;3xMN&g9u5_~Phw`1e0d36 z|5!%8P>RM)lyT?31%C~ACieU6#An$QFh7kIY9qt?{4jry9!d4d-wGi&tFBj;Ccq@dGW_)gGgmgM39b zX>A^ki1wV-08HRrMsS5ML~yVYJx;yE_glLUdOKr(>{^5OpF?g##sR-JV85e zLci!89Aab;%g!d*az)gUutT4YEP(C9e#bNkX(+V&oq!=dtOmv!@}(Ry-S^5io7D6o6nK&HXd)?^~=cJ*~hO)hZniBz!N0muYb}u;Htc(_T(Tgwz zPl*&dQ&>V5*e3C|YsU{``PVn?_@k07(hmBV`B~j4-c>icY|pp@bz(>V|t!q&NAgSXNYG>sT5-K>T+jyVEJv zVYf+3CgT_WNJ%$faNozaPuDGO)fUO5N(5GJWef*$UpRq~lyX zPH(m<=*$GB$bN8+BCMQQ$l?czvoT&aokvZA#6ZpLANmUv7tn;qh6TPWqrJEFSs2Vw z!J&b72ng9dYA#mc~ca@GNO04PQ+nu?uy(!Mc}N6WhR1n zmOr=AQrCAg-seP<>k1gpq!9=EiUE`Z*BOt`As{@4O82~!d+rIq1d{SUV~O);_`)vU z)DN^@LEd6Ocec}KIY+Zz3}aHKCivS;6v+Q>t1bGP)^76uxd0&Q{c|Z6V5=E<09r`& zyO~XOA)d}Dhrflna~h`~bR`jt`JYUqfT0lGcdn4!EQSj(g%!P6BruPm;iTG6(|~h@ zTXs$v$4fPG{8^Xy0x}m*-ITNakAR??uS=1AhpHR90Qt%zLh2{5`BaH{3QPO6uFHX^ zZ%3V(y4VFN+<@ZHWQ(FPo?clMz-zUYo|^;hJPQ({<2vrIFi6o2H2Btb-%a*u6?~Uq zA&8}(e;~>-3(s}IbhXc-;P#c)RaWl1y|PdBAo>XOUC{hUA@H1lWvWWbCvRHjXOBUs zUNOr5@QoFM*I^FaRt1~j`GpUYfazdsBGbi%gVDUxN-EQZGoGH=rjS~0A)-NAadv3y zd8X+9c7uD(D#caRYli?jAD)JATy*)u_&`J_r;A4iPp_@kxm$*6wy21tpkZzzCc+qJ6W(#CK5#}mX z33wHk{Tfj*EYa;fW9K;@Z~QFyDj}VQ4y}uvPMrwjs1-1l%V>Y0CO9mKpC$7FIw?Av z+ke5B%5)d?!_&5{%eO4s-!+At)+=>Epdno`OIpJ$`qJ;w3b;xK;y!^x8C@Hj4xJ{a z79){`Gi!XsZx7o7Pa`Hj;rru?x@A+6Pp^gH8oY@l!@#d8PvY#T$jQj*DieD}!P|_qGUb0EYPdzMsv&;mSPekH%JUTc41~6Q%;L`V!CC-q> z$d-YDy$|4d`;kC%Ajoov z^N9~3=U{c2vz$N!rp?hBC1%NFQXqDf^P{{<3-wQf!7bWSl>od? zj66m+)(-}dKl}_&YPf|wq$AzN zUFK++|6;-d-83!_?~6_rL7QYift~AJl8w)KB{(021~jt!;qq+(3Ku&f-u&OQFXh*( zBG+6&`_*@ftLRDA`Uq@rXS zfJEYj^Fxp_2SKxV!a^yPVmAZ~Qzitj5J<|yek#&aVD@Nc50sCx2AW1J!}kjzu6ywC zADDC(aX@`g1p&z{p{-Q>A~YI~Oi|5LTZVDlro3JpIpq*t>dQHzgBLKV<+4D;;dNH1 zGzxmaSEcCm2tZ>QSb_!$=UN58=MoS-?=R^(RmQ)2dgiH_m>7VJ8P)cE=)OFN&3lY;%|QEQ^x}GT6ZAm8Ols}s>VjHHWy9s(OfE^S^i;tJ?28l zXs!CqA;+A?ELUVtO~ToCXNQDRAEm*9RNJVy_bOzuqK? zug5O$)5;J?R~??PpnFK~%2Ia^07fN->q2DTACRo1zW#N_km8~1Zv`y*IKcN^_c_NX zAqFVSeRoHgjX$)1 z^EM{8NzLaWXW3eENRTejD2dZSv;(qIk;w9RGM{_Eq7g&+dh>1n@xj>oPM=y!*s41x z$5+xIa{E&~eENnlU{Z>-w+6gCoq-$Zff0GQ?AP<*d}04_c`Uk`hODYJ|BAL6HC_HA zpKB4ay%O2X*mjS4b=@yk96{b*KX<+PrfUMiVc@-Qo6+9LH63xR-Pw}LA9_8%yRSbj z-OrPzJP%m2t5bqh9*4AJXXk_+e{aF~#rVSTj86XAI^QVwZ=2_C&^<^zEATxQ7{*4$ z0x>ziS=o?&{^HB=sz+=Uo|Bp(K|fxkf5o{19P!lb&?{>k*FM4lZJV>V{GZvRU9w^S z)p%tp32O3b!jqDtCq-~SchH{R$0GHEFP!!ZxV&`4_Fv*ZA;Ghij>HYnWWx^uIVHm% zgS4R?gsReA-ja{!Jgw_^^?-7SGDpMrlcR0vdb$xWhX?0Xl$JKkYOVfQ=*dr=YaUxN zzR94|2f9Y;sY#;kg!@V-saX$BeSWZ58=PbJOAsPqybwx!1c@Kwx2g+3^%VpKd86-s zZEk$I^#n?|bm4q;3CHbcdL^UOVP{Gbc3MxK8jMp^J5{}tE=Qsti>A!=g3VPXTgM_7 zG>jmi?o^+N%Wc$-XyNbAeSAM25^u4F0eYy`VKwDvO-+H`3l}v@g^RyDFtz0SySjTl z{c!5y{*VT+Sa%f0CUiLUGqZQ#Tu-3OUaaqt=%F4m<&5=)?r9%+*P414j+oHWr7x2nT(t ztshWjOVpbmYfN!qXv6tD%_7vob5s+OO>LVH7U~~$2j#nwchgpDO-{**ha4N57_@WB=1);4x@C2S!*8X?>9Xg$Q3S$- z#?t0#1!H0`7n+ySKf-0JRZiPPwW>(JSm5cvZLDpyux4%kWWaPUa^k?%P?(%EJy^>#u zm-=@Bf!072mY1^hkyb55@YVwdR0@PqV3m$5HkKRw0!_ej{@j}3FJTx~oJNfLiLZ_F(Tl;EULi0^n1yb0 z>1+D_{73q${MUb{yB{X?^fYX5#4V(WW0O25Jhv&~gD=8XHt&ITX4gQm`XWNmfA8{N zs7+fFQu6uXdyeV-od}^gCx1Hnh92q+T&#RM0-#+NK|s6}dt_Der>>bK^5sDv%v zTo8T?&4ou|#NH`8vWe6YJ0`J1Pt@!~B6 z1uQA|XlX1YwBHA6ycenW3x43q&H@2P)F7RWi_bqaA&H;U;ATU$?Vwblq>c!^bDuaM>aJ1;cg5~4kQqLRL0)0XgnQ~P= z6urK5b$q$^+{H)j>nT?edE*aC#zvUjA!IGMi^WO&ZBamM@Xg4{xj*r6^{#l#v= z3&_)M?aMV9Dfbq9YP*KnaU3}>az<&?!Z)!h_WRbK(u21NWy#cw7`(*?#p{R{9v+XE zC+{@`&E5Q_`fu9)b?+nSeJb`}V;>7&Y=V0_FE7u@mbKwVT1L9?ZL6ZbMsuEXGK`dK z*Jd2wb&L$MT}an&xlB8sS>m!gzbgk8wcXrn{d_#sNVp*L=4@8pH6B!-2ix!(grv(2 zcoXxVJ!}=nGq5?*pw%-w{MEo5#s6x^z{2k>8n1d_CE(@ zO_;0p=RuLzC|xw|xxQd%9%5RGl$NcZ3}xQXjg#XuOp9cWiNz3Re?Svmq+>a4Xq4VaMr}7AAR`XK8f4&pltOD`Zt|IkY;gvI?o|X}#O(*S}7a->3|Ed1TCo zo;eOlf&Zb^$i(Y-1+IxQ*|p1%{#WAZ+=?9b0L6DsBp~jH^WTuQY1zsheBK)mmHtVI zb3Qv9ubJdI-UgC@3V)Yt|ui&vBgO~M7Dt8(``#rEqE0?fX2-}`syKvO%yIJR9 zas2hSe)`%4K!jpgm86^j7Z||9-q_Lk*Or!W&85|>;%V5;e91A2zds~{lBXi; z*0kcnE2p0^)BX)jT*b|Xob48I-6J)h(hg8=oNm}zT!LKIq%OaG(O*{W8!wOU5WQli?B9-F zbOTO5ft2R^-_qfu>HU8$k4zz|?;rllnR*lOLKUooAHgR;hN8{(S1jtIC>(}eVWxg| zQ5OoXno|)zQ@BX6ADFP5zdez6+0mvbALC-=$wlWEIm*G`5s!wbbs-~6L|Sq1XP z+@YD2Ja)RvM}(^9cv_(W3D6S{oU;1xTrURn;37XhO>0CVRnC&FeIeSM4w#(BMs-F{ zzXxvVx4MUnrj9)JY%ealj>zl1{j-y@Sa+XW-j)lJUv*MV&#GAs*qc_GQCSrb5?k%% za*m0U*wviS@JME`Cyvv{QrT_`-+IZfa$XAQSOY+%n$1Tz1k6eZWIjzy?b`@oC@mlT z6|5FhLF;Li1=+3P; zVGAeGUbE-w{^*nKKVZ2(Yu1YscNoC~M6Oq7D4zEKzd_1VxiTrR1aa*89!p4yp(1$r zJye7lFX0s=ATX6N{FbdY`m^xflV3vrO^j$+Ie~oBJ>Wsj|Il=mQBk#B`^+$;bVxVS zQqnmzqDV+c2#5*@3Wy*`&46?(Eh#7$Y#;M2{+iCpGhHpE#{IZHyNvO90`a<%XO_`u+WVMa|Z|H9Lr5sfwsH2)(OJ ztuOl=;vTX+)1qfrISGwcIr~hWcV3dbzSA^7(V1=i>t8t>zVB{n_W|w~J4vs;JD_yr!U_0+x#oFF-_e^&teWDgk+Ib*7t@mCrUoYYr5-A zni?t#Zas*1un@T-wqI$S0Xq*+2bcuFT>{MFTmU-=V5u`7H%j7A1<#HvKkT~xP>xY9 zgPt)hu?w_+Gi^BW1!_0AZbU)PPp0f8Wq01<(d6%0@qWD+n}#EBd&aEmh=qKzM1R@s zc^G}|(eYt5GjU^}rg&i9DS+r7UhJ+zOz@q6TB==Gh&3w&-lrQS7}=PFh;3m_%jsA-_ zxeMK*O|C|yi45P$u*|`PN zhxMedB!{6g+?<)7bv!JaI^t$izUa4zV$F6@L}b@`>#`?JaQO7K4A?ZKZMKtsk}jeiz6w1^sW zZn;oc-sMg2-il14xcbU+tITpkXq8?;>elxd+jt#pY^nZ#&!B{6XPf*DyEdKE4I3hf z!z^m{WMBF#qcoXil*of!9Zz*``V)|_f04M>7|_N=tRB>3J;A*vWc}vSSJ{T{_yRa{ zBJG|01Yd&snrK*l40QtCQxcAO6fdpL;sHVrkPJW=F0N>S-)f~79v+@@8r>FfnRFIB>!Y4-fV@&v?de| zaP*-Rm)1~!62HavcQ26Z(dm}kMhcl`pNjA8pyCu6B%u7l1_Qi%-ipFG2q`M4_lBZn z!&i`MeyvJ+DZ!iY>R^=xowEF7o$IkcAr;n8M5LTdc~L9uH-Ev*j0L{N9f20!z&s{i zgHmo$oNihtBGH@(I{n%Qk-rkKxi^Zg@?`glUSepL$7h-CK5XW}0^Bl<)F zoVrq+p0%9lnxmwx%YhM>e0FF>t-v`d~jzq0E9_xcdC{j z54m1Z|9y!5vhz^yq&MN1hVZG&`@=EOz4_Er2TUkNdvy`NO&o7`LR$Yd?5%n8AgU^z zyibAdVcyBoa_kk1flilc_jR4psJ+~m0UtH;D%l`>g3d3@T-4MP5l6%Z(nJ`L25#)o zbCM~%`>}2goItkZSbS#9jQ7*z^&8Y-#h(RWlJ3i{dl-sV zLELr&YbeZ$)86=>v*yVR4^J{`+f&{}iZ=X9mlRIX8ZM!_RU@d|qW;p`;M&f^By~it z0WIIZMlq0z*G2Z0VcsFCTj z?EJ>%XwaXGC=-=^LYc!e=xsK)tEc(D)baBnwwe9@Kl&YHpAKG9n3itFzpr3nmS^_M zqT2a;=7bf2D!k#?lBvWf80p_Pl7^c(CH6ce9_U$U{@kzPaOCo>LvpHd1ipk zUZ(+OmMLITHt4{yy zX=AhNgo(TBm?9g+p%u8J7)DrA8=&iGM=>4Zluvq(3rq5v!OT4?YFqB1I!Q+a+VdTt zfAjn1NDWa#JrsZNX#kSF5c$FqUoV-uxA2{j5Y4a0;L6rIKCKxuL8ygz7}}sCQ0#lC zXsF_(0-79vjCNUO#x>Ov=y5QPm(lUJk`Oe7DWybyv2fA;*W>L9Vpioi=mqirH8|oi6CIyXY}WXc)aUo+cR1zP;QV9yCj%1au;fxi z`YMwdiF2_IFfS{P-E-%rfVntc7$PHOAW3{)9i%dM4s3Hhw)SokHkyh2j_rqUKbbg* zN70#@?nX=_$d>fY=S4(BTE2JT3V3m?DY)RH>2j;OKLm-}$n~ecF%Bxk+gm7m{E#J4 zY0@10DR7UOU4;;x7_DP;_@?P(=qR)M>Mv4ezH@k|th!NtMMqJ3tI^1o`iBvz4C#!Y zx#H{DvgVzI0Fa>oqw0Vt2SU^fml~$tPm>q4lo{NN++8~68jpQO+?WU@%mr(u*k!G= zfQ?>%kH0ZOK*x9PJ$~ptlPll$XJ0LU>7Q8pcVTta{m$=_wwk3Q+-X!} z2B@%%890)56&Z*JXWkPF{p^WVI^ed4q=x;^)V3 z-JHV5rS{ zeC4UBoUX}dBb`MiuY6}8 zxylL}!~AF8BHXKBAM^=p9R9O}(=Rnd!x1CKxoQFqyYcJ8m*c|1qU?dzJX95xU!0(V z9gOm`m%JRCrqiQKA0J#Dbk-j-d$7tyv%+L~suo$JQ`3~p@?>GLwLLMTaCPbR_!3{}X|P_t_pw3!&7AiOk^Ou<_M-Z^ zSATY2g{@G+yb4If5JHy`$}2h#EdhGJlWPAG;QPTVidx$y)5hdq85Z~v%<0kYniD~D z?)cNTw$UN&x&07dChbva-O*mAmr!Z6R&vlLuTs*B z^6n~_S#uUF3J5@mu_n+c$yN-nw78%FC_~cxF9- zJ$g=SKRx*-&~5D6C+x0U)P_J@Il!05HXH~1h((mc(l04aMw8+ko9 z8^7;)eR@~w|3WBTp804PH`nv7a^RmObS)dG`H7QQ`mo-6tdv1an4-S_fD1gB0qZZ5l~3PoobV&Y zDc6TZ4hH!^TPjp{Vp^|X{ckT*@ zmLrZZd;%t^F!YeWlkj|dVK702T$N+!cl2Hr!0ex7dunCP^0n1qgy`6en*=Ox2e@dH z7FknKVHpSFi56m#BfoZ}KlEl;3>+Dgo=FlHd$|d#x!X%$s!nIwIF}v#liR#12@r>{ zdHSQb;4_;kl%lsUm@vh4U+Wj9iU}(F=ysJGYEEMpJ>OxBVO}(-775){!T%9U7|QTF z<8w+{zo>`8!^q*^(4&F2VEv}FD zXc~oKl~p&ujCt;Kzo#KB7ypUVsn;;T(X)#%qCzbFjG;VMk~r44Riq_8oTCJOKg?Kn z8hmAivPw76iy5t)9PzupTo~x;OLr%YQ-)Xs4O6IW`R9EYW;_W2fCu|H>PI9B7tX_16^`mU7R zSs}0w=N@iDG43bV>$KiKefr~w&u4{&F|>neI}r1{a?J;0!E=uklmF;R+C{6z@n3Eh zf70&t{LT!vg^4P8u6#fEX)_!8i14L&DBT8J-$GS$I4G1VhHbIg4T-+qL9H6etK9yV z9+3VB^=q|#)qtR!TlrN=ckVIaOGW-SBxWUyZ1(fM!@ub>6?Zx~EKWgZUfB7UUa3H% zcbfO?(i~w!m-$=N>Fy;g^;F}X zMp#ZfZzB9gIy8OQ{(A4dzI39=M^1U*Y$07;1nz*J7Kc#0<0XX)Ya1$=-!4_O8g#T! z-_!5>;Wc`4x5hg4i|>N~I@B3>iaR29z_9_(&&qwts+j%Ei`ySxILT-(>Lh-<6>_Q+ zULU!J5|?0_jLVq+nLtY&gEQrbqiymVg(}RTw1S)tMXh>>gGisuTV|MZ_G`~+#H&zP zB7IToul$N+bnp3?0G|06r(;^j(|wZmvsLmIaPcb99A><* zmm9DB;j@ygHDr;k>q7~#`4 zmirnn#RRsRcu~9wD5B}^-x7?0mABI_)QI3>*wONt5&L(I(PmjXd`OEl3~x9LE`zaS zN^|;W&0(zLYB&#C>x#3T@%*J4lkBJ{dcMUgk%9cYP@7U5{d|j30JXdil{t(SdZu^a zyBEZlPgM@H;v{dPw5ho+gnmq9&AR27aqD8%ElCa$f7|rH{hf9EuYnrp!@ul~;6_>C z-d^Ft*0t$_3i&|aC0fnaQ&r8@BMwMq&VGO8PQ~;GhqE@XTu(-&ebch9+8_E;`RMGY zI!ds;yh-u-yT5e%QDn~&pQWa%ybOG^FJoP((f3>HR7Cl7fwxC7ie9I_tU{ulfbYYC ze^X>n|2EeVfFRKStjNmW>7nVIR9C zul?z-?!KTLs)(CcqEYmR0q-{%&1$wyYknFZK*Cnv^4V8bx2~nz_iWV^q)ij-%jObFN^Q_lR8-*7@#?+;v*=nzkqIC|E zs{GC$Z#jQ#(P?yW{^;Or{@>0>RU3YF+9}FT(r0_htpy~=ZfT(+f~5#5|*elHs~l*R}Jl>NFbQIF&ygn}q+QsO++a?~g?NRr*LsTJp9A)ntoq z{XVV{CvcW&c`xIXMtC{o?(Z(45?H}KErZa<7ym6+YFWC7*bMSyp^h+-VW*xZpPU<3 zoSQBv_T--mpuaDo;spG8_WmbzOhOv-Em!XPXEd?Z8dJ(V+qgaZAnB?&gsg*>cB{y)$*G6h)XjV8%bAjy4U3soOXwkUfTLzle#3H${~>k2 zVBy`1<=OLA=8LOeE}yeqFPAm%_N-op?7*zo+h*UxJ7IFPTD6_xHP+L@Yt~#Nk3Q%% zG~!OaVhRQ(5aHvyJwXWVKb1tGJ5octe+$o;&a0FJ!YePNgGXRw1Mb+n$a}_M%IlKD zB+FM9vLfXDf+cj*4W>e|QY=)y3H4seAWZ1k0-nCF9%Uin=)-)wVnbD7y?IeHiD^a; z;clrP=kXDO{#PWkY|1YtSW~P}0^crWTJ3q?zHDy8;`pCq&)ziM&R8qi8kPU;yHEY& z#=c#dX$g$u%yLt{?cmbX(j8KVefT)ewz2!+Gg4sKpLDjA#nP_C!)9IDKTh9#u|999 zLiDlKppW(7V?|7OR>RG_fg3(ngEn`!RVL2}C!Jk%qz|LK)Szub|DX3!)dE%^|V*ZREmFZ;JD;E ztYF51HaN{2nLznI$L*lx3RWqB=mPrrErwS*ScQl;dacg)Jf>#k~b ztzLPdd*0HItGs$(y0b)+&FtBO&?h!Gh#oDjQ7D!Cg^Y|pGtMlWcx9?eVsQ2F!{}KC5rD7fL9@O;$uycrhmzC*i&hMcx=4nKI zxK7(TD}VR{hwB1yiw%VfzXyWd3r2vq!97v_FjAVT;De-Oh(h-zr3CQC%wC{}17`oq z)e_6V&HatJ2R-KnyZsv5nnZyVM0~I6a70C}GaBp&$- zQhxvyJ5ik6zz1`{pOt#JpUJ)$Her3nGGTLSGx)4|(OZ1^uxY|JVB;W&L2K`bD30=O zL_tkh17#$lwDc*KHd)qvVt~>v*nG5QK6%eS9~WRVuCl!PO@4S*{7P)oXe?hAS)vd- zM_>1KgU9Km3dd-bR;Y+1=;Ha%a z$IU<%KqLGP)Nm(XThJwblvfe^g+h7MPqHijo)uCpFDi9$0B!Z`B$EN4;j^z{DUz2L zA1TPN_ddu~0KWQakUB4c(l$3?6}YN0xO>NYM?!NMdC{{y=yfafK}Xf4cKc#ps(#DP zYM|fF`^i7 zly&dJ+2R&@E?vxG9WU<6Vv;PqDJgvA*Eg}RzP1`E?(339lH-o>|*Y~A664EXO930UD%Ij({vw_U+XoWeK)z` z{I&ZEhgq}wxZh1l>~RcKG?GsGpZ|)!_2sV)QWZ7#90%7?tO*`LuAPyCzU8hQZ_}4w z^hX^&`0OY1LnGS&S!vDzYunG`ac(&d?^vp&@)^#%tvEq}{Yj0EwosAxYjo%HyHB>l zs9N(M`hCHq(`9_~K@-NoD-+DBY6OPun2H={bZa!Rr`LePsvTT={?M8dXhxM&0S^2f ze`=cv6L&g$v}6xEj3cUg)i$3s$#w+j&-9EuS!44|T4W!R^IE$GYyqZ}Iuxr3WIOuV zxQLqk+4`XHddI|%j;MFI&M<_j<(-!kvI=WlT)Kr@vnbbgBw=>#Yy-N z0vUQ-(YC3L?x{XX;^&{1L>LFDT-|>9%UPn|J=C8EqJ{XyFOQ^Q>a?$bNcvIoq%{r? z#a*fv$I-z9wc3rUs|n=KlOaix&{feNo#&;rE8r)avk9`< zu<0?9HC*EW+E`)z#IDGG9M&jtTYASPG{eL*8Ff~Q@+Xm+z^g69$ zv8aaoHWHma)AsswezO_k_`1E4!lF>jVi3>HF4AN3GPlB*v?N+4J zxL`A*Yj^I-k*tC4TQ}C%fTB*ZaRIF%^PH&zlMADe!QR9UEAy7OZye5`gMSckFJh=2mq|jOy>Voj=X>vW#aY3`dFiN%&iWhk ztw*DN;_D)WfUzm2fP-8n7mR`TtPx$xL8n6x7kfQTp(gFi*{34$Sw#D6aL-9$E=Cw) zV$3T|!IPu=yugNAbAH#(8oTw+4tkC!_Vrzu_WB}y=$Kt-{GH@>aM$^;^H1V<# zg~Z?6`-cPNk0>4zLUl7Hz0bybh3)*?S}H;XoyC8d&ghxGM>^Lw#+K;zo4ZPbUXq%7 zoWo?EF!^COG>%;vJ3km3pW#w za3wsxzAhW~h?a6UlMg3Lxj!*9fis!*H&Mzly^HQI##hwz{8A$_@vR@mYMnhT1QIA}S8^Nh(Js5-YL4suT2;lB*X>8+k zp<~DFkX*T>Vdi}aK|X0=PAkB}iZZpT6ZXJr*FCRF-{3I`#q<{>3m^}ld9#kA@ZlP# zajb-IeBcxF8?}(rsd_lX7W<}4PpYz}_dSo$o_C<^jyFgy52N6JL-M>Eoa~@S1ub6@ zzpMCdLIPYSt#4-}K6B)g5bjTSaGO1~@ggGqSWd6|45`QXltP^p`+|XdA2SOG7- zgS5i>T;T(f2hioo9bycgzrq*`{{ZZ<6%$M4bBZken1vou%x3TdIMgEy)9nG70@UwX zCB0pvLQ8(L`K%>f+AlJ;hI5H%FE1q%&7jE!y%`+$JNWL=0N)Id*M}W8=E99WOCj{5!!ry!5`ao>{zc`$67157n+e_FKPE~A9_C=A(zh!~=N z;Nqa0e5HVQEcm`0hgbTHvN*G}f(_V^P>F$bjGt)heo@BC0vzrLcM(@4n;=&A-YKGr z%4m{0c8zPrSiml@b%vIJ0#=&+ZNN!iv( z#@d6>m(`ceFV6nY>^lo!Yi$atxuc2=kczE z_~+Mje3%x=d;UpTZm^CU4s=9&;wjWL4Pag5TRBcmHJdL2@IR`)wtEUIwfB>Ie77_( zJ)M@f%;X<>vQmtmxS1Y+dw#7-_Us2ax?bMvqbzI-7=oJgf?60s@u77&Q0%Wuw2P{) zrb=ZcAe;e9Rq_TK4yM5yIrc*BQam&|kWNsme>`sdQ2cui!?4H9TZY=QV|RV$lm!mW z&r32ST=LQ>p-PQ;&p(pMiJUL1bXPSROHwtNl zM4qxmts1>B*?bqdoY&cTR^DJ)gB_t}8LT{H8cndQ-T?x{Aw)YXtNV25%fD4lAl>ix5V?@paCsUSNxc~-{ zer>7cTvo*9O$eq#GC338L>q4~w+8$coJl+l5AX=ka|Ptxf7tN?kX~-U?(AG^H-kt6SEjZ{#$9l`88JC-vG- zCG7K}dg_TSc103R-h(frZ8x49dWxgrsrT7m878;S>3Jsg%t{xZ4?*MD1MXAzyr}?g zg_1hUzH1tqSj5<`Vo18@`uWtFVfY%LwtB-I@xgS^vW#3gaVt6875V)p0+9B|kH%hn ze{n~rc!=b1N(Q#}4hZH^I~RstwB#<%Z4Nbd;pok?!i=#>pPPU?qJ{sDKm0~y?5@vy zw!I)24Ub!vGA$FYJeiT``A4y+T`i5SdlngIZWG-Yl3(tNj@_?1ZAhHAsnHaPz)EXl zc7c?Itq4S1uKlu!_tWGBwuyKabuoW!jZDfU*dhr8P*NGvlJUG#(70t`3kVnaV+nfQxQW1QcqYo|w@;g;me)M-5OzF3Kzo_tuy3XOE^0z*!_+^zZ>l<2;^1Xl(OhOakY1OA%cJ{% z|Jt@hEeLAJ)}YJ+95R9vpfOAWDwoBR&@6&EJoCyV&F7!)c?Mfk-ijuJ!IE=<0hQwL zo`&;L7X`ENh1Xv!kLRK8TMY`BapPbRlJ*@liT z-{tGuFSzi5w%kiU5y(ey==s#TJKRsQ^;oG9V_%hvK1dCSM1Kj`^BlUc~!U$yYCg=Y1sbR{9R|b=v$d{ zoy~Cl)gq2})x#@CgUS0`Rw?wT#z<~NGMq@YsR{fCoL1Qirke8q;NchUZx1Mox^oFI zfoLQ2Mp-~wFZAg4JF?@e+Yyu_&_>9^;V*vfqe~F= z>LU^N9ko0!1IHn z@(L1wA>IK=71?qQ@APB@x>1>eH=!fHd^Vt!n(TWc@*XuXAFG@IadLSzisGNNXF=|5 z9>pcXtbc%B4$RBWF9N_tlmb^7At{**p{W1=S^)a+^zv%%)p!)@0vPuf@g8%=I^M?p z67m~9v%wBIk~_uu-mb#PUb|>qCubM+n0*C1wDXThwWOPUib&z&Z#zG93W3mF(_WpI zWXR`Eg4nRG5l$G=?)+PR_wgEco^h(OBI5q&nbNB_awBGg@8STu zz=Z7s*GTyV1yYV%3djf~Brl5$=8I1Et<-=I{<~T(S2gQ*GaSkj`RIVCs%1K#_A1==MfD z{21>5u?*BPbW8I9Ebc4&WOpjV3IW+ z`+aAAnF}eML>`B>v(*Fdjd+yO6XIFtS;~vZ)_Uzg5`f-{27tCizXJN<)Vuc5MW6m! zh8LJ1JZB{+um4o~NNM<;+XV(SEaw79vJ4m%>GuL-;CyFq#xjA%RzthSJ%W07#m-o> zQk~j401>Cd3pdrtFYzZqCEm93wJiOQna6y-*pSNKs-|TdzMeYqoc=*0mcMmoNO0?q zsElSNcPYvFE#vxJgV)lP%_oIK#s*9FrUmcx{D=w=ke{_cA{=p;r-zAP3-3jS^e z(P#zWr5rq&_{p|=;W8B$ZZOauTGfBc=n?8$OGT>A$SVTH2sa@sDD}K;&d;cx4LAWl z=VtOHT%bp*mJtj&HFaS4hk<027k4g_CVRWJU*>3Gk&I;baoNQR=Dvw~OFKsIgYB;* zGXhkzf#qk(4KX$FYfqTw8KHB$3X@($sp`tEiW0SVx0#>6u|S>DQ9u&xj-XCfZr2ZA znoi)ef_atr(WrP_0b+;geORw@m2Kq+vXdFvZ?M7`{e}7X zUbMROC<7>Dtj-CDV91^CUd#JwS7c`Lg~I4jK7ciZqESV8V({qPH->)E*iIv_lDH@` z82e{2CZvtlUK_MNIpH@6;0harFas&gV8bR{BNS|0BR4AHeJ!l-Y)ILnx!DdF zF2olm+%lhjNe$fLP-&z@|3sKUZ?XMCj;Nx}e}=X@9`$x&sH{n~ZHh#s>SbV`!aOs; z0XqeqC5mTzZz{k6oE2G8<1fSH2w1%RFOG@Ya=Y|rsl#@Kl ztiqROa_g=$$WUtpT>*@`>3^_}d;3{jX)2?k+{gwFRGc8=Z{cu$?9X2>f>-0g8zu?u zRXsb0S^)f?(UEYuErRvhTcEIJnb))^9Dc_=Hy0>_kW}E*_tR;wy#ohqGi@-qAPz_n zjApv|h_l+exTyJ$D7#Cl-tRk$FlJy){L_&gf>+0W4Or^ndhEh1%0L%9|{bkx2|P<`2yFGHo{iAh~>xK?h-K|Puw{TTZ-=T z$z1gnNiH#b^LqJa=B^)_D2!dQTcUjniNh#KJnE>b%xj*m_m$51l9+ zX@I2U6kTX(Oktmpr?8if^0knwA$?`OyYwD!xW~y-HHS>kM2UfM3FF8TD|9M)3~Bg) zfVUR}i8qUaC%LGjQ+E#>VZ+xXF33W{&0WIa^EYL%gwBh_s6`y0XbGIR_7QUhAkaUF z$Xgk@e|E_KEACDrWLxwQ%-|h{S&@-1UxXlQz?K9oRgp@h`dlDurICrR0QlyEU{&)4 zC0kMBFe1a>ubLeXNcGgA6;M+3U1y!gByuIbpN82gZ1R_y#%q6Dt6D z1psJZI0{)ZpdnZyMP;=old`D3{iM0vdani}L%-Kn5c33ZgMOr6ro#deV_0+s0Da7!OxA-*nJ5`= zlf6t35r|XxUyO6X=y5*!={Mw}6$}_aKf1-uM+Y&&a*myTC`!LdPNos#pH1sSf;Blm zj3}}lwwYM4I9otkm>Cp##ae2s6!&i5iEr^=xO5@4?gl!S4+`W1kvXt1LEgw{w1Yt2 z3~pIg+uf$PZ(WcRI+8q{-R&~}oEJ=b^Um=Q=9dprml>g`HE8jN&ycZOSpj@l>L12B zU!9Ngq?~J2>aIrq!SX-UAlIANOrr?VRHZ%t4f+Ip0BYc`k5!`o9O}9^7)4tO;Se@H zk_U)ey1l9}uZYA7h)$8+CpMX?Fd9vNW7dI5Lq?}itT*Z%Lm(5o zlKH>O{+a1%KG3XfV8a4HE&v%#xcqzts{2yXKWp>MUsJ*9f*A;1gbZuM{%gKh^GL^8ktE;sCu1*~3c$kLJ}%4RrZ@Th)1Y=6jzv>a#0zqf<4_ z2sJ^!)IYOzW7r~>IU6CJN+nnnJT`arSrD?#f5jT{y6>~NJjsnQ-PtjEqijv3uma$a z;$U7M67CxaCUA`XuZybGuC!w7ZTulFQ3%RfFed^f8UnI#^e_aXNjZK)+!W>P^uo`f zne*MQgQ_9czodPBatl(ETv&D!K+XaJ&W8=jNrODwFZL+cwXLtO^(NJx)(rwoFwE8l(G1hMU_eEpC!Ej3&Y`Ba|=0ObCsT4xHj zEdz?j`i4x-hdWl~zdyGef3yhXg6OtP00EBk18vu1Pr$Q|LywW!^WUX`Ku10YL@13Y zzCzdsw89NE^Z{jeGQffwwm@D|)>#ssrECu3Q~Te?UdQ$o>kr_a^ot zSj9D~yX#GT4a^t(r)GygE~HOT0=>{xPV|dMK5uykLELBnc@s@92Hjx6=ZiS+blEtR zd6MCk7SDSe=N_=CQeFiEV024<_)+bMDT6!x12Vvz1CA~F0FC5wK9Z0TD@c@w_D+_Y zk>%zIE^T<*4_QUfD|jR|wK zVz)!b3<^9JCvppjvp<2LJ_iXev!OS_&s)8blmzwwx`$*X?87?0T46LVtjXn-Wk^*O zwfkEj6Ui6_$!p2{9f9#u!_`R<+qWQNasmYIB~Bz$8HQCLSYOr;&D}|+nzdG6ejJ95 zOjNzQV5L<_N}-~|%7hgAPxFNS{LH>AYN;%s1kw>N9$Zh{BMSEIX=r;BCg*is-ZIef zD{w)a=nFUAA=q%8Tqfh5S_Fi>{^KAo{m41O3nfW=%HFR}m4f{GbeJOF=&rZ*XIS)m z?7n14Gv2uFntk2P%xTZTp?z_D_*wIjViKj9s!@Kb;$pX!D6z!(-doV(gdWR07c#?{ z!64&qcuEtX2!E5;XsG7=XQG zmWLVLi)93VFoVP*{C3n>B)4J#b{d6@JXdzu+tp|Plt=I)kG&Q4#+&}+tS80gwC+Z? z7FEr5p>S9F`K$JMAH$LOD^#q_05GtlSFn2nFV=t@T?IL@b+e8!K0f}DTNl`8Loy&R8&PIO359z5AyhI1t;*vv zalwiZ9Jz=y0ZdJO0|fQlRM=AfVeCfS(JzwRBO*SHhVw}QDB5xM#w`KDB4g*)BDd^rT%p{P_zzCGc)68%K(lM$B`L8H#Zbs zYPtv-*%As{R`i~2Zl(H(FKUqyIDm=m(p5It^UqWY@WjLTow)sbUq2;6IV_jBIeH+{ zNboq;GQI7G41>!FLs#lOI+JtXi|aLm8DZITx29KscnaDIbHCi0)XFIlxKe5I*%G*g z5%gAcuR2DW(sp#I4m9IREXy>yHQwd_asR4apm|0%8|cMy+I=~-sxCfYMeo|>k9w7k zU$jHGue}1gnLhQPIxm7>EAezb3vclOoY=d2bzGIT|Dw&5>*`LX21v<50k${l@GH(D zE|Gn*Y+u;m0Ly!lRt_?*!v!NAPv}=ouPn+qW?-{haQ5~uG9k0J2WdLEkJ1GRQ z=xZaij@_897wp4+*ZZzT!-kzhf4L)mOig{*4Rb}GCH;23hZv^jD^tEh(XE!gx_{5F zMV{4yX}ucSFv*(&srW)Djd4+rKt3OdPhpgf`^LqcW6N!j2?LZ{Uyo7LHZZ@4s6#Bc6BwR}`Pi|D&)w-PkKD@pNc3-~yv+Z_Y_vyjd z?uwooe)fgic~n(~c3R?t^S@QHpRe*W#pPG9i&rP;-HT+A{f_6htfr+<7?|RZg+c?V zlZ#qMQbZEXmLssi!9a?5SKZ6^pKy8Us-cp%Se>aMfV6*})ii(dncm3FosOMkbw4#V zjqMe%mV+~5LO+DECai6XT6Drh5+sx)*wYR^cGsL(62<}UJ{}17Hhve#1K8dWMlNdz zgl;KSQ?a$N(=XJqbn%4db>1tLMH(PXfKi5;MU-_Ms1AAK1fQ^9rXzD1?Xjqj-7|%O zkQ#C;WafZ9efpHCXs;x=d+0=-gx2uBKl(oP^>Fz+& z5b=^Q$31S3Lw)oH@Ag*0oc$9YAX?})2PmAau>3bldER?3AeaV#zQk%{=iIx0kS84? zls=<~?BeVjuM3X39NHr;kR&r4Eu!q=z%T6ab_7;PApdJ7lA$tbdQdZcbTDz?J&IX_ z1NOWN5faVC{PWrzPbFMH&&vw=W1f5fZIserL|uXCRhW^dFhYnTwQWFgzHjwwBGRd* zrS|72zc=#cZlTg5s+AE;D_Yc|X9h!+n(NEf|CDHkDSRpgZt<$q8KB2y-c!|b6lF2c zuZm>5VpsdsqJg>#CgFm4aumI4a^1pY%RfGyN9gYMmkBZoL*8hB2j~OB5U>3pgPwlEk!I;3&3zVqYU=6XENoX5G&Y0Ke5J|i_fQDrZ&i*wp@rdd$$p9pTvxaf zoI$I?ouJ9$C}+(Ca=FK$g>{L@P8{>=&T}z%bq{SQ>>~&NZxOfJP>rCCRP3(s0OmZW zsY7pAHz079PnDz+(FK}$5*%`cN+I=NPNZop;HCsGY+hvrKRsqQWc`bb00?v$FVC#u z=2`fj0$i~5+A!^M4vY?#?=MFY_@mc-#Sxx0hKPCLga?IFkC1tu^9i5V)w7P+ee2Kn z-A40YCa5zWa~@n2`-@6p;<{C$5AP$Y#jq(y{Xl*ckle+D#6Tha%TXdIT^4?>s5r2y zq7r@o(IA?GAobfoC9Q#k3c{mN87>JcFzC)m(|i5DWe(~F$}p8#>rojk-}EELVaX4* z&mf%T>sUTBj=~5Sp*;thKo^;FC)%-lZ-VcyE9EH%#UFjQ_kMq;^!)`T$;fcSEV-7M z3vcJyKNBuseR(3O%lTE`MNi_EYIl#!ew7L7O;VscjeL<9%qkO@a(U5YLFKz({}y1b z5g@@R89~j;Jc>({y`%K1Q7ZQc>TD1KAJav-{loXZE^3RlX>m@5Crzwz)}z<$Up#c4~4Mk)+Focj!$W;inUL^D|#h?-o1w zm1mkI(t!-Zh>SZX;sKZ|HZMDS2^u`J)QsR^x!vhWfiQ`RLak=q0)M)*?s(+T_+EHv)0?CA7D zSbJc-^XwVc!#AI4#rDwxk-}P9jxRaN&|Kt&MkSB(hpvBgGlE|AE1ZHPaN9UU=XoFgYqcrUmAE7JjN7JJd_YulJVv`x%`X!s$XpIO=SzW|`*ab>f`P z*DHyN4=Z8f;n3~$qfdzpCd+GUyEr-({p)E*&=C0Xr#~Y_39g>uj4WW*3|mtZPmrx@ zY>6|Z#O4rEB*gTIF*m2eca6v)>S7FuG^hL=#X_QYpY1KPcC}uFi!derOPSAtr507= z0|w)^FHFO#)>W!z!B}l-S4>7B0J+w&S02lpr+y2xU4p4ZLH<0JAv=GYJ*^&M_g5JH z-+=16cNP?prD%E!J3B1oWGv?d^euTW(!p$2m^BMESok^Oj~x7GWcmomS?GE0SPcXC z$4^>A3Gq6_IHf;fueZH`&itPq2p;cil$QPm2q-SoJhOEnHxP1aeVtGD)#+fGy)sao zArWSMO<&bA>ILX&+|@eF9pz-uUi(SUWZs0Z#RR*KC<9`&>XjAYDvh+pF988pERG^F z6IMa}qwpgq|9#p{kx$_k@W`asN(wNxQZbl2T%QfZ^m1z==cS~dDF>q0d`ie2oV0nK zFkKH+03NIR`;|UU44Sd&m^kIfQFB>YV5=SF$P{EY-~NzEs;aONMo~`D7y(PYtl(!h zusv_PYFm<|n&2*mcVN^I1DxgIJPK>|zxd^$CQv38sAoQj0y=jquInUf@O*mtUO&d{U)1l!U{iPaBln(*U;=(aX+UgXPs^$lKkw|xMWerL;R9r1&0~((AV*(~ zd)E6`kSL7d%(6}|(gM~zfYFvY&pzTTFDY+ihDl-?X+tQXyUyfb35@o{rQX{AZ?Q=9 zXu}(RpRBfDxM*>#3z;d|CTbK}|Yxjv+lj*r!9K9Sg zriVj|1*N)sRSrgvGbXZA;L*3@Kr@GZc1CJYUR7D2zz3l*UV`8LVy(E3^JnoTUWiV! zbHnt@ep|_uwQ^--7;6hTBbX+0xCqMU*9-6~6G8n$7g$quLPPr;6j7Z!Vc_N-dS^)3 zB2WGoL>HoacK=r_6F-iutqhQIdY7Nh$^ZBU-eLrzCKj^UvI$Zox61_ddN~Omho%ON zf*#A2HIUNUW3TdcUZ~|8`FEA=_}dJ^zsq=^SU}(ayZ`9hk(bw-sDJ)ojVZq!Sx99B z+$F|B-Ls}34!PBKsXqrLRh110CJFPC07syUJ0jBO*U86EdF6q@kSJs1$n26W15jG# zUpIYC!7&d03lP$3jJGG6*y39+owAFOlbfxQ~7d%@BSrg4OVfMb|&62MgFh*<*ZbM}44w z`bJK6y%6yd2`M1x+LRdXq4H0&TNDVlTGNf|#U%L=wpwo;(H zbTL}8{5esFNMBb3^`&B`)H)D~C0GG229Pc^NLAD+$gpK9o2g-F( z+R)9@tS4H~?MA8n`sgOT2RdXYF*2!n7{O6>v=tc7v$*Jw>T;BP{(rduB^#6=fOjyK zeax8plJmctL9PDtyY43gz?uNUabrqdKR1fJh;umGcqZZT%TdcNy?XTlm?pifGmB#i zzBPK8Z?WhhX1hU%q^d=bqPR_gIrEf^$Hc^AW`IFR#qg<=>tZI==ok!S^OUpqoW46h zu!TI~G@f2#JOCATF*BV_-PZ>SHK2zI#>%`mTSK;b_-n9+5K)Risk z^s44z?8ke6o$Y-$b}ra;E|_sY0JC1>8^GL@Ij;q9WKydYpVg00L~0LqA6MkPMb}g! zdUxP9GCFG60=fMdH#MZ9pdzd(7F@BhCd?6n+$A@&6=o~vWG?}+u+TYBGNL}2&K$Q$5# z9GEc4Y9A`?&ba>4A@3cO{N1>FvB|FPR)9|zFg&~zH9bW+DW?!5g!LPP-1KsR=QAM{ z`^m0Ycg`vSz;tTUdHez{Dd9E!QslVVMGY2g$&pWJQw*4Z%t&XZJ&#acU|$wBB_6tu zHWIiM@U~@uX=0|=y>Y-=(Lf06J$61Gb4M2I6oa!ijCRG8F05wyal-+Nb&qSFpro>I zn?z0!jTx!qYM(dlP3NH^|QCbXars zh(^stP(i_qw}5aNa(=lBoya11bSxALi*T|!LMjQeb-Yl{<%vTBqI41Nr9EDqhxY-c z_rMQ2=3FMm^d80wnAiEtgx?=y>r=uH;$1Npf>eLU-K6-$bTOo$r|eIIlVIV_T@Uwy zwjYSVPf9F#Odu4HjAa5$u+E&zn?DZr*E8o zSYZXcOaC!(@}$G4OHY-_N%~gD6b*HTQmroc`~Il-NH~1BLGWco%+6O7v(}*>hcn#2 zmtr#Bvm&gZ`_5GNa*r-Du@0cUf%$5#D~$5Tw=TsF47J0wDZ#K)%8wy2O0TW23qh96yj6+HK@pE*Zkc&)R@1y>F(zQKq??9bf z*d?#u&Ru}0JgI2p@ok50O$f-!<9K_(gW4i?`*AQ?8;S>l?iBhxF9f9D`V~P6#1WAR z;JegyTDc`C(aLwZk3?-~FYnmV@RMMU9=5Qg)ZCBBiRZ{rR{DTi%G`A8aMyW{%{$X0iz$UG++dmWRSs?$UlS7Eb(H5RNF6F@!t^~f+ThHq2WdxT2zz{m}yx}v|`ihqyn*c2Ya)}R2N9F-3HJ!a6LWr zcfcz)7$R@`((8e`wuZt{%4Nph8crOo6!K{+6Rw|@kzxSQyG+g(r?hC*VVWI?%pmyM&(1wVM-202}lme-H}uBWIWMK5#x2?hi0Xm{M(I&?+$%$?&jc9 zG_WwCTgy)q9^0_s7OOVvMX>LFNNr2qWnZp$7I+(Hyeml3u5bt zQ)3{5USaFET!3lr=9@wKnaU(RQ`6iloE=3uR(FTkd5XcyaO~d4D0y z$Kb8o700r<5!{EfiJ5#P9Y>E7M>>g{Z-B8AWT`f&lV~20HqVfAHqhudogJ_m^{<_F z{W3{8cs$oSOqkbD>TF#Ar=KwYL7iWdNQSMI`^YZOUj;|qTl9JBWfj7L*}R9W5zKoc zy=GKmb`B>{VY)VUQbSAn+-7tSC?_LcIhv7o2xaIje2XDdR*TGHC{6{2g6S&{tvMJ= zXOGlvK&a**xAnBB@qr*Ij#K2d>G!#w7v9RPxw3}gvDK0Yc>)* z$e%+1&sQqGFc7#yGuBgK0sQ{NbuutVG(G`M&rg9@CFWywd%5?A;)}&qk6CI)-)7Xra-WZrkvSj}J|X;6^=8T2_Yq1f_n|Wt z^$8LC)1c1VwWLmC@%XsCb#py?m!baTPk8FloFY_ve>AE0jdUF;(cJkl4l`7<$coro zRtoP_2kg?8bUgug+`HDD4)iX1HR}g#{W9E|;P*N{Z8c_^>9!7LtPDVQPWk8YFH}+k z5+(mq;}n45sc33=i6a+3#8aqrTP zhtz*r(Q~r&-G{zLIt$Fbq~iRm^!hVPZnM5bNC;NR>(u5u50p&X)Qr>MTM8^Cwud`0 z_zlNrDq`)q8x_SO#Z{aAki&bWS_JAVN|_uD!9S2^06BBPS9C0IBt!4W+I`T4VKAp} zvHk~5p9kg2xD$_vqBb%8v$n?(9U#2d(M`wgI0-b$fT9>~=)`Zdnm*UXG)E1DcYSZ_ zK@w(A##%HjZ*8|4IArcQOxbuE^>Y+O$X|x)T#~B&rC|?<&$phdeVMXd?%Jbm1?lE$ z1xV#Q^l_kbP*m_WE&Dk17&#aNV4 z007L~ai_YC%Hgb43lDbYqM{|&^S1#E%za!iHnNghT}<>JRf;LTUJv*AA(-(f%b43~ zthMJ&h?uy2fj=@rostxuaDe*c&$KV$rJK;Ry~E^e2X59K{GaLVAK_8tp#$V(f1o^LG&LCN-K3J2aX;$N*?^^qW^n33)OlXyNWIUN2br&YV_;9 z&b_Hn!3o=6ElZRtiq1>J-pz-me9w$=1ffDc0}YSn9L3y4Ws?j8Sm3G^uDb!WaLGM0 z`n5OZp!e9xyz#U1)i?75^(Trg{!3O`Zck?_%etOfTJV2&*iSbp78NmLWqE;KvzByf zNaT;bLD*`X+H8|Ekf2)v$&OM7VaAT&mz%YV(bfIvewVT5EuGrg`*B)A!0h+W?_j$R zRhoGHs}zi|P?Kpw1`HGLQt?S&3(GwbA9gpM{y|0(lW#9#xb(jL?SL*G_nbyUs_#i~=o7Y;ljp_$S z)umSZXL%XleLy!Tc$*57R@Rbv<2Q(Q=!^?(xctQRWjkMtE~K98kJDeakQlgf8&3w2 zr1;q|ddF5c0MrHXrKouT68rEXTmFy9-IU_+1I0zBAk4xGAX-3y>}ff*HIjRm6~@2+ z4Zx1CJt@EA@*HKFWlooM|JQv+P59lN{t)MDsI%#DP%PCcpOwud*Xf^(yZ>aovy;s4 z6Rw-UO!S(*p|aTBHvl)DBX`q|q>9I(VcivCrzJ;Q$mi%Mq9j%M8Fk0^>8^M_;0iH# z3#I4l3`o3K9AfWV*Wgfj(7%7xb=C4&n+M{D57AUwZ=gY|&;ZmufZu?hDY0V(#H4Rb>)o|7y+e^#inqkzvS4xA<|1E^Klg#Ubx>rJFwh!#b zr!C9Re9}l(1+7dVRLNv{LzH9`e&P=B#@F-u*oogF20xc5(m5oUlI6F&-e1ER&{ zS4my|FA7TMh?D4&BXyKH-XcRH;r_bBg3?WPyo1)l*FLF&7BODE`FB=x1Z)F6bs(T< z20%*REhP+=moGEPzVD2ox4+$O&EzN$SVlu}jkbnUbg>L@gRSG5u3+zXX!$-uSqn(3 zg`1O}Jf*;2m8FN5M@7sxh{H^qYaE*Qk!9pWbBpfWdsow*hAn;rth1zn7iC2C+zLyQ z&r8goX@KiB>itW6tC5_~=}f~cr``(X+M<&nD+owCK5 z4k_+ga$Kf~cX@vDd-znFzsn6ej_PS&B~^a^7yy}ThM=F9u&B9TJG5UFn$AA9`T^}t zX-X8*Y!lnl>TDpv-ZrrN+uJ+azvTpM=UYJ>`s{?knx^IXM`{2-{X@L&a=dm!Av;~s z)MbneoqCfAC(5!Frpli4jI(a94E_@uLExB4FsG1fH0=LM6JkkqA$H|%Qf~+E0Lz2V zF-nL4VQd-E!6$v!O?20}{>Z^bvYZ^~b7jKr-wB+Sv%XA`VG&2^x(^R?XQT02l%_6V zEf*Xdy;Hzr*rzQCNq<2H9vx&uYOsv(nJ0?vl{K_1S)JS75SbpVy>05~S}iONw`O8g ziCjWOlU*|rC~!;lv(#@i@(LbjyMR#P#a|GEjTB2RPVS=>S?BEEsMZVj^x&@Cnh)%Gn2^-(V;>ztw+!=qOww-Os@}u3G z8~}<4LZ+@1*d`UdAcII&6kfeZF%JfpTP@J5j z945C!{GcB!!!$+|{Ug#Y-F+&eJW35)if0+kW-M_rXIPi1y#u*4#N6>RaLwEH9Dp_W zE?#6>PV%D!OUcV{Cg$H4?!Q6Io+#Q$`rv|}4*2iReLlgFNj-k0AGf|IqIJ{Ov#G;> z%`k*)O;FtI=WeaU$j9r*Hwdbh>6C?>ryNRji9J1QvDMSEQX%`-@;dy|Dx*VSj zIl6$SSfp_>`no>Rb6N5cm>+Q5Vaz<$9svV>Jvvw(f*sXOO>m{3=$<*;VL-+M(`^x) zu$+EiDG>dF#*0Ebd`yN3{JlBJSj`o-8pDVWcfE)=K1u9O@4|8_vlm zRMm&-v<_#IL+EWz4rqk-jEL)!cTXwKggSuF9Y;lH36HhM!F(6LrQTZGd9iXp6B5Q8 zHx8CC4YNq;Vvw>}0ec_1S(7M0&*-T6G2d)IP;(crcD;njof?|PR4a@dkIfA^)s9PM0-W^1<5a z1JZ|Qqjo}Aoo#;Ep)pD((H|s?ofJ+wYmWZNAZ5-~gHj-ez%NgX9iepbNotsGr+Q5P znZCl$n{-cNAHP>Te$X1a--aXwI8b2HsWH?==e{Yn`F0vgRAY~4TOkkWV%mqvj;(aw z_A z7L6^30V;bqZa&y{T=BF++T_jE#kSTGM+8EVEK6>Yu!-l`f}l2_M#)6^tsm80%0OB2 z&O~S^u0M8ce_%^k?p0g>S7Q4C)k(|nSxjnB*e<=pX-PgfS-us7yGw8Ovklq+xEI9- zII4)HpL~5i9diXvkpa_yG8wGteI-guXs(~QVwU6t&)u1Q{@$G^yk=BB#>yYrX#lis zS?%fhY7}p)zbr|Ak{|Br{>xfrN_Zk(qGOt;xGw$I6YP*0FP&n#&eHG`ROK?~q0+kBT?e2?vu zKoye+M3qfSdZXR!a&2G9W^nM%q21!6myTPKElVHN3AMDVOdOU1qN4r2+*eW?&>jeJ zIEAxJnB!K8Sp_vEvoG4z#{&UM(?*QLqPKJFk`n0!B6&nGt29D#LMaUzhEqZU%eT>q zRDkF{^W-0gaD_x0_{pLbUvLNb=Sr1UU@m-kdnz&HH$(2TE%7a2`^s2I+Wjyp*B?(` z6fohC#tcbZVz{pwvUyTGC1#P=?S}PYp(+*l`(|H3*;`Ky=Y6{M4M^qgT$Ah$QMyz2 zO8CB<3@Q>|eyK=caiKw?$m}FgC;#L6#965+sz9U3RFYmmm4NF z3eY8ujYqc!nXm94DMz2q9=slkmISY2WXD3N`=u=!c;=lr=EN%k2SSR(R# z&mQHoVa8?6AI349nlcc(m?KM-I6ZoM3lv#NGn8ufPP#h}pYo>PE71XgWxgheVWGp< zHF+6#V)Dkz=MHiXJw9x1)lQnvylk)Yl@&b||{S-^E3SBk_*DW1X1xOPjpp@2Xwu z+fsuieV}#t5i+tF>LhqsonUmYSPh1okUSmuez{j>jqT+*7zwure9ea=Re3T}VQ08T zIt}CK-!2aU0u{3}CPt5N)@x{FuiH%cl^UsQjJ=H>y6*KnJDt6;Cb(cN$HXx<{m$7J z2LGUujaN8Npze4^Pi<#;*PfJ}8+NNoBf2L}_>XCC(xnJ_*eA}fR+RLRFuaEb)^c<| zDn-FekR_!XLyd!c?7eGAO)u#gjS4Q<2;Q{6GM4gYoL@U;QlClYF-*^bEPe6n;Fs28 z2eDH0*6Nq@ft@FKE?ueiCp!3 zR`_EM9(C^Cjg(*g#*E(h3mnN}690Jg4R|pIPpi|)EU<5W_zSR1`n5Dol!PfdglvbQ z-Q_RRK!wBrPL=`vn`JI=>&a|>p8dqVR^~_U7J@x>XkRW^C{z@@XBrl9p21i~`6VG+ zuQGY&>eN&K|C@xQ<_iURzn^G@Mm19n*Z-q9CGOpF0SrA8t?s;fw z$yiH?lY9-HiqFyF*gtPJ46`>5o8%o*-EFLXoRp_vWt0m*cyViqxb@``z35!}7Qf1|-Yp;w&gCMuuspufm@0~B`h{0knKrYoVq#3+Su9 z1Y7I&dZ6IWz-JVvBm>#zX}++C9An37!6#?m9b>x0-#lhKKWMGq3;vb(T}XgYepsJ6tfR zh8uNb9!{Z}jaBMt=Y_|qGmFI2myFOb3$0K#`Ug4RIAU-2V9t9q+65l(*j62r0)$#0 zdxtK30axZgsnZI!^e)+vo@9_Y#@b`iYhPiYg{#N_v8Yv=*f)ceCtK>_&(@G z>LW>Q$ZtP#I1VIChMtr-C^n>J-qjAJ!wG~g~qhpV6Fs?{}}{T%xos^i$f{79k( zRs2vi(;=Mk9g}pm2NT2X_ZH-V^ym1qFj((!z74F#8B0?pv@HVpE=*{i4VHKkj&rYI zlxBtB@=X+-N1s#;+BEMw;7)d^`uFqdPi8}g)<-5uy@^EjW=k4cow~y&=>Eu2)LPhj zcWA{a#(F>M(u44Er{!S?aIucmMO6rpAs?_1V`!+>*_mcolOwg2q(8;nyPzi!)zmif zD-PqtloZa_c{xMW@wa^5O}z8dzbb>`cO7Dn!7gN*ZtGJh|==@OlXo8X1phJ1pm*7P^?1kJffO(Q4)DR9@> zSo$rjCW@80Nh6PwQKb>B9bjdCrKVluf&i1?Eoa?fMrwmD24{9-R^JPC-F6Otd3A4Y z{Oq=95!$b&aphF)=m~hj!d6RTp!wv^hs|fx&p-;f^9X6~pSBiEzEO4qc?B}?ldZ+i z9x@kgU+AJRzG0fwRI|FBBkZgyJowL-CG%Nvd9Ny=Szng~y{w-XEg-3(av1mi^rc3- zoaw*?24D#j+Bc5mJMu$4-^wF@^(Au_{B+n-{r!ZG>_|lUvKVVdfvH=s7uo|JkMUJ9 zxX{Q$D~Dxmg5=vppmtjDwE-`EP|yVek(V7FZ701WI12#e0@t-Q%pDCv^S0IXAuVJ* zi!Es4xYpA;Q1Y#on5ed0sTlgrGJ-i~)e|r}nu%5?UWBI2ww$4@*KD2>ho;0wr{w#>hLkL8@-$IF%vw?eRjG=>a~1#OaEl^K-K3g zHvOI{$ctH;exPi{@;igShqY`=k?FzMyt{8UfGo5<$H;G&m(TdGlVVw z?v-{{ZhV*Sup)RgOl>^C0H;6|Y(uR%?>&v}+kqRZK4HQ)1f-q0ZJ|%s&@(y<%rP7E z-``BO9F&M8&a@l}eAu=G6#t1ye&3`(CSocYWrc*=Q!tdnZ&8YihAC9gCnX#?G3N3M zXkUOM7B30vkEp^aG+u2_4qLBYW$U}j7W82EGN>?lZf|<)uZjFub1Ze*B(=Mr7qW-? z1>-&YZZ#Xi=4g7(29t!eZl09}|44xuGf>h%TTuPoA{@%}(r3OB<1AXB|B4Y0<$LY0 zG8HZ}z#^DzkF1>0R3F%_SIOBHd5S*OCe0D5u|sK`vpZo8>f28z+b&3d?sFc=B~)vhPOoF_{k< zw~#}IyjPcqI0T2EwKkid+yU&FudzdIOQC+4lmhlga&;%lR&&QE4*HAbXP>2Q$pE0z z?w?m7J4ErV=utE`mPTs{no9rguREz)iy&uv3%$gBp6lJV4+m5%_ot7q~wcd}x)f6WThuDvu#4w)qMDOLQb7YIZ%5q~f^Y>s{1z zKpgS8xYdhksjcAriPa*m6LRX+p9qiDY*X&yXk->aD; zxmi_8XkJXCmIG9_)6v@{n^`$`W-TOltF$a{?~h3(D*3)KSupW#Q)g* f|HtocErQ5mVKuR1?xC*$^trBMtX-+;821Lv3XI`a~T;bE`6*4k^mSL{WIijvF?LK;E{f^NvZl2n5reDEzkbnPm5 z3#4Ux58kf7d8O+LK{tP4zi>L7@?L`<-f@%CaZ`7)bn`TIv4A{1JvnV0?Oe@G-&k-u zxmcxaiO@jMeMnaFxrSHj#*FuyRJb<+gGlvUqZF2Shf%W4w3m%%*H00ch(UI8SlvP7 zsPQkRAbmw+>SBazEbSBQJ3Un>r_@q+^~$onvVPmON6ST-=_i%j%f?E|QQ1T>u!Jt) zM$g|gBk=LX81|jL|E};fSp#qND$Ob?x9idRKE^{l7KaRhPT#vn3i$os{*rj9=4vSM z&})9ycM5mP==I0HS+9^%LZL!m)Oyr^OjM`Np>>i&S?Xc=dLq!dG)jU#^s?Xh&=n76N@&5jP ztx{R7?j6@A)pb46iTff=1YlK=?T+Nq*Wktn3{FQS7$0S2W#OI#VJ|# z2uD|lX>|!U^g!&@-5BF2kkndK=af1l`j$Jd5p_KuVl7ne_ z`F6w?GuYq$MwdDu=WyV6ahzW2x4ds~TOF17$LKlOXPSiyrPl8Eo4Ly7F$xwpB!{e3 zW3{x|3?1Wnw7^{K0E;b_v?nd&G~$$7OS-s;C1!H-4tdBcx4&~g|0K2slaGH} z{I>ohh#dVk;vELfzvBwra)sZ4ovVaQ^Ts_o*JJ5$Nu`oUS{A$O+0d3+q+tmTFe^|{ zW-)htP<=vobUvhsUxHSBb zig6>VSwD^^kb%LDt?s|_qVE<{wABtZ72oNxBv#^i+KJwqFkgH3mz&s?a@K<(G^+y@ zIR6$w!*k8L7MlN$%kS?eZenp3N`=!nwfIdz+K5Fr7MR-bxr+Jka)*BBd)R*-hW%xm zS=B|Y)tjv@sS<3Ip~2S04~q{JQZAL)n#!yC{TK5P1A{8Ho+HU5= zQ_iX4lu_vBnJPWxheg4eY6nk+s)sFVUE>kz!5xd_WnLn;BRgEdTmN@Dte9P4S+9IQ zzQ|HxW(@oIg4dY&$#Hr@q6@Q$0>!7l-%uEemh{b3vF2^pc#^?yn#gi;-g*C8``pUVVpn3z`6(VrqwYr+Y0hu!YKfng1a$s~HxB)5Ve$*_ujXe(L8fOreE*X_Q7x)cOla2| z*`)oTwTc?j1I}phx11__RN^4^CIY|P&rUY({1L0fuY7|ji$Ri z+L66l%Py^P(zmW8#mUY|d}d^bcPJR~0vGJm>Sr0Q3KZt>@YgT-vl^Rw)>+Ib@7Y0a z;!+Cy;NZrEhAp_SkB^Hcr~6nh2Aby*$4o50bqG`{`LSfo2Ak2bud|q%(e|aEawaS; zF1FH}n);l0gte*G)127ovZ$!T%*;%Sx2TR%m$V)KmN_;GrO-cd5l-Ufu_wD{#wTjV z4h3nndqU9BfqB(J6?Wi2Fv*^F!zD63Gec%Vu!CG;#lplv$s?8 z3yDng^FFC$Z|oX_%oS$YD13f#vtzy+hfw@ZEDbz=OJG!DSXIUEgcrm$>p6!iWImZI z9a)}ppLrC4b%cK8@}XI)D5<0(DO%f9F#%k^<%)l~I;G5LpmeF5>9OTRVeZO{Ar z-+yi3^t!`&P6**%MwxF`<@9kSU#FnzjW^fUk_4FAdsEDzi$nDcm(UX5Qs#qnm(r=~ z8LG&RQdK?SWg|~RffoDY-S>(d9NF6A{8(loYe>3y_S_Wtl>c`SEiibjg5`{cc0k3Oy!kwy#&j$pi%?bb#RU~AN}%g zzOzF$BhnM9?I+aGY&h#;SiLwq^kXh0mp-|ac9@lEf|F!JCyxmkG`{YPB9cG1(__L? zHlb6K8(Q11U96ulcsiwLDIYWxKWb~^0D{ibV~;8wg8x<;P<2*zO`jomS_otm<0S}x zrP%uXeSY(BIYu%&hYnqhEhAvj-P%QhUlnrss!A!agt;@?%y_uclt>V+bt^x5;-O;q z$sr-SPk*h~?Bwz}X{C@CHFl*lhkM$_Uo3MM@(ZV+`9=DR+Nz?egNm#X2UsZ!Ohbgu z*lEH;rp}kVb7?hHv+(ARrOUXc!qQ#+Yb8GZzZaYdgzrq$T)m6khsujIZs9*m$0r7vOALx;psujTwAmUrfyOW|C=U@fsFCnx8v1)J8rF+I4$`lXWd zl=YC-6J2qilT%Xq)7sd}Pi4=-&E%8_Szw3d^@!}FMRX^$hu2rg7orS!>EP;KS#fW8s4 zHC@5g>}5hFmlj=51T}lj`PTraQ(hK2VIm80w@5g<`!Fr+HoYBcgFR&ct4)Yovr~gL zJC@L8!oDz8LA7e^x`S>R(G(76c6i;|dz9~7nU%5M&QcMj{@Z#&h^`hrJ1UpY6|5FR z!}%MWe)XbTT!bA=0lv^Cqdzr8V3jL}r7DsAiZMoas=CR56V8gbozWs?mo}oOZ@RVy zY?{Lb`Pr%EEY8?r>gn22P@S3pPOGv1$#8yabqg~?OgtJGt>IRl_#+0|FscKdV{C2- zjmU{a{n3wKw%|*u=4Hbf(qp{#i(B6%g+p)73;tPbe@5Dh)tg!ZRQjqyC6eE>3kyq&oBU0l+F}b6=t)U@b#-P*TUcZ~QqZbli?u8}h5yY}&33Gm-w zU*9Szw8R!nP|!!NBsq(BW`jE-T<#M@ax7EjdhhO2Q;@n&$TJA|&HJOKcBYBA!uu?X zVJlBAov@hu)G15Dcg-$D((L`1kfEiY{o3xbjNtku(sAEbTif>%%TT`BOyA;m>UY)T z(fj+m-Hv2Kwm#~*$;SKC-GVj8pZkLij$vg)yr2}RK?%v=Q1o?_@UMn z+l(#VpjLYoxg=P30$Qjfh09-2U#k#VKV#vj|JP@h$uhH%Ex7{3B#;-!kg_zO=A37i zVT*dmH=X4cpDV`(H#DwcX-IhMA@h9KhJNWGWtI17;fAKVTIFuj!KYgZ;^;a%%iN!x zD~y+@>rQbd&g)Iv647Rc{9gGoi>ExVp#lD-tx=ba3`;4f5aenfOSZNiT0G4w)DdY` zl0!@*5Um%U%F2tlDYFaDjH2`LH zQen4;cm82T0u`5$-;n!^!CLL6;7q)QqOBwSoxPow^)=lm!lP$nMFdd9;%Rcd0zGD$NvZK+EM)@9kF{?t^}WF+su8)tVfw$L_V$^45dHxYnEWASnIZVGG`pwRaC<9si$di@`T$FXW;ksTG} z=H`YjYrlPN1JEbLXHz2xiI&F9*#hUib_HgEiGs~9UTB0LB&RNEbdgvA;&GQ z*wC^YHlO|&OKuOuN)qJF6#wcqleA1jI8TD8n|3@Ukze3yd03on1ENnjQoO<)8KMX0 zzsm;2j-4#R-p5<;+jQG<(mEkGL~L}m1c}@)6Au;lY6k)bTH2WS1AV<3o%m6Wm3Z;w zkL9-XkjNWUlR(&?&>?34Cq_b+!b+JS7y2>A|8Jpu@#ZF8#3F@UhauchOUN=-Zx7ZV zc;2oD*Vu#Z51pXpJM6n{$MlrtM1_QelvrRoCzl402#;0EDQ-G*TdM^*J6jR%Q4?4) z{Lh`f1UF{8O*_xXTHUV)Nu!P3-4Y8?thi85{L0vvDcpSzwpg;LkW9`Nm4e0kLR(#B zMLdXBik^eEf}O2|qp-@Y5m2w>5jnjCQFdZ&gDWOe4tmJnFmq|ixRjUL>b;j4LoM%0 z$&hod!jS1yH5{a-YC@M)a;x7M_+U0wtu3@wzqP=d(1OwrJV%uAE^4Y)V7&~*EBA)Rn4chzOYJ%sZAJMFaF@K-l%E}^bNt6u|@@Z z8XqwgF{~*R?`TUiq$g9AcWH`2bvacLAmLD1t5vs*U~e~o@2x3w70A+7d8xyzQBN4w zhj>65E|;&dR@GZvEOPcwA=VrY4tOwgIiy>iWl+iDv{4w1Eg3`&+hV7!Z~$h?zEz(D zEVEGRvM&OSgnvAM`OV zKi_8P-gtSDtgFSN^1r1%J_XG;zO7>wFoxwwO)kGXf_FeJ31l6AZ3D%yx`Ph#>R=YN z`}iU-_v!MYZlwV}h5{XSrDXknjZr)(d!!d;4r=kZh_;0t=kDtF|L?Lt9{0rQ!Yt%E zig{fvNt2$`q~{l0#iqz5!S?C<58_AlgyL;&Y4TUBE_J4Y0_9DN)=zzll^(gJPc3I7 zxv91R9-4SiuFf<&!d6R+oj zf6GvDHJ2o37;bVvG3n>}5yNUimJN=x&NF6l;&-tE1=Ul9b%=OLx~vC-q`xv(+>l`5x7jL^d>U}NNMBQMP^U=*-Q1X{(30d7URP#Wj-|WE zjpg0ZuvLS<#PS2tJZDJi39Z|BA~C4f(S3kZ>pfG?KYB7DrIB`Vf3Y6)EnHVu$WkAKGj`I*z5UDJFfcH! zV?Q*lV<*Z2F$=)cO8{Z%{LXH&*klT*cE_tkFXQ?@q7=%EtPm;X#t-^~+RDi?q%@|DBdx!c&OCoRKOL zXz|kQ23{@fcp1fo+jNI^E_wS58wVU##3)@$j3~edT$Bv)z}y?%ddeM??PxU@`7ZZJ zEUmQo81LW<+|)dFOi0Ve;rqctfuAM+tfb^)O1`zVmSDjWWL(7MFAoH>ceBPv#1TQ^ zY6rAXEZZcDtN>OV$Xa8WE;_+Ck<(&jdRVm>`j+h`VY3+@F;R5+7?O~bH0VfrBE#8$ zD}n5@^)ssSfu4Z)NSf=`Q?@DFeQ7O_wWL+7XITG76m)rmo$1j2yE^W_t zzkAoK+77)$ujP$V1$A~%#OmUh=#DM9{lhJ3jmMCRUV=W3iZ)K`(ub^`@+;;#{}>E< zbxa8@uMDZd>U^s%4;FMKIxf>GY<2iQQa*wH=MfF`KfB%t`k(bzCH{RQfp`DkH{Wn> z{rhGB`oCoUuWtTn;Qvg!2@-{0fg~Q4|N2!H!e*v0*`P(` z&3nJu>wa@oq&%j1+4p})O0vUmNV1quc;s=g4OP>&583o9!WwmiHrtX@h(dB6m*zJJ zPc^$(w9CTY)t#l`B9gc@jt5l*#CiVuEG|YQbk?>hv~#SuD6L}RQQjV_-qqlL4R*au z)YMzV1o;1PXl(E+icdm~+fDZw$f&}qsk1pT_hI47^$GqncHN=uQ#U!_H)7S=BRc$x zW6KtHB&Ix8+ZUT-UL7ehkP3EwM=_E$rzl)4%gHe-uNsxFtfYu@NYOnexdI9rX>dbQ zlE|&`{xeApF|F_zZ@`MeuvcK9tD|)u%eIJ>5b8GAG5D2N=ULs~zd3A%D8?A0f+o?J z_0>O>oW^2fb&fNyFzcgtEOZqtRVW`{)3CH=PN%)6@cQ$og^z=SUXHIBqv+``9P*aE z9l!QBRH%PdHSI)eGc%kM&y6WDhAN2|xy5v5rO0{jxYgfsvSDG=(yUC+QMX}w2G*8D{Y2V&@;%Z78+7thY}H(DiFg`dQ-hDS0H zE-r?cao$eZrwG6y-1QdtgP1w}^GCDPHCmQya3~sRZHbJQwl1fy&%U6L4PNhN^K@eH zZ?9S%XbND{whG7nrOpws^X(h=1bYMLAwP5~Wt3A_?}<8R?XAjlIs7mX zur@3+do$Sn1+Uwwe$8Nbq3yV?gtVgnLne(_fQYEig5>b{M1>--zSjX>f^qbBj0zrvau{@b= z?619^JKU7--ab6~Y-*apeqk;U7qM>I@bPHR#>J83DJSu?tqt}b zcmKTRkn{83e|8oX&2yFbzhpccPQ7!_zKet;H=8*t$?=BNa}x`KtH~93c)f_5_l`D+ zY|LM3hil? z=+3lCw|Ta|Q30<8##FhHh7zedJe=wuP2$wHapG(m|4{k>_>Uu{*WOxgsd2scUdRpl)A_P7O15%WLz*tO@GsBsKHsd0xCb_M zS=T`RPU0(W^AmdtcQ^Gp1@A7WUT~lmL;tCous_Et-|8BCD;;=edEX<{NO%1_OoAI9c+6k6UiBW+n9nh z>a{OMaw?Sa7p>hGF<0|ey{Q&R4{5I8KtXo^IQba+IoqJ(Igk|(A1dT@QLiD9CyK_# z@RXLLw()k7z@z!DDMuvJwM5!%Cgq$Hl6%(lTbmB_V&3Jy?%tK}b5~6C#k&0T_M2f~ z*4mvh%5v;!eKjRIJR@};n{Uu7z3(~X6INF00fyMV1*vYOB*RdRJ2Lux%gLzp4uc?tMH)I&p~$1#b>WR;6X zg~x*}ffu{yXP5+(?>b9}fB<4ryOhqL()8DS^j$}4g~}>Q1a`{;?3S@<0h?73P2v~F z2NQ4Ku1uU7&`M?fQeiijG(5GU2nl5vY;V{&{qKLx0tEB6h*EAWlzvf*Ilp7WA#E4J zc`8)Sew{PC_fyZjNq0%c=~DbGB7?r}uQ~lx&C#TtjMeh{+xN*ot@kwhJDg$Ap1_(NX@{I?LYHXk@8) z&Fj4tQ;Vs4&#ys=2>|{y?14WoZFSJMIBswM-O>w;r~G6_@K)#feJ$!x%1^v$ENyL_ zeXtlhHsWq0yVz(IyAXSQzp40va>mM{wOHe*9X_kcYSI0Hw6M~q!x7<&Z4z{DL%rb7 zB3ytq;~{Cnw=-s10tZ(^$kX=92EUV$(tc`58~L26lc2C2$CD-hc$dEzA@|_Fk3US; zo$_W0$9p~+-z|RBNZo9BH0O7nkdsboyv83R)b0Kr_yYlzp=)m)rNE3E=fvz*ue(2x zz;^a*0N>3 zS>{J?9pp`>78*)E@asGp0OnC{EP7;uo&<2^_X~A4Yigk@V#v+|yz6ACFD(o+=U3r- zx-l_!yd67N|HDj5CTf+L3>j_Q-v&n))!#B%t+{?HJXkXRQPdcj(JA7i=Cj+{)FUYX zs0nV;8SuW@o{#ny$0XUTuhSswSCY>u1?K#!&3ltW>PkpJClNUJ8%-h`y}1NQF|Mew1>uOJ61HZ;Ch->_U%1(_{WFKp zsj+M+NBn$oChVy_b>U=6|I5e3qe;N$g)6N37hDNQJPaK?B&$<%#$T399+gwV! z#mvc7x#+zlGH<(&k&DV=NnDN8#0ENFTzQ!DQsVI1^Fmw^dQ5$3cA~pKiBializlS+ z3Zxr)EPk=NZ5ViVO%(JA4n6@))O{}IwCT4$Xs5h2Syhm%tY6F>n}`TeXHPd?5b0lK zj!s0#_UthZ>4lcCNp(d1kTaF=c=N*>>DlaxDA0G>Y}%PSO?e-W9JAt8!;1<|ovJC_ z{OuG_vA+Qz_Q17n+yL&zLMvrvoVxM(uYQa4rq1nOvC(hl&2HT?DA#04hSAY!#{m33 zaF}Z@al#zBJM!wTPFAjM6nHiv_ZN^QcTFuwz~lxfI}(?sGhcF)o*#7xXd?4lc%=>c zV|2>A+Ro5>Q4tIww+YF(C>Sf*cg%QL+Rbo)*t8& zCAfLdTD01{W5^YQ=E_efIlIk-x$UdcGg?g%>*>ta1}nT8u0}Rljjt!aDoEDj%&gM0 zypZd$spoGCFBx@Y)m#MtJ6!14bl?WhQG9ZS5B1yuA=U{1twG-`BdP%$){GWXFvZ<~%IF&G^#&K=Luf6@Z!YG{OkCR5%UGh`BV%!Nxvj zX3L~RT%5qWl~8jnBUt#g;E?NclBp9MtogNFtb|DvkL5x51_uWl9P#D4!GchNu4?)` zDPQR4%FH)+K;qV}r{^MH(sDjhFy$ybQ|5EH>g^Jf`cg@KTb8in3JUmoGB%1n0-T+ra2f(>Q|nFN^?c7%VZYkFnT(^~={l^G z8fDYESj>)aoT}bfDlzQFnps+*5MYYwq?xPlBh#r)VplQ6HLlcM=dwD4J(_&Gy*;|a z$j9baS%T5zSEEX6w>CwAGy~TT+S~;Wj+m7Dpe(fj)#&RVH8tKH=$4C;)A8|en&LGg z^1vD#rt{_6bfywSi06ZAiJhTAZ}AA?#V~QDm5qp)jOoE@7mJ)wi?P`2FWt=$eI?DC zQ`*FIVvV(0xvva*^_4%p54tYi=Y+f#kdkd^@L*oJuZRFQ33vzkV&QhN)A?=!+`Ytj zu4Ok~U#X;VIo@?2G;2l(aiD?u2*;WF*JyI(Y3eKgRgyHq+h2)fBL zro>n9d=~|*x9JET=-<&Bc-kSHFz2@?5!YQ*5Y^ngA62Zco$7sdV9{p4DON}y@K;c# z1KqEDnzX&h%9;M+%}#%5oz4T3tXIY&dT;v4mA&MhYX2^MLbtS(dQX%a^orku22`#= zL07BMolJ1r$@1l78_#0_>4kKrofmJf+Bm(u^Kj?IbF*}&W62kduDJJwP7TFQ%MLXM`VlY938B_-FuZo-5B^)9WdiYWKOgj#=CD5r z+cn0x?y^*$&{&@6o@GWYcDbiXu>;BNKf{>SoX!_+r+~CD-_w7A9J6w=T>;X((|Ona zVxcNKc-MqTeg92d=TIqUzl&2;K}|M+e%T{*y|rhHS^@EvK$pZql82JHFTZi6(6Op4!_$-m4y1HkqsCQH}- zovw#-Ly%WGHSGIpeZ`RQe6c2uut(9RPD6Fz*^DQ>zRTj5_pY?(IM50`F7)j!e!7*z z*

-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

  • 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 ZVi!#%iZg+gFMlshQj&Hiwmq9!`7aZgD}Vq1 literal 44572 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­q(B7@{^~2tkJimpcl2E1yRv%TO@p~w^zg7= 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
    Wip_~cif-eYptA$hGx5UhH^Fh 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
  • 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 TRJ6s<0O(Os)KDmq#{~Qj{I-_c delta 4825 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 YppPk{;j&vYM*^e=p^Mb1xosEyKT>fWHvj+t diff --git a/assets/icons/16x16/novelwriter.png b/assets/icons/16x16/novelwriter.png index 5723b8c583743cdc46f83484c7a5afa157f6782d..20a90acfb7fe728aa1ce512f9d94769fea670384 100644 GIT binary patch delta 601 zcmV-f0;c_v1giy*U4H^NNkl1v(s``ew#AFu4LR=;U!B`R!mxvYd z16&poJMj|;J8bQ(#mXPB5H^z##7GcvZDUO6rrUJa_gd7Mo|#JO)X8@$?|JKazq0c; z?;UES)>VVL>LSq4H=ZGlhWmHvwN{Z+jn#ACF^Rdg zCIl-Y1|hr1xy*8~GG1-n&BsgE_;mROuea?5 zU|p|E{l#ODV*!E%f--n^JUh~&LU&>x^+uCatJ9g-KdLu6KMPwk3`p6XoP`<0B?5$m zRHcw=qq51dDkck%+(pignW5!LRgP>i(owF9K_{=yZ+}*jb_oI50w%*GmKs|I3JC5_ zt{D8;et_romAo6@gf{O&62sZA%+I#@78BoM;@{s6!}j};K+09i%7ks$%G- zz^$%)6`@CHlTV<&gAmb9k`N>MaFG*ZrY5{d42hy(Cgt%i(ND`2!*0lWYF@ZdeaxCpIevuBZ=9mR2iJwZfb z&jnFb1yNK106^FIn{qkcW6Uws0kCU+d%L-n&!24N^Cxr3WD@|Ouc{vT^mJ)FfFuo9 zU6iD@73-bO^nX|Y%5iALgy&5w{(k1KfN|vj5JHAiDW&FU`9FZr`g+?Hi9CB^F=Z|u z?*afYMRBus+hf(}jJeci(`V(5Cz*{#Uy=t0$9C_jUJu@tO0i*HsVoyj4CZo;kqv&5 zxW6wiXEHS^2z>y6h27oj#8)!_0EdM1{)O!A-J@wzO*odltC`HD<(mKor!!Ur`1}}u pK|-6GH2{FO*Vj*jQp3=+(g$^Snq7+hn@9iv002ovPDHLkV1f$Y(l-DA diff --git a/assets/icons/16x16/x-novelwriter-project.png b/assets/icons/16x16/x-novelwriter-project.png index b34c29c4dcdfe142fc34849cc73bc1758dd16a5d..2329f7570c6c7a03538415b2a660e82c2a135da2 100644 GIT binary patch delta 577 zcmV-H0>1tF1e67kUVkA;L_t(IjeV0(OB+ELho5(|o6SbEiHo|}h;6_>1Vjr8^`ym{ zAZ#z8(3_vbllTehAveE);6)I>frp-o1pGr#QHn$i-5#>;#+@F@E?J=t3^NSO^Zw>} z8Bt29D2lkeyhKC*P)eoi;Qry^f%WxuG)*HJqLfnYcAL@BQGb3O9@1^MF-j$VUtD00 zjq!17i=u54$1&H}*91Yp>gs9=Ndd0wah& zhn*dirV*c=(SHv^ip3(;YL#lWN}*850^&GM0q<5;C>Dz>H5!DbiP`J%tJOk85Rr^T zJuy58&~iCM1YOrja=k=RCS?ZjIziID*BAZ^ND};+m>_(4!L8R3kxVxRA%o|llu}n$ zS2&Kta}W>)0cFRb=lgu$+~oQG{@=4I6~687Q(IU-DSt(`+huxsIx8`6nv^OPlu{H* zCB8PB7$YNSy3XhAZQjq%zwIEgoXn|uoiBTP_>Ye)ZER%hzX>=vH~^qltMMF$M3%+L z$q7LaAR>64mjbjwiE$j``#vJV?CdO-WpR3X%G1*muInNqSeBKMsJ}Mb>2z3JT%=qs zlh5bzJUWk|p&^Echp}xtEta%YlJ9(eevYoEFUquSa0Lj%kh!@z48!0rKfM8}{K*XM P00000NkvXXu0mjfO1c;y delta 551 zcmV+?0@(eO1^NV#UVjHkL_t(Ijg`_tOB+EH!14bKyT)CT-AmDJ2(}A$!Pr9eU=IcL zVx5Lqw1c#9X$B1n1=&nEF;FVY5^NVCDDvdgw?4{E9;Rr+9H z=FQBHH;)kj+uPelI-UNc>-tk3h+3^?93LOQE))vCZgUENX@8pT`1p8U2=UN;05nZI z^*qmUT{r3iQp$u7f=0E<=e0G=(NTU>DhwJ1_QC?MR#p%~Af?1{oaex)=Xoz&*Nv3B z`q{w&^-_s?snpGV+uNgEtMPVqmEqxGeBZ~itdTGbKLQ`*z53!9fTV5nerJd2jSUoC zr@XmIaCwQQX@8{CX)>9N7#J961KbC0;@SK>_VhF_mzQ}mF~RRnhkB*bw+<2wf6;5ZJNrg3z1M6=n%vMhuUXqwhrK^(_H9LESD zxVX4ra&i*WG*J|VrKKfwT_>4LVi*Q-9N&(h3$$9Tt&@|JH>p%=NKvj|b#-+GfU2rQ pQH1aNs312VtXi!$>h-z@@CRn7tuCj`C&2&!002ovPDHLkV1i1U0>uCT diff --git a/assets/icons/16x16@2x/novelwriter.png b/assets/icons/16x16@2x/novelwriter.png index 6e62b8e86fdf74cb2efef9aea8e429fc86909e1c..d0046519e0a276fb542f93cdd118c17f3528dd63 100644 GIT binary patch delta 1394 zcmV-&1&#WQ2fhoCU4I2jNklR@ zjT+G+&psH8D5QP?KLFpsCkXnWPx^!}V&Ww{84RMJ@u3E>YAMnd=s-KY%* zpFR6QT_z{bgzLkluX`)KuYdrcs;J@)1@)i#=gc$PS;x9{VySEGyZ(F4iC}3sJT=(c z=Ycz(fQq6jj)X)ntq`pw8Osz*CmqEgSW*(9lwMuze{eDgO)zYXNx?-CAJhjxz-&gw z)9FMawh+M*?0*VW5i#O)9eCEV4c0n|$=F9HAx2OeA*hH107e9j!6kA<>;=u9t)M8@ z2Q-gPLQoLrVIaVO7!q)CVNyUFbqeRtQJI})JqVdUbQJmqC|~}T;@vq4tIMFUUMRBE zw~gx4&%;yu5iu#K#Ng_l_|G5!5RpVzC5>_6%X94g?SB&D*gkRLGjg^`_uA^laNL?^ z`TA9+ckE&Q<+sW8Z;vn}2A6o7C(lqwa$dxFLL@o5XQ$a#DpASj0q9*>ZV&FHTwiDZ zKU0jI{|I~IS`LPXU5Poxm6ZV>*JilP9YSj9mPj#==Z$TntW1 z0s{t1rhiyO?iPehIy{yPSMRXx;ukdPs~aqj34z-K@s316<2Re2H;v&&{~-6b4uJ?g z3$u(Y+#;u~|Ji+en)$zfN5`Hea(I+&I1?QKMJ*s2Wr4RqI|@x>_+@mQ+Qd8LOJz`) ztJhh&@F@qTuC$QouCLQGb(#CS$H|2SK$B#QJ%4Q=a=q1vNL0@?^-4x=^lxWn;yB%X zTgewngoP4?a)p&+@AKEd&JFsN>H?~bbRUrJ0|1kNy1kGRY483A149(bm1F^NN4`*E zX>ivD{ruXB=SfNbAd&Sgdq6c}rlM)iX2j<63An#*^scZ$KWH}6bc{vg>gWhq3nGz{ zYkvu?eaQcB($Ku$N6MBI)Zb`jM0IhYv#a}j!fF{<*JHhwH<49oD zCLV}da_kMk=0dcw>P<0V!+bI$dK1>>;D6frb<~Vp9f)c`dVObLC;zRiP+eOCV6N0n zZSQkPE=U?!GO#|({ItzvJPHlX8z=7F)c`|t2NdyeMK|KBjsN5<1Zp!cWtQyQHge&P#`E)xc}x!7MqPoIe%Xu zaMs6Ce^8}(<$HRTt8ESMuCLSm;{~h;vwNPw?0bR06q1-2taY=VVzcE~m0VCDESAX^ z%NP@4-DDg0i*RU^+R+nK%RL>v-xOhHXbd^>ESnj8WYDF@41qxQ{QIP;-E^m)G6FDEg% zF|4LZ+IAQ=o4ngZ+<+rstu+6b4{v^Q@$~7&|32c5i^3zwg#Z8m07*qoM6N<$g03&4 A(f|Me delta 828 zcmV-C1H=5j3ycSlU4H`^Nkl{C#nx1%k7OD%PL#$+GSST3+eHbaF&VYSxbeT7 zbLRekGv}T=a|i%{D2kjSNw3U2|Bw+v;2K33W7_GdWUs56?SJm>)`=*J+;J@S*5PtB zAtJp_^Nc8^sL1k`&FLIPMUq~X(i{K)5vkMdZr%%pULtQcyGm)E4S|B-MndVe*4#*h zQi3;So)K>pr0F!SjgR{il2ndnvtIxD^|qz5^5n6dwIFm;`1p_dV9ZE zDl1Pe0$^BzWH?-rF$VyEgM+eM^M9nOd@>Mt@NsOcJr)dBTp2)5r@4zPk}E9|xwkPf z(URQTE4vcFRYW5Z+xq0>qx13%_dp>rL?$#g?%(xz;(rVP5xAgUG ztN}n$lFHFy(dxRozF8fPRCdnk(UIxg+uC9m z20)XEwhj$_Hp)4a4oC|Q}O=xdwI`j_?1~|9- zxKIv5WVZJ9U(bez*K=b<=>mt>d*B-wSj`8KF@HWXvX;-RXlNr%&& zoi(l5#l=wq@OM1l3x!_tW^+v`#`DvYlkoh?%Dd_5Y5fmbidspfW_pJJ0000 diff --git a/assets/icons/16x16@2x/x-novelwriter-project.png b/assets/icons/16x16@2x/x-novelwriter-project.png index bb439d8d1dc36fa2358c58411f6a418cc99a430c..78889afa38c4b6035183cbc6c3f3c68db1ba1284 100644 GIT binary patch delta 1358 zcmV-U1+n^{37QL#U4I29Nkly*I*AEt5Ow0BnnF>m7;U7%5drP{ zac6F)04)~#ENjEo>jQe^=7 zT><#V#<0D6M|{K7Ssg(O4!Y4`O0s0-w)U2BOFX zg=S5E`o!jj2K0h}P$BTdc%015n@nE5Oe&R9*4yoN7JnBP6%burT}(_&l(|C_fSk+a z8Jfx!A(;%Z@p0y-r^$Vf8MoU_DwQG-2=L;?3lA(T(b~|RXnT;(i^qf9T zR`)}MxV+5A+1VmxrRiA}K%vPBslnyKWHJ>A^zPnG(qj1`OqTg)eqM=#LZw426ryrc#QGQWvO^CV)ycKYuS+YmSmhDnM!mpvJFu5S1z`1zI%- zYuSA*<68b#qnd-T+E^tpYW=DJbXF^Ci3C|$CMO6;PN(A6|KpCD0kj`ELb$%3v`)ub zcQ?HU4^mfGr+P>Dugan1LURB9efs+P0LW&ue2zp|T3Dd1rw5zOrX0C}sVV+EbqZZN zO@F2!?O;7!1-+j3efv0i>5_6n=7IbDeujpIs#`#>*R#2`m9Aa8XliOIGQW3lknW>L z5fTYZ$s}Sbr8Gk{isi0bFmosN@9X?D>uP;{8(ZT507VH+5ozAkVsYNvxBA~3g8I4AMyK;p;zJ6up z?OP6xjnVFQqyKJ|S~5iyK%t^)WHOof{n|AW(I|~}J9@poY;C2iDZ7+vDSrI;G4u2D z#N%;NsT9YK9pmA{hqzoWHf`F(y?ggKdGaLJuV1IXzn@2s9x*gDL?jX+91b%&I)ADv zx8@j##bT_itZ?YiAp}9d@Au2w;G%f*KeA9(fZ6}`Q^OioVH*w~28W}~mKkF~Wmnwpw$ zxm=nqPz}{W#dC9W#9}ek*HCL~D}UdrhlADCRf54_ZTErF zyv^luOifK8NfMGIVX;_{Wf`;Cj3i0ubUHdaJ85oi#_4p@($d1VZQF=OqXYs0hKGlV zL?S$W`jn224%NC)REi%wc!0;_(ahn(d!8ETYK148%@Pa-*|TSl!Yk6`^+$S{nVBJx zNT>=>i;G$dS1cA&9=@6u09aXBAs7s5f+$*CL#fSELqh{ww{FE|vla3G1*9Gto6rX- Q%K!iX07*qoM6N<$f}rP;5dZ)H delta 1105 zcmV-X1g`s<3!e#)U4H~DNkl4haGJ2Xv}v`v;Cnk*qwFCMrxk=0}eQRIxo2{`d0E(jONRlizwqg^D#n9{ZwKPqKia}JBN|201;C=QCxl9Iz z(NV<1VQhH4*nf>gP$dvRtWu%l)-5!(x1X9z5X3PA!!WfzpD$#y*;=huYm_&x&~ZAQ ztAm4s`Xm3Rd-t&M;spSJl1lN%&JKu!170CYCWB^p7+*ek0IKTm_X!4r006mM{@2SS zlkoX`yYYCO2T`&E@wK(%=iK%-pY}+P#js|#+I}2HO}pJM+*JQ{w%&(k+o zSK)d36w>x~T)KVxd;qmHjqCUCpBa<1v|#1Q6MtmhzUAp#FJB@V2;j!l)ISyn&hZl} zuU^I1b~|d+YMw4=Yr~DHDSW2apFQ!S0M3G_wD`FJjv&68oCG~MSaETn!p*3dsjgjv z%IW-|x&Qe>RCWgz7Z(u-1hBWahyDG1jEs!H?RG=0R->t@3G?&w7#|;p!{LCzV1UQt zfq&6x#OCHE*4Nizu~^Q`TXqLHjzc1mz|hbT2!epm=YvcpLnssi%d!ZE!`Rr^Krk4D zQmF*PFqoU0gUjVYe}8|`ycK+1u{ve0NW0Dz^XCCFqlBoYa* zEL$D`Ns_!%Xg;6E!omWg(I|vMA;e-a06-)XK`0c0q9|y!TIh5-C=?1P6bf{7bReBh z!|(UQWHP~MG{WokB46Zy%R6b$%*^~eFfd@e$lFn&<#IW=-EP#Ir diff --git a/assets/icons/18x18@2x/novelwriter.png b/assets/icons/18x18@2x/novelwriter.png index fd16d0bf16776d9a92f820c71fe174f9c53cce68..f049a5268fb260d3c5ad810120356c30a6d54048 100644 GIT binary patch delta 1600 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 diff --git a/assets/icons/18x18@2x/x-novelwriter-project.png b/assets/icons/18x18@2x/x-novelwriter-project.png index a8307a129029fda5bf2c75ab431dbe570490ddfe..3bce02e931aa3861ac6b9470bab520a631f676a3 100644 GIT binary patch delta 1630 zcmV-k2BG=e3Yra&EDD4G004vmFsmIUkv1oP1}8~GK~z|UwV2;e8&?*`Ki6ZA4aOKF z6CftzA0a^^2_c1MC4yMm&8`H|YHNwM4@D^dK-IUrmb5RC8uf{XKJ+yYn^goVk)lf7 zJXBGe-FPd7BqWBd3>yQrox(2558HTV_958v*dE(-cfZm|GxyG%^O|UDtJg zO0>4NMm!!TlgX5JnW};r0E7@^vso@*zFe0bQ3~|%;X_narK_t8NsEIZCh2(VEe76yf1f9FbF6>=J(*MrEEa5SZG^_hId$n07K;U4 z*AYS#z=RM8AqWHl05zcuL$o0J07TIiC+X7Q?D(1|wOU zjoi6&ym9Rs{=Pl~kgBRYdi03?{(b;fR#w>D+%$!)d{mr6W>t5`<6-#vbx!#GxLhupo0|!Lo;^#~2Opr8 zI7qLokjv%DhQIi_5>y#brK(&|dpjM9g4Jp*7?UK4Hzp=XyIe*)ySoM(r66@jsJP0O zN@{GxYPFUbb+xo091g?1+QES#)9QsX9WpbhQdN6fGv{XK{}Z5EI?DX12$Y9013C(5 zy-}$NR19VYTMMif%>QkF4%LzwjG0V_%+cJ8=5n!}$)M$nS#z`Do}*6wdfH4QWU*Li z7#bpx&7$i%J8m~8-+dQZmjA2h)mkIVmX6}L{_Urq@|V-6*;-zvXKakK!^4F-r0Y6= zyndb4@4iFRG`9El5Dg6!P=ES~mlG2p1pN~eynXd*;n`|n71y$VJdnfTVCd>qa=9F` zEEg8SeE+4%N&f!LH>j}~jtX{io15s}-JBa6Gr&|+&85R;v(b21p-bn^@nDd5Zr(&~ zZ?9-vQxx8tnc>*sXYnrvGCPX<^XeHG;P;<>hUWDe?BqH-`NQX*6YTD;J32=Os&oh; z=o=p9?T0VxhOU zx6oEK?MszRCb@Ix4vM1i{P}Z^9XrP42#WV_wI4! z$`$V3y-PS8W@BT6NF>74)D#X!rMx^MP&S)oZEcNED8%UKD06djEG;eJa5#AJ;stKE zn|M6V;^HFkde`dr`*AoN%+JsB>eVYQUc6`u116O^4^|9V4B6Y;%lY%?f!8~SU@%BL z9w!=&q9_V~(P*>)uIoBuV`HqYuA=KYBO@baK57D)rF&_AUZGHkot+&P78V#EA19Sc zvAViSC=>!97K>rETG`*~tNkx0a}7Bw|B(bm?6&1R#ktBaE- zPm;-GP!xroogMDqzt8CCD5p-HVt#(UYSu~9)6>&``HQWsEi#!5uA&ciAq284qbLea zrxT~siJ~aTvWzUt`2BvGnwoIC-SqVI;Pra(cs%%gJ`_bEnM~q#yBQi9A`l25grKFR z1-sqO_VzY5n++9>dTrL9)RQQ7iu)e;|%a<=nr_)sp|5DlQb`(V^ cY^{s+AHt1c%r!3A$N&HU07*qoM6N<$g7bSC$p8QV delta 1309 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 Hu0mjf*o!`6 diff --git a/assets/icons/24x24/x-novelwriter-project.png b/assets/icons/24x24/x-novelwriter-project.png index 14e47ad3333d4df205b61dc03732d51455493566..15854e5b5833f7094140f1e493711b72143c6148 100644 GIT binary patch delta 970 zcmV;*12z1X2bu_wUVo=aL_t(YiH(&_NE>Mw$A2?pCVpg-7&VGuYW>I>aCKR6E$V{1 zlp^fK!Y)18L&>3sVo#;ChYG#-*g~)M;JtV$?5&4_2dTzrR#6fHejAcBNo_LDyN7g! zBs06e$$b9Iw}S(OuG2U$ zz|Y|@{{DU>NdiEUBzk*$IXXIGeSMwL(a|ab$q3Qf+8V)NkkxnZIDh$)ucZCc!pP%FN`A8;{Y;JDWC#X%Prm7T%hbasWBIL5VGoL5=_AQ#Gp(qN& z!^5~-E&u|70O@qvnuAIb1G=K{!^4M6hQla|!iQ(i5P$FAmp$9s;%h#S)9FN(WxQUm znfQx~3wsZ0anaeyWH^k+ZzTN|C7op`-o{yjONE0bYqX^FA1F;b}%sZ@%Ii3tLMK>ZL^hD8X0 zrhjQ@n#TP6Jh4~|zu(W!&JKx0g4NYkpghGkHa5uRa+b?&2`WdSQB|@mqw6|7Jv~Gs z5vHf7iAJOJ_xF>}=Mh4X&1NZ;N|umWe%A(3Bobk2YKp$TK7eap^%4Ylgj3# zP^|7<5KZ$?`cfG9(!F$laO?IUD}la@LVXG}1i^=b^tDf0S#bj)66~Z4W*Ym_ z`R9>HB&jG$>q*T43WWm2V$m#>NzkwI&G%v1QV{C2?$!4RgtBcjuRSd(x<#O3}c6PqZWHQFo z)YNxy%wZb3e*Avy@AGFW#m~tk0FopT4u|RJ=)h*P5eNh%yWKuiDQ|jP0|-SFaA*Lf~{dal75P-EL%A-Z?R#?|;S(hHl>EqpMdLzk3(u(xrn{ z7K>~=ecEhzbHMwdP&F2kL}yL=^}j1P6X1x1_%F7s{{e7H)dh&!SUTGr>W=;(8pV=j z?0!GKfq^pt>V9a0*RSKfc#(4+59iLG2jHK4p2ssYl=Jy&-Ea5q@yC-VOgwmis6Crz zD**T~9DlBw1GrR`Pj20U{rzg+dy2y7?Ci1T4FUBOynLA}_wOUSTsR{UKAWFM@%tN& zsk=qZAof&>4xbOF&)2m6)Bu3)SnR~L4FTKR+hj5sT3T9gxm+9I-%`!YZOfHur5D1{_I+kUjX&Q!M9KS`TX_~c( zicv5a1fajaAG_U7G#aI^uaCXGJwl-n`Fx)7@o_XwV`F23U@&;dtM<{Ki9{klzU#YO zQ9h|uDzB`pd@(sW`O_hQWm#fzaq)J0d;7<{`%lo+b^Vu#iHSKOgaz;h%P;^sF<(MQ P00000NkvXXu0mjfj_R#} diff --git a/assets/icons/256x256/novelwriter.png b/assets/icons/256x256/novelwriter.png index b59a2cc0d6d0be9a55586fb6853fa5e0c16718d1..0874b9c0da105db2e9af77de4368107f6004eb52 100644 GIT binary patch literal 18571 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 Z{(rz4+en&hf2sfg002ovPDHLkV1hqj%M1Vj literal 8436 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 diff --git a/assets/icons/256x256/x-novelwriter-project.png b/assets/icons/256x256/x-novelwriter-project.png index 20930c8cf17549b6a7f8881eb1685b83a9df572f..3282a720f7b9a995ec0f8b74c5de4fe5f02e18cc 100644 GIT binary patch literal 14768 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 A(f|Me delta 828 zcmV-C1H=5j3ycSlU4H`^Nkl{C#nx1%k7OD%PL#$+GSST3+eHbaF&VYSxbeT7 zbLRekGv}T=a|i%{D2kjSNw3U2|Bw+v;2K33W7_GdWUs56?SJm>)`=*J+;J@S*5PtB zAtJp_^Nc8^sL1k`&FLIPMUq~X(i{K)5vkMdZr%%pULtQcyGm)E4S|B-MndVe*4#*h zQi3;So)K>pr0F!SjgR{il2ndnvtIxD^|qz5^5n6dwIFm;`1p_dV9ZE zDl1Pe0$^BzWH?-rF$VyEgM+eM^M9nOd@>Mt@NsOcJr)dBTp2)5r@4zPk}E9|xwkPf z(URQTE4vcFRYW5Z+xq0>qx13%_dp>rL?$#g?%(xz;(rVP5xAgUG ztN}n$lFHFy(dxRozF8fPRCdnk(UIxg+uC9m z20)XEwhj$_Hp)4a4oC|Q}O=xdwI`j_?1~|9- zxKIv5WVZJ9U(bez*K=b<=>mt>d*B-wSj`8KF@HWXvX;-RXlNr%&& zoi(l5#l=wq@OM1l3x!_tW^+v`#`DvYlkoh?%Dd_5Y5fmbidspfW_pJJ0000 diff --git a/assets/icons/32x32/x-novelwriter-project.png b/assets/icons/32x32/x-novelwriter-project.png index bb439d8d1dc36fa2358c58411f6a418cc99a430c..78889afa38c4b6035183cbc6c3f3c68db1ba1284 100644 GIT binary patch delta 1358 zcmV-U1+n^{37QL#U4I29Nkly*I*AEt5Ow0BnnF>m7;U7%5drP{ zac6F)04)~#ENjEo>jQe^=7 zT><#V#<0D6M|{K7Ssg(O4!Y4`O0s0-w)U2BOFX zg=S5E`o!jj2K0h}P$BTdc%015n@nE5Oe&R9*4yoN7JnBP6%burT}(_&l(|C_fSk+a z8Jfx!A(;%Z@p0y-r^$Vf8MoU_DwQG-2=L;?3lA(T(b~|RXnT;(i^qf9T zR`)}MxV+5A+1VmxrRiA}K%vPBslnyKWHJ>A^zPnG(qj1`OqTg)eqM=#LZw426ryrc#QGQWvO^CV)ycKYuS+YmSmhDnM!mpvJFu5S1z`1zI%- zYuSA*<68b#qnd-T+E^tpYW=DJbXF^Ci3C|$CMO6;PN(A6|KpCD0kj`ELb$%3v`)ub zcQ?HU4^mfGr+P>Dugan1LURB9efs+P0LW&ue2zp|T3Dd1rw5zOrX0C}sVV+EbqZZN zO@F2!?O;7!1-+j3efv0i>5_6n=7IbDeujpIs#`#>*R#2`m9Aa8XliOIGQW3lknW>L z5fTYZ$s}Sbr8Gk{isi0bFmosN@9X?D>uP;{8(ZT507VH+5ozAkVsYNvxBA~3g8I4AMyK;p;zJ6up z?OP6xjnVFQqyKJ|S~5iyK%t^)WHOof{n|AW(I|~}J9@poY;C2iDZ7+vDSrI;G4u2D z#N%;NsT9YK9pmA{hqzoWHf`F(y?ggKdGaLJuV1IXzn@2s9x*gDL?jX+91b%&I)ADv zx8@j##bT_itZ?YiAp}9d@Au2w;G%f*KeA9(fZ6}`Q^OioVH*w~28W}~mKkF~Wmnwpw$ zxm=nqPz}{W#dC9W#9}ek*HCL~D}UdrhlADCRf54_ZTErF zyv^luOifK8NfMGIVX;_{Wf`;Cj3i0ubUHdaJ85oi#_4p@($d1VZQF=OqXYs0hKGlV zL?S$W`jn224%NC)REi%wc!0;_(ahn(d!8ETYK148%@Pa-*|TSl!Yk6`^+$S{nVBJx zNT>=>i;G$dS1cA&9=@6u09aXBAs7s5f+$*CL#fSELqh{ww{FE|vla3G1*9Gto6rX- Q%K!iX07*qoM6N<$f}rP;5dZ)H delta 1105 zcmV-X1g`s<3!e#)U4H~DNkl4haGJ2Xv}v`v;Cnk*qwFCMrxk=0}eQRIxo2{`d0E(jONRlizwqg^D#n9{ZwKPqKia}JBN|201;C=QCxl9Iz z(NV<1VQhH4*nf>gP$dvRtWu%l)-5!(x1X9z5X3PA!!WfzpD$#y*;=huYm_&x&~ZAQ ztAm4s`Xm3Rd-t&M;spSJl1lN%&JKu!170CYCWB^p7+*ek0IKTm_X!4r006mM{@2SS zlkoX`yYYCO2T`&E@wK(%=iK%-pY}+P#js|#+I}2HO}pJM+*JQ{w%&(k+o zSK)d36w>x~T)KVxd;qmHjqCUCpBa<1v|#1Q6MtmhzUAp#FJB@V2;j!l)ISyn&hZl} zuU^I1b~|d+YMw4=Yr~DHDSW2apFQ!S0M3G_wD`FJjv&68oCG~MSaETn!p*3dsjgjv z%IW-|x&Qe>RCWgz7Z(u-1hBWahyDG1jEs!H?RG=0R->t@3G?&w7#|;p!{LCzV1UQt zfq&6x#OCHE*4Nizu~^Q`TXqLHjzc1mz|hbT2!epm=YvcpLnssi%d!ZE!`Rr^Krk4D zQmF*PFqoU0gUjVYe}8|`ycK+1u{ve0NW0Dz^XCCFqlBoYa* zEL$D`Ns_!%Xg;6E!omWg(I|vMA;e-a06-)XK`0c0q9|y!TIh5-C=?1P6bf{7bReBh z!|(UQWHP~MG{WokB46Zy%R6b$%*^~eFfd@e$lFn&<#IW=-EP#Ir diff --git a/assets/icons/32x32@2x/novelwriter.png b/assets/icons/32x32@2x/novelwriter.png index a9b489049e8694e164a549ee34ae03d10e67f12c..57f5e307760c3e527997bbf8e022bc2c52ef9984 100644 GIT binary patch delta 3208 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 diff --git a/assets/icons/32x32@2x/x-novelwriter-project.png b/assets/icons/32x32@2x/x-novelwriter-project.png index 0f2d49d2e559c94704a006bef99cf80c0349a472..b941a2f255ec98bedecad17897a0a2e3280c45a5 100644 GIT binary patch delta 3159 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 delta 1318 zcmV+>1=;$S67mX=U4I1sNklbC9LIle-b|9ojL}5n)<0bPTazQBKt+JQgDy0<49?JHz?8VZB!XB)YQfTQ?iVLm9)nyG@+ol?8 zQWG_qn9RKQ_OcPTILVAerv*Qkfj7UG-}gK7{!Si(Z3Kfs8-K5=RhSR~K0ye^swN1L zU@(}?m7(1A#>hx_iOcn^)9G|`7~3q;m={V&HkC{!lF8)V!ONHL002V(05?WPda7z` z`y{7RwOFGe(uyKP!r@;o4G-VJ!C=r<>GAyNcDp&Ng&9Q<1e#UVhOXM$-#K1Yt0bqh z%xY0)5k;{q>VNfCbC?hTA@tci{Tvu$4ih4LcEUgAz<|~8W-F{rPrGNw#~WxmZR2b< z&D+xQzUln=1pt6_JZ^jS`0?TOw{OcdMG}#Zp*Zb$@V_{;wYS@A~%T%c}6hhYey) z&02GJ_ur+})ylpZP*W-X&7()YocJ7gbCb(XP98#x6>N`~5CkhL;$}1|J`ab>N}HRP z+xz-v5XNj*>cK=GSbXuq%a)g=o$euKEZ(I;Lr+UiPj#j~>+FAi|L&iRwULsq)yd z4*&owGc)DyCnu}3uV1@yCZp?yhQqFZ?%g}$zkhIH!Dzms8lbYQR-8V)(ALuv+FtIi zt4lU^b-kIoeY+;9qx6|6&J6qDyvdoZv zE6K!S5>-{hx{B8aDl3)a7cb5f3TyA{n`V`jx-&3aU$?IMu%rgvms zzdzyi`~Nf=k2DRf&dpV@`T4TkXBj>5004+mfKbSt3WeMN0F>t$q7(tZjt2I87=J}P z&rS^uO`xMk6K3lYo@Y`Z5c#^le@ZWAU*-WvNr`%DXlMd_KEoym&oem?h@2Q0n9TR- zao;8~GbW6R2iWJC*oX-;;sGpJO5`(PRy=@3YoVP?>_$8Q07o!Z8Dq3?XmN3rl&Gf$ z2PeSiOXNlyGvWy$lwhplZogk4<$vYh$g;fe=OcKBgVwaSN2n~P+j@Iv%{=);Jf3vC zdi5(Fd;XlB>FmU!D0T>fu60t#E~jnk)3GdVd)Lqh{5lPO!Tr(3D6QaKa~p(qMFcI>E{ zgf4;6(NU(Sr`f!Dvo83|d%3zw&)oMjXU+f+4u`8IAr@AoQYkK6xWLAZ8<8XlK@b+0 z3PRC)VO^=G-hVGw2cWsR8Nc7p;lqcCL?VU>NQD*AXcV{Gjm2UC7G_Bh1d@uviFe-N z=F}8Uzn?Ap_EBrKqQv8z`}9+0Mn_5BzKzLZ!DP4NfBbRUHg3dZGG+TH^~^|9QxgD# zgM&Qv)Khpop6Usxs){Izc>^R92@XB|G}f^(Ou)_K$A9_kyYG-44w8WYwO6kqX&Ulk z9~$uE=b!U^V1Il_}qK1p3&U0DJ}CX_3gp{>sT{4+L5qQ&V%T&xopfmRYZnZz|d&WZi|xqS94>2$h?gwyFH91iET zYiVhrt*wp0!NIa5%C10W5LHo-L=jOCvIMFT0r33(JEspEAi4-Nmqc4z8=+9>j!2Xw zkh=C+f8q8FHKENn9XJ+Ny`52zyE$@Stc5d7WG-=g>pqO zXfEMp%Mdy`@N{;f-M&ra+&L^4FJhgWE7En$&hq02AJDjF4GxDR&l^dSL}O#)!h{qA zzJF*mirH+gj(`!l@xTLgzWzGx-QCpI)&ig?3g3PBA>ofd#->9eIW-i+SR^0jMRoti2#qe{=J2~_%c zmBvQ8wr<5{vlR_kTU*P9{rgE+twrrDiGKuF0|8R0)RMrLC7_pl6^i8bVzpXJ<~MEY z*OPKOiwD&-qEl0((`iHCt6l*k-~lk1N_H*?!a^P-77rl;^RXDJs@~fb$OT*KX~dJ= zDR?O3h3;1Hx*PI8`-scw8J)#@ZbD00DWl-aktiF;s`(D?m6TlpBfv9yM)fmtH-Bay zmTE#}I=`E%w&XZqayUq))6ABXIs28a$vHdndRmCyrPjT^0KLYk(rY||!gi6Z}= zoz3PpF}odKe?PJ;m+B(hk5S-vqGQN}9(w+HQoX(0ve}py1R`!X=Iz_*c;pdeS=L>F zrL06Q;7a5wdLcm&kY$<2-+GJSFMq!hl78-|9?KTx9jc& z@;KORwC~!*Uw7`zZidQ5b;AS-K^b|^Eqj+Q=kEs(qWOHK!CNdmFfhROy?b%H-G;ZX zh6rT97zMBQ(Kh*f?0)Y((u*f;xso!QsqgRSiI-mDzWeUWelK^GfF8&~a)mmDW#8)6 z{O#R$Nv&9s{d-!HaQ61HJeTw|p&fGCQrdhkK|-*|&$T^(sr z#M0BlGY1Z^eEIS`M^FgfC>g_ENbi&&W4EQs84`clx|R6LFEf7pI8VI#YQ;+vJuFod zCn1B)RSFT*)=+UEebboYk+9pnl`9Ml4KXk?p)F-O z_X*J1*~y+gd)TvQ4*)YWGYEn}Yildlu3bY>6ecDn5CnmX7cX+_)-7gdXIZ&&B>>yD zZKI~9hGWN$5eNkE`~9q0vu0@o%6Xo`ceB}yrfJ#CG?`4IX@43%pAS`4Id|?Hkw}CM z8#XXAGsD=}7yzxUt!SEt)oNwSmMz)q+`hiPl9OqeKw-m55m-+$GkoI232JI;=J%d*BV~0mWv|zZ-EJoujpFzFv0AOP zw6qY7Myac-!++^?qG=0v(!pSm_3PK;cDp%s>J;H{*pN4>Du$=iX+}myIC=6UilS7E z&VnG|Tg-=6uU?I&X{=ql7WnV#%+1X)JUooWVqx31ZS?o|lS-u+8X7W$spz8n`t|F4 z^UXJG+O$cx!OYAIs;bi1*hnIgV0wBQhr>aAeLbqGGJiESg)GZ7H#Y+ii9`s8!!$QH zBg-;#b94Oh#~*mTUR*90u~>{yD1^;sqoJVzfXkOJqiGtgt*zNq z=G(}~{D1sBu~N>^7Gl2jab zOa8ORnKNg&bmCb!w~a1=jLgo?GCe)boX$1T o|3hkPYiVd`z^QY`kdglYxmjMMmVGT000000Ne4wvM6N<$g6TeVw*UYD delta 1887 zcmV-l2cY=U5~mN4U4I8ONkl+iT-u?kvY%4TC#Wp}$hFJzRVRaxn zCPvW2pk`;IGd?iW&4xbAJZUC7F`37i__E2wNz^cI%$P}J#fLHLNQmG#XfhZyuqc)q z7A2-4yWJL~rBK^@_d(k5rtSd(ZiubAQh{0!eV@%$aiFJs>}s zUAhniVWS`jC!3p_AFkLpQQ^gl7o|WT@E1vv92Sd3tx~D7)2I1rjE#*cp-?C)isCyC zhhu0ZzN$oplarIj&1UnTwr$&{lO!oKER$erYD&=QbSkgcd+*%2b1M=dE-pBK{=7~U z#Xr~7)T{~l7=Nr*D-{(LDp{8AwY0SSHdVhR0)oNdZ}fWotVW~BEW;E~TwF{=MTJU| zr2bSzED@kmskEZFqiwQe06gMq4j`&hqmAQ) z<2?EPdzhI)5d8kpeS)$1-N(eB*x8~dFR6qscvk1WxEE00iVxD zUS3|j%x1FzsD_7!`;&=Cd8|BhyBTe3gP9os1Vtfu^Cr(OTtIpJcma8MIX??tFO!{} zbbtCOZGWG9LU?*QVcTV8WsHxH~?$7oJd)~qn;kb$;njB7X}H1_}8UN zT=@87LV>`NdbL{3)~#D{xm*kk3@|b>5`Uu6DB0QBDoK+1PoF-$;k5-sU%YrN@-YaC zLh!~7E+0FFGH<-cU^E)pwQCnvs}-$Qi$a99dE)NfH)|C86Kg*jQ+Gb~d=UJYxb>b~}YTcAzgTBpeJfe)ld@Jw1rg=mI-2 z9A@z1MQT3y03id@bw&i_)YWm|n{P19n=<7{gezZs!ISU4Lx@Bc*a!Ohc+}fV>9%cY z$A3=$6%-WE@YPof$ODKf6^&nhiDBo?r9nd>hJX4g?a+_`0qeJH!SeRo3F`z=WJ6sY zN`kr>uQ%P$Kn4V4=O^DPm~1wb1Y0_-%V;4Bfs70eC=4PHjOSPA`|3cmDd47VIhC` z_FJ+SiBL=?s*fE@n>?(+Lbk4;fcNK#h>_pX+?v_Lx1SWlP6rca)rvuN_;*aqobqb=jXG3|9)gyrnR+| z^73+a@7~SG$Os)B9W*vJQe0fj)vH$-9UbN1!Gm1Bd>Or7&ygcX@cDeSwY9N+{dx`^ zI)t#ymNl&&n4O))K&@8ecDuQD?HWd-5ueY;g9i@)7#tkLGlt1cO0}ii#*GC}3!4h`zo)IyyS=csx{BS1(IGZ2>V}EX71>|zP>)? z*sGevWo2amba!`?m6b((eLa#S(cRq*yc7taC<<=3JMI?~m!15-G91;-|x@709lsl z>gwXgjT?l+;brY(c>qvRQ2`Ji+p*pWg+g?8cB0j4*|TR4d-v`o5{b~>-kuVtCDUjm z5}B0~TtEPbqKMP!BpQvP(P-GPVFM0_gWTL);AJj29FBNSz{>=!si|S(+~M!0O`9;A z&GGxNXf(> Z`7e+Ui99xoe<1(>002ovPDHLkV1nP#o0b3o diff --git a/assets/icons/512x512/novelwriter.png b/assets/icons/512x512/novelwriter.png index a1ac535bc6aff79c863687c1f0766948e080d553..83fc8812f5748e13245e88b132c2669cc6390b47 100644 GIT binary patch literal 42482 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 Y^e^L~I4Rk6W)Sc*H@gI@GCY%fCqjYdyij$ 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 DF^ZVS diff --git a/assets/icons/512x512/x-novelwriter-project.png b/assets/icons/512x512/x-novelwriter-project.png index 5348f53d917478cd8760d0ec66a816170961705d..858703b7fbf4c2a8074f629e1b1b8473981772aa 100644 GIT binary patch literal 32702 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 literal 20472 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 diff --git a/assets/icons/64x64/x-novelwriter-project.png b/assets/icons/64x64/x-novelwriter-project.png index 0f2d49d2e559c94704a006bef99cf80c0349a472..b941a2f255ec98bedecad17897a0a2e3280c45a5 100644 GIT binary patch delta 3159 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 Hu0mjfDJ(28 delta 3602 zcmV+t4(;*YCCnUdr(wYp2t6@yKmEtyc$$M!GM557>&BVRED5QqKXJNq19?# z2K)rr4rBrGkuoY82qBEJEH4s5{P+I-``?(cd_zr8RaF&dGMU~24#~1?)WD`#;O)xF z%72@Qj6xE?YPBW<)xZ`>lH|O+Jdv51Nn&Cmdc9s73ulOqjt=VU>jU4as;sO$s&&3P zwGodWKdu8#1AkjmQ&Xv^s1QX(MWm#p%=*F)Bsn=5Ap}B*BUY>RzqHOzwE!6z8UF-4 zm6Vi3Nl6KDad8@&6+IR$TEyzrtNp=$wOXye)iOWT0tg|F0jyoS7K6c{okcM~Mn(p! zSFc700dPc15mX6awOR{-B8$aBYHF%hw!{=OC4$--uzw05EiFw88)BB35J9Z~=>R5^ zDbo4JJX(vORsaLwH{y|F0ukPc)U#E0!jC#*L^v2J5oSz)2X;IC-Q9RS9@S}FPAB(! zd+ED%3&-8NxJO1bvrnfREectd9~vhkBZF0|Rt1VM?dC|+@ub)7=EA%0a^>7PPe%ZH}1Ej9D`Qh6e}v!z-`gYG}Y{ zw+F3x3}3s(|FpNW_0S=TckJN&i4(Ne)*|lRLx0!PgTd`)vhLn11dX+|G`{y9`m{9u zVeeix|MaIAjNva$B_$;R(BI!bW!yj!ewZ)z;0K+vk z7zYQ(Eja098R_0V+FDxpzcXj(KYt!mXD0@S1HI2T}T}%^n~@S6)RQ% z(A3m~M@3(inVA{bCxkUb)kJ`A-hUrmSAUllkDe4$cQ@{f7x}}BFVcMJQpoAEva(1| zPiJ6YfXkOJPuU;9^hMA_fO{PsNFj`NB8lYjU}|jS!(aS@Z_k|zIsJwW8?aa`*zI=e z>gs53Z|A{-2a~3mjtH7`!XB3kG0AXFYlJMb;QDp`@|)jaPD*0swr#4@N|MC3ZGYQn zY;5G_&70V4Hf%N&IgS(F(CX2z3fa#&!ogq8kB6%~-4t~$Pa|32S$c7~Og7DQcuk+?XD zcI*f{z20CTe&Ir7mCcaP;lMGvh946|T>us=z><|Utw$uMr{kNVOaxg7epoJN;0!;*1oSVyIrKOBa@^dCx2wa7Q zJp1OGT9`0v(5w@F?)Y&Q?c9lT*|KrFRW7p`=jzow_v>G?aM?1gOqdmDb~I6MFz{kk z6-_lYd~xz55ANMV_IS{n&E%|KPsQQGA)SQqdA-!0I)(H8{eN+vbu~4GbXL?>SBKN# z825h4k|k{1yLU!C0%(3Vw5YU{qSDf7Kc}y&i`sYJCH^5tN{nu|s^`Rwj4=4=r!;-~ z>A25^a&uX=YZvj!$qX0=1(m`mdB-)TrNC0IXwCL z>oZ#TFpC5LD1X_vkAFOP5NB>Kkvd!`1I`sI*#5>Ftb6v^2t8FjF?T$DDoXb41K`r{ zeuufOEquS5M8EK1mel}1N=;b4JnWhf3xyA}Q~-dImtG26gjgwjn8gA>cp}77;lnH! z074TX)(RiyfB>LQgjg(mn1!RDhf(s=;k%-W_GjCT7kF06&Nz%lz&A z_j&U0VSco8XS7XvD05N(7@e&7XU(z9oazH+Bl7}8nRx-C%)9_mW?q0O6V*|W&1R#$ zy#ynR>cZ`IlbV{!+O=yb2yju{-rkPQW>dmjwrn9W;BZ%Sb2Dvi zqaMSGi;Kw$_#JX@Z*S0LJ!{sip})VMjsU-Md3kx{=jSWok&zK#VasYfjA76a&g%W4Uk|nHK zwMq%s*4EP6+6ut%@Nkd-O-)TfX*X`%$l}F|Ieq%H;;glyp@G+4drk2tec{4|pfuaJ zZ;#l7EEcwI-KxCra5(t#%P#@2+wEKmZ~~i>lEStS++a>cObMXZ>nSfU=jE4Q=K1HJ z#}aUCMV4innwo&oCLlZDIAd3Um)^FvHoRW15*`>B;7)*dlt2NNFJG>_E-fu3B_%}( zU%Ysc!NEa3`Q(!zH^#en??wvI`{HE8lz#xvJo5}?Wo6{&=d*6zI`-_@6ZHAr0H=F_ zg?H=LEqp#7Kv3V{=f;g201OTeazEf)QQ$KqNur{nLJ7NEE>535&3E5@r@WV!m&fCe zKOXMCHz6@4z*x`hix)2r3XcT%cnB;!x7)3V;};;%%dP*tz;8c5?wIqdPdxDiIe$4h zO8Dl@o62jQPRDKy7W86DfU)Q%alnz4m8Eo&Fxm|D_Vz0N|5vVDsR-EF*~!q*P>=v= zX=x-+a0ckJjfz3~0VWHyj*5~ul+S(e_R|M9e zKr%8iSU7<*z`#*fB$>4W!1#WkxqrDC7`^SOprC-lfGbjN+_(``1I9K#ey&`(qKviz zIe-3qq|6RtRtu1qm#4hGbLWoIW@l$-laP==R#p}XKX_HVcI}$thF%CUVGVG*-F*HK zx0bD~tw9}fq|jUdS(fSS?4+ZkLm8<=iX}^yD3^+Qy6Ud)KaANRmWpX=%_p)7V-vT{IOylBA%ap4n`k zu=TZ_-})n{*r0?H$NXGXlBA%|Gk+#<(3+W<$)-)4 zl>TMSnlPZ zRQ+N^)smjoYTXO`Z+?EhX5-M*tmgT*#zWVA1Q^i-+1bMyQD*)er|NV6B zoAdaWM07gc6*ciy34d_lz=0dUHM`wTUteGN*3EJH`uhAG^mqIB?;pP^I02#DDgPEg zeSLkz$HH>~kH^F1%a;L=W%)nVrc*7z?c29c3n8i<4hMC0bqr5&P2r=&@bEBob#)93 z3;>+#>FN2S+O#3hB|;_tv;-EQ|E4<0-iJC_p7qn`f< Ygn0K8B24%=01E&B07*qoM6N<$g7=9DI{*Lx diff --git a/assets/icons/novelwriter.svg b/assets/icons/novelwriter.svg index e8df3435..60c928bb 100644 --- a/assets/icons/novelwriter.svg +++ b/assets/icons/novelwriter.svg @@ -5,78 +5,166 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - sodipodi:docname="icon.svg" - inkscape:version="1.0 (4035a4fb49, 2020-05-01)" - id="svg8" - version="1.1" - viewBox="0 0 270.93333 270.93334" - height="1024" + inkscape:export-ydpi="96.000008" + inkscape:export-xdpi="96.000008" + inkscape:export-filename="/home/vkbo/Code/novelWriter/Icons/novelWriter/Version 3/icons/1024x1024/novelwriter.png" width="1024" - inkscape:export-filename="/home/vkbo/Code/novelWriter/Icons/novelWriter/Version 3/icons/18x18@2x/novelwriter.png" - inkscape:export-xdpi="3.375" - inkscape:export-ydpi="3.375"> + height="1024" + viewBox="0 0 270.93333 270.93334" + version="1.1" + id="svg8" + inkscape:version="1.0 (4035a4fb49, 2020-05-01)" + sodipodi:docname="icon.svg"> + + + + - - - - + x="60.484347" /> + id="rect1474" /> + + + + + + + + + + + + + + + + + + + + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="190.20708" + inkscape:cy="572.85481" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:document-rotation="0" + showgrid="false" + units="px" + inkscape:pagecheckerboard="true" + inkscape:window-width="2560" + inkscape:window-height="1344" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> @@ -90,28 +178,47 @@ + id="layer1" + style="display:inline"> + width="259.29166" + height="259.29166" + x="5.8208332" + y="5.8208332" + rx="21.166666" + ry="21.166666" + inkscape:label="Box" /> + id="layer2" + inkscape:groupmode="layer"> + + diff --git a/assets/icons/x-novelwriter-project.svg b/assets/icons/x-novelwriter-project.svg index 1d9e9d5d..6495b39c 100644 --- a/assets/icons/x-novelwriter-project.svg +++ b/assets/icons/x-novelwriter-project.svg @@ -5,78 +5,166 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - sodipodi:docname="mimetype-nwx.svg" - inkscape:version="1.0 (4035a4fb49, 2020-05-01)" - id="svg8" - version="1.1" - viewBox="0 0 270.93333 270.93334" - height="1024" - width="1024" - inkscape:export-filename="/home/vkbo/Code/novelWriter/Icons/novelWriter-32.png" + inkscape:export-ydpi="3" inkscape:export-xdpi="3" - inkscape:export-ydpi="3"> + inkscape:export-filename="/home/vkbo/Code/novelWriter/Icons/novelWriter-32.png" + width="1024" + height="1024" + viewBox="0 0 270.93333 270.93334" + version="1.1" + id="svg8" + inkscape:version="1.0 (4035a4fb49, 2020-05-01)" + sodipodi:docname="mimetype-nwx.svg"> + + + + - - - - + x="60.484347" /> + id="rect1474" /> + + + + + + + + + + + + + + + + + + + + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="505.1269" + inkscape:cy="568.88259" + inkscape:document-units="px" + inkscape:current-layer="layer3" + inkscape:document-rotation="0" + showgrid="false" + units="px" + inkscape:pagecheckerboard="true" + inkscape:window-width="2560" + inkscape:window-height="1344" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> @@ -90,58 +178,75 @@ + id="layer3" + inkscape:label="Sheet"> + transform="scale(0.26458333)" + inkscape:label="Page" + clip-path="none" /> + id="path1490" + inkscape:label="Corner" /> + id="text850" + transform="matrix(1.7893481,0,0,1.782571,-45.41919,-191.90571)" + aria-label=".nwx"> - + - + - + + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.3333px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#666666;fill-opacity:1" + d="m 134.77436,222.35963 3.65869,6.65592 3.76204,-6.65592 h 6.3872 l -6.36653,10.93472 6.63525,11.43082 h -6.3872 l -4.01009,-7.04866 -3.94808,7.04866 h -6.42854 l 6.63525,-11.43082 -6.36654,-10.93472 z" /> + transform="matrix(1.2371037,0,0,1.2371037,206.3182,37.341857)" + id="g2509"> + style="display:inline;fill:#a11212;fill-opacity:1;stroke:#7e1b1b;stroke-width:9.99999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter1444)" + id="rect1406-1" + transform="matrix(0.16895991,0,0,0.18329422,-134.6942,-19.491243)" /> + + diff --git a/assets/installDebian.sh b/assets/installDebian.sh index 19fab36a..c3e88ae9 100755 --- a/assets/installDebian.sh +++ b/assets/installDebian.sh @@ -18,4 +18,11 @@ cp -v assets/icons/x-novelwriter-project.svg /usr/share/icons/hicolor/scalable/m cp -v assets/mime/x-novelwriter-project.xml /usr/share/mime/packages/ update-mime-database /usr/share/mime/ -update-icon-caches /usr/share/icons/hicolor/ +update-icon-caches /usr/share/icons/hicolor/24x24/apps/ +update-icon-caches /usr/share/icons/hicolor/48x48/apps/ +update-icon-caches /usr/share/icons/hicolor/96x96/apps/ +update-icon-caches /usr/share/icons/hicolor/256x256/apps/ +update-icon-caches /usr/share/icons/hicolor/512x512/apps/ +update-icon-caches /usr/share/icons/hicolor/1024x1024/apps/ +update-icon-caches /usr/share/icons/hicolor/scalable/apps/ +update-icon-caches /usr/share/icons/hicolor/scalable/mimetypes/ From e320b984cc65c555ee8bc56163d78194abdd7ad7 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 14:23:52 +0200 Subject: [PATCH 41/53] Updated the main icon files --- assets/icons/novelwriter.ico | Bin 108042 -> 117759 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/icons/novelwriter.ico b/assets/icons/novelwriter.ico index 470ebe7276d232832485c5341a3595d4e01a1ec8..c96e8bdbc7fec644c2a5697baf9e017d6b6a15f6 100644 GIT binary patch literal 117759 zcmY(qcRbtQ7xS#k_4^2S5Zw-wDzo;L2Fix zQms-{DN1YAsP)a~@%{e(_~r3P^18|6-urspd(XM&JkPlR01yBH{O<(>paE$*0DuSW znn?V=WpOAFa6tPFhx>nJO#ndf1`vS7{@-%B2mqj)MyrYbe`N#!@TVCFK+wMb*Pa&` z0LbYF0^&?fbeZA2a9Y#M`g&UC|NHlUZ|MKJb_gz~^{Hd4uZ6d~H?!H{UF&WWCU8>O z)PL#QOR=U&85j)q1x4cXd;i$AmcM{Q;wuFciEK-^JX2B8zmjF(=3*nsDYjtwD4u=5 z^vTd&^B@qkAo?v@h@DOWGRy>mA$$}=D%z%&Iv)PH*8Ayvt#uBd}vjNa%~^4Z)M&8?}Lv%^%Z0IVb0lzuN|sAhSbSI2&F6OrJjU^h9oIv zGlNSQYOfIsF2)uzqr!GxYixb{`KqcIboFGQE5btW^C+_RF|gptuvb-G-#FEfaEL8F z{F`!Gd=T-*&-n#(VNq9oZ;8#h3%sDaL(l#>n_g2wT!^sCE881i;VYIAQPo(Dr04uF zlnI=gcG||6bJ>^)4mYOC6Vvo857-HNHUg*A(TA;G%rVe~va{a|qo$7{fsaDPdLK?- z@Ad5obx>&@mU$XEoW{Qjjq{+4`b6l$wUqF! z9G>p^e!X7ZVPEHpHeiCiJ>B4DqAc5hXu86!E5f;5$`oBthPb|Vr4CZ>Cm~%Wf-@_P zX!flL?2D^bA_-{{uSdJ3@ecbBq#ZGM#JX+A8>y`rmUT~<*@hd*8`)@vz z=a(26q}k-y$Vtg27Vy&D#-iV(TUhcN z;RM0{$gRg*abml{>IL)rS&XgnPl``_lQD?y;|Pu&kun$T3u0n}xUn*son&>~TxL&2 zQg58ju@*jO>jV*oi#W>en)KB1SK-sO^KuzPOYz>q3>8r8 zi%As7++;DebIx3J0(=Gm?r zHJD@&(e9ags)1$9Sy@Dfj>-e7d z=i7bK$SLDqD4Rd1iAcompa6{*Wca?$j{6YvPF3O`PVsh2Hp8uKXDPb{ek>`IC4*q zNLC0qS?>RK8XB>QkC1eHEPS%j@^{W!E#NVi5S?=;Qj2(E7#WBa0$^QEndF$~!RW(F zfQ2@7zl5bjcE~_lUak@X-`O6{%gHub%8bebKUuS%#hAkC-6mcYMAd&-O9OeB)A?^f@r$GNLM6OMWuxi;UM;KHSM;c!RR&V_EeJ2<=7IB#qVzCL=HQoSGeYsfumoNh_B%0DrH@b;RqP%`)Lf& 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 Date: Thu, 21 May 2020 14:24:15 +0200 Subject: [PATCH 42/53] Also updated the in-app icon --- nw/assets/icons/novelWriter.svg | 245 +++++++++++++++++++++++--------- 1 file changed, 176 insertions(+), 69 deletions(-) diff --git a/nw/assets/icons/novelWriter.svg b/nw/assets/icons/novelWriter.svg index e8df3435..60c928bb 100644 --- a/nw/assets/icons/novelWriter.svg +++ b/nw/assets/icons/novelWriter.svg @@ -5,78 +5,166 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - sodipodi:docname="icon.svg" - inkscape:version="1.0 (4035a4fb49, 2020-05-01)" - id="svg8" - version="1.1" - viewBox="0 0 270.93333 270.93334" - height="1024" + inkscape:export-ydpi="96.000008" + inkscape:export-xdpi="96.000008" + inkscape:export-filename="/home/vkbo/Code/novelWriter/Icons/novelWriter/Version 3/icons/1024x1024/novelwriter.png" width="1024" - inkscape:export-filename="/home/vkbo/Code/novelWriter/Icons/novelWriter/Version 3/icons/18x18@2x/novelwriter.png" - inkscape:export-xdpi="3.375" - inkscape:export-ydpi="3.375"> + height="1024" + viewBox="0 0 270.93333 270.93334" + version="1.1" + id="svg8" + inkscape:version="1.0 (4035a4fb49, 2020-05-01)" + sodipodi:docname="icon.svg"> + + + + - - - - + x="60.484347" /> + id="rect1474" /> + + + + + + + + + + + + + + + + + + + + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="190.20708" + inkscape:cy="572.85481" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:document-rotation="0" + showgrid="false" + units="px" + inkscape:pagecheckerboard="true" + inkscape:window-width="2560" + inkscape:window-height="1344" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> @@ -90,28 +178,47 @@ + id="layer1" + style="display:inline"> + width="259.29166" + height="259.29166" + x="5.8208332" + y="5.8208332" + rx="21.166666" + ry="21.166666" + inkscape:label="Box" /> + id="layer2" + inkscape:groupmode="layer"> + + From 4588addaef38de3031814ba440a6c8b2a73a6033 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 15:51:45 +0200 Subject: [PATCH 43/53] Added basic about dialog --- nw/gui/__init__.py | 2 + nw/gui/dialogs/__init__.py | 2 + nw/gui/dialogs/about.py | 69 +++++++++++++++++++++++++ nw/gui/mainmenu.py | 102 ++++++++++++++++++++----------------- 4 files changed, 127 insertions(+), 48 deletions(-) create mode 100644 nw/gui/dialogs/about.py diff --git a/nw/gui/__init__.py b/nw/gui/__init__.py index 74706a6d..43cfc5dd 100644 --- a/nw/gui/__init__.py +++ b/nw/gui/__init__.py @@ -8,6 +8,7 @@ from nw.gui.statusbar import GuiMainStatus from nw.gui.theme import GuiTheme # Dialogs +from nw.gui.dialogs.about import GuiAbout from nw.gui.dialogs.configeditor import GuiConfigEditor from nw.gui.dialogs.docmerge import GuiDocMerge from nw.gui.dialogs.docsplit import GuiDocSplit @@ -38,6 +39,7 @@ __all__ = [ "GuiMainMenu", "GuiMainStatus", "GuiTheme", + "GuiAbout", "GuiConfigEditor", "GuiDocMerge", "GuiDocSplit", diff --git a/nw/gui/dialogs/__init__.py b/nw/gui/dialogs/__init__.py index 110b5b5e..c2625ee5 100644 --- a/nw/gui/dialogs/__init__.py +++ b/nw/gui/dialogs/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from nw.gui.dialogs.about import GuiAbout from nw.gui.dialogs.configeditor import GuiConfigEditor from nw.gui.dialogs.docmerge import GuiDocMerge from nw.gui.dialogs.docsplit import GuiDocSplit @@ -9,6 +10,7 @@ from nw.gui.dialogs.projectload import GuiProjectLoad from nw.gui.dialogs.sessionlog import GuiSessionLogView __all__ = [ + "GuiAbout", "GuiConfigEditor", "GuiDocMerge", "GuiDocSplit", diff --git a/nw/gui/dialogs/about.py b/nw/gui/dialogs/about.py new file mode 100644 index 00000000..9e253981 --- /dev/null +++ b/nw/gui/dialogs/about.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +"""novelWriter GUI About Box + + novelWriter – GUI About Box +============================= + The about novelWriter dialog box + + File History: + Created: 2020-05-21 [0.5.2] + + 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 nw + +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import ( + QDialog, QHBoxLayout, QVBoxLayout, QDialogButtonBox +) + +logger = logging.getLogger(__name__) + +class GuiAbout(QDialog): + + def __init__(self, theParent): + QDialog.__init__(self, theParent) + + logger.debug("Initialising GuiAbout ...") + + self.mainConf = nw.CONFIG + + self.outerBox = QVBoxLayout() + self.innerBox = QHBoxLayout() + + self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok) + self.buttonBox.accepted.connect(self._doClose) + + self.outerBox.addLayout(self.innerBox) + self.outerBox.addWidget(self.buttonBox) + self.setLayout(self.outerBox) + + logger.debug("GuiAbout initialisation complete") + + return + + ## + # Internal Functions + ## + + def _doClose(self): + self.close() + return + +# END Class GuiAbout diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index 8126766b..76563d59 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -32,6 +32,7 @@ from PyQt5.QtCore import QUrl from PyQt5.QtGui import QDesktopServices from PyQt5.QtWidgets import QMenuBar, QAction, QMessageBox +from nw.gui.dialogs import GuiAbout from nw.constants import nwItemType, nwItemClass, nwDocAction logger = logging.getLogger(__name__) @@ -119,54 +120,59 @@ class GuiMainMenu(QMenuBar): return True def _showAbout(self): - listPrefix = "  •  " - aboutMsg = ( - "

    About {name:s}

    " - "

    Version {version:s}, released {date:s}.

    " - "

    {copyright:s}.

    " - "

    {name:s} is a markdown-like text editor designed for organising " - "and writing novels. It is written in Python 3 with a Qt5 GUI, " - "using PyQt5.

    " - "

    {name:s} 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.

    " - "

    {name:s} 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.

    " - "

    Website: {website:s}

    " - "

    Credits

    " - "

    {credits:s}

    " - ).format( - name = nw.__package__, - version = nw.__version__, - date = nw.__date__, - copyright = nw.__copyright__, - website = nw.__url__, - credits = "
    ".join(["%s%s" % (listPrefix, x) for x in nw.__credits__]), - ) - theTheme = self.theParent.theTheme - theIcons = self.theParent.theTheme.theIcons - if theTheme.themeCredit != "" or theTheme.syntaxCredit != "": - aboutMsg += "

    GUI Theme and Syntax Highlighting

    " - aboutMsg += "

    " - if theTheme.themeCredit != "": - aboutMsg += "%s\"%s\" by %s
    " % ( - listPrefix, theTheme.themeName, theTheme.themeCredit - ) - if theIcons.themeCredit != "": - aboutMsg += "%s\"%s\" by %s
    " % ( - listPrefix, theIcons.themeName, theIcons.themeCredit - ) - if theTheme.syntaxCredit != "": - aboutMsg += "%s\"%s\" by %s
    " % ( - listPrefix, theTheme.syntaxName, theTheme.syntaxCredit - ) - aboutMsg += "

    " - msgBox = QMessageBox() - msgBox.about(self.theParent, "About %s" % nw.__package__, aboutMsg) + """Show the about dialog. + """ + if self.mainConf.showGUI: + msgAbout = GuiAbout(self.theParent) + msgAbout.exec_() + # listPrefix = "  •  " + # aboutMsg = ( + # "

    About {name:s}

    " + # "

    Version {version:s}, released {date:s}.

    " + # "

    {copyright:s}.

    " + # "

    {name:s} is a markdown-like text editor designed for organising " + # "and writing novels. It is written in Python 3 with a Qt5 GUI, " + # "using PyQt5.

    " + # "

    {name:s} 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.

    " + # "

    {name:s} 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 " + # "GPL v3.0 " + # "License for more details.

    " + # "

    Website: {website:s}

    " + # "

    Credits

    " + # "

    {credits:s}

    " + # ).format( + # name = nw.__package__, + # version = nw.__version__, + # date = nw.__date__, + # copyright = nw.__copyright__, + # website = nw.__url__, + # credits = "
    ".join(["%s%s" % (listPrefix, x) for x in nw.__credits__]), + # ) + # theTheme = self.theParent.theTheme + # theIcons = self.theParent.theTheme.theIcons + # if theTheme.themeCredit != "" or theTheme.syntaxCredit != "": + # aboutMsg += "

    GUI Theme and Syntax Highlighting

    " + # aboutMsg += "

    " + # if theTheme.themeCredit != "": + # aboutMsg += "%s\"%s\" by %s
    " % ( + # listPrefix, theTheme.themeName, theTheme.themeCredit + # ) + # if theIcons.themeCredit != "": + # aboutMsg += "%s\"%s\" by %s
    " % ( + # listPrefix, theIcons.themeName, theIcons.themeCredit + # ) + # if theTheme.syntaxCredit != "": + # aboutMsg += "%s\"%s\" by %s
    " % ( + # listPrefix, theTheme.syntaxName, theTheme.syntaxCredit + # ) + # aboutMsg += "

    " + # msgBox = QMessageBox() + # msgBox.about(self.theParent, "About %s" % nw.__package__, aboutMsg) return True def _showAboutQt(self): From bd99eb48177921dfb8c064d6105d9df6df805d0c Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 17:15:57 +0200 Subject: [PATCH 44/53] Added licensing info to themes --- .../{novelWriter.ico => novelwriter.ico} | Bin .../{novelWriter.svg => novelwriter.svg} | 0 nw/assets/text/gplv3_en.htm | 641 ++++++++++++++++++ nw/assets/themes/gui/default_dark/theme.conf | 10 +- nw/assets/themes/syntax/default_dark.conf | 7 +- nw/assets/themes/syntax/default_light.conf | 7 +- nw/assets/themes/syntax/light_owl.conf | 10 +- nw/assets/themes/syntax/night_owl.conf | 10 +- nw/assets/themes/syntax/tomorrow.conf | 10 +- nw/assets/themes/syntax/tomorrow_night.conf | 10 +- .../themes/syntax/tomorrow_night_blue.conf | 10 +- .../themes/syntax/tomorrow_night_bright.conf | 10 +- .../syntax/tomorrow_night_eighties.conf | 10 +- nw/gui/icons.py | 2 +- nw/gui/theme.py | 44 +- 15 files changed, 730 insertions(+), 51 deletions(-) rename nw/assets/icons/{novelWriter.ico => novelwriter.ico} (100%) rename nw/assets/icons/{novelWriter.svg => novelwriter.svg} (100%) create mode 100644 nw/assets/text/gplv3_en.htm diff --git a/nw/assets/icons/novelWriter.ico b/nw/assets/icons/novelwriter.ico similarity index 100% rename from nw/assets/icons/novelWriter.ico rename to nw/assets/icons/novelwriter.ico diff --git a/nw/assets/icons/novelWriter.svg b/nw/assets/icons/novelwriter.svg similarity index 100% rename from nw/assets/icons/novelWriter.svg rename to nw/assets/icons/novelwriter.svg diff --git a/nw/assets/text/gplv3_en.htm b/nw/assets/text/gplv3_en.htm new file mode 100644 index 00000000..582b1302 --- /dev/null +++ b/nw/assets/text/gplv3_en.htm @@ -0,0 +1,641 @@ + + + + + + GNU General Public License v3.0 - GNU Project - Free Software Foundation (FSF) + + + +

    GNU GENERAL PUBLIC LICENSE

    +

    Version 3, 29 June 2007

    + +

    Copyright © 2007 Free Software Foundation, Inc. + <https://fsf.org/>

    + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed.

    + +

    Preamble

    + +

    The GNU General Public License is a free, copyleft license for +software and other kinds of works.

    + +

    The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too.

    + +

    When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things.

    + +

    To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others.

    + +

    For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights.

    + +

    Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it.

    + +

    For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions.

    + +

    Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users.

    + +

    Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free.

    + +

    The precise terms and conditions for copying, distribution and +modification follow.

    + +

    TERMS AND CONDITIONS

    + +

    0. Definitions.

    + +

    “This License” refers to version 3 of the GNU General Public License.

    + +

    “Copyright” also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks.

    + +

    “The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations.

    + +

    To “modify” a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a “modified version” of the +earlier work or a work “based on” the earlier work.

    + +

    A “covered work” means either the unmodified Program or a work based +on the Program.

    + +

    To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well.

    + +

    To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying.

    + +

    An interactive user interface displays “Appropriate Legal Notices” +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion.

    + +

    1. Source Code.

    + +

    The “source code” for a work means the preferred form of the work +for making modifications to it. “Object code” means any non-source +form of a work.

    + +

    A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language.

    + +

    The “System Libraries” of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +“Major Component”, in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it.

    + +

    The “Corresponding Source” for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work.

    + +

    The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source.

    + +

    The Corresponding Source for a work in source code form is that +same work.

    + +

    2. Basic Permissions.

    + +

    All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law.

    + +

    You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you.

    + +

    Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary.

    + +

    3. Protecting Users' Legal Rights From Anti-Circumvention Law.

    + +

    No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures.

    + +

    When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures.

    + +

    4. Conveying Verbatim Copies.

    + +

    You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program.

    + +

    You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee.

    + +

    5. Conveying Modified Source Versions.

    + +

    You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions:

    + +
      +
    • a) The work must carry prominent notices stating that you modified + it, and giving a relevant date.
    • + +
    • b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + “keep intact all notices”.
    • + +
    • c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it.
    • + +
    • d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so.
    • +
    + +

    A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +“aggregate” if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate.

    + +

    6. Conveying Non-Source Forms.

    + +

    You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways:

    + +
      +
    • a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange.
    • + +
    • b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge.
    • + +
    • c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b.
    • + +
    • d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements.
    • + +
    • e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d.
    • +
    + +

    A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work.

    + +

    A “User Product” is either (1) a “consumer product”, which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, “normally used” refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product.

    + +

    “Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made.

    + +

    If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM).

    + +

    The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network.

    + +

    Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying.

    + +

    7. Additional Terms.

    + +

    “Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions.

    + +

    When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission.

    + +

    Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms:

    + +
      +
    • a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or
    • + +
    • b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or
    • + +
    • c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or
    • + +
    • d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or
    • + +
    • e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or
    • + +
    • f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors.
    • +
    + +

    All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying.

    + +

    If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms.

    + +

    Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way.

    + +

    8. Termination.

    + +

    You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11).

    + +

    However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation.

    + +

    Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice.

    + +

    Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10.

    + +

    9. Acceptance Not Required for Having Copies.

    + +

    You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so.

    + +

    10. Automatic Licensing of Downstream Recipients.

    + +

    Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License.

    + +

    An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts.

    + +

    You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it.

    + +

    11. Patents.

    + +

    A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's “contributor version”.

    + +

    A contributor's “essential patent claims” are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, “control” includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License.

    + +

    Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version.

    + +

    In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To “grant” such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party.

    + +

    If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. “Knowingly relying” means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid.

    + +

    If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it.

    + +

    A patent license is “discriminatory” if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007.

    + +

    Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law.

    + +

    12. No Surrender of Others' Freedom.

    + +

    If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program.

    + +

    13. Use with the GNU Affero General Public License.

    + +

    Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such.

    + +

    14. Revised Versions of this License.

    + +

    The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns.

    + +

    Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License “or any later version” applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation.

    + +

    If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program.

    + +

    Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version.

    + +

    15. Disclaimer of Warranty.

    + +

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

    + +

    16. Limitation of Liability.

    + +

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES.

    + +

    17. Interpretation of Sections 15 and 16.

    + +

    If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee.

    + +

    END OF TERMS AND CONDITIONS

    + + diff --git a/nw/assets/themes/gui/default_dark/theme.conf b/nw/assets/themes/gui/default_dark/theme.conf index 1b96e373..9d41dbcf 100644 --- a/nw/assets/themes/gui/default_dark/theme.conf +++ b/nw/assets/themes/gui/default_dark/theme.conf @@ -1,8 +1,10 @@ [Main] -name = Default Dark Theme -author = Veronica Berglyd Olsen -credit = Veronica Berglyd Olsen -url = https://github.com/vkbo/novelWriter +name = Default Dark Theme +author = Veronica Berglyd Olsen +credit = Veronica Berglyd Olsen +url = https://github.com/vkbo/novelWriter +license = CC BY-SA 4.0 +licenseurl = https://creativecommons.org/licenses/by-sa/4.0/ [Palette] window = 54, 54, 54 diff --git a/nw/assets/themes/syntax/default_dark.conf b/nw/assets/themes/syntax/default_dark.conf index b5658bfc..09b292ee 100644 --- a/nw/assets/themes/syntax/default_dark.conf +++ b/nw/assets/themes/syntax/default_dark.conf @@ -1,5 +1,10 @@ [Main] -name = Default Dark +name = Default Dark +author = Veronica Berglyd Olsen +credit = Veronica Berglyd Olsen +url = https://github.com/vkbo/novelWriter +license = CC BY-SA 4.0 +licenseurl = https://creativecommons.org/licenses/by-sa/4.0/ [Syntax] background = 54, 54, 54 diff --git a/nw/assets/themes/syntax/default_light.conf b/nw/assets/themes/syntax/default_light.conf index 07eea504..389ba6cb 100644 --- a/nw/assets/themes/syntax/default_light.conf +++ b/nw/assets/themes/syntax/default_light.conf @@ -1,5 +1,10 @@ [Main] -name = Default Light +name = Default Light +author = Veronica Berglyd Olsen +credit = Veronica Berglyd Olsen +url = https://github.com/vkbo/novelWriter +license = CC BY-SA 4.0 +licenseurl = https://creativecommons.org/licenses/by-sa/4.0/ [Syntax] background = 255, 255, 255 diff --git a/nw/assets/themes/syntax/light_owl.conf b/nw/assets/themes/syntax/light_owl.conf index 788cea2c..fde36665 100644 --- a/nw/assets/themes/syntax/light_owl.conf +++ b/nw/assets/themes/syntax/light_owl.conf @@ -19,10 +19,12 @@ ## [Main] -name = Light Owl -author = Veronica Berglyd Olsen -credit = Sarah Drasner -url = https://github.com/sdras/night-owl-vscode-theme +name = Light Owl +author = Veronica Berglyd Olsen (adaptation) +credit = Sarah Drasner (color theme) +url = https://github.com/sdras/night-owl-vscode-theme +license = MIT License +licenseurl = https://github.com/sdras/night-owl-vscode-theme/blob/master/LICENSE [Syntax] background = 251, 251, 251 diff --git a/nw/assets/themes/syntax/night_owl.conf b/nw/assets/themes/syntax/night_owl.conf index 33fbf47e..56cebf53 100644 --- a/nw/assets/themes/syntax/night_owl.conf +++ b/nw/assets/themes/syntax/night_owl.conf @@ -19,10 +19,12 @@ ## [Main] -name = Night Owl -author = Veronica Berglyd Olsen -credit = Sarah Drasner -url = https://github.com/sdras/night-owl-vscode-theme +name = Night Owl +author = Veronica Berglyd Olsen (adaptation) +credit = Sarah Drasner (color theme) +url = https://github.com/sdras/night-owl-vscode-theme +license = MIT License +licenseurl = https://github.com/sdras/night-owl-vscode-theme/blob/master/LICENSE [Syntax] background = 1, 22, 39 diff --git a/nw/assets/themes/syntax/tomorrow.conf b/nw/assets/themes/syntax/tomorrow.conf index 26435950..85fe84ea 100644 --- a/nw/assets/themes/syntax/tomorrow.conf +++ b/nw/assets/themes/syntax/tomorrow.conf @@ -19,10 +19,12 @@ ## [Main] -name = Tomorrow -author = Veronica Berglyd Olsen -credit = Chris Kempson -url = https://github.com/chriskempson/tomorrow-theme +name = Tomorrow +author = Veronica Berglyd Olsen (adaptation) +credit = Chris Kempson (color theme) +url = https://github.com/chriskempson/tomorrow-theme +license = MIT License +licenseurl = https://github.com/chriskempson/tomorrow-theme/blob/master/LICENSE.md [Syntax] background = 255, 255, 255 diff --git a/nw/assets/themes/syntax/tomorrow_night.conf b/nw/assets/themes/syntax/tomorrow_night.conf index 817f255a..be8f2d4d 100644 --- a/nw/assets/themes/syntax/tomorrow_night.conf +++ b/nw/assets/themes/syntax/tomorrow_night.conf @@ -19,10 +19,12 @@ ## [Main] -name = Tomorrow Night -author = Veronica Berglyd Olsen -credit = Chris Kempson -url = https://github.com/chriskempson/tomorrow-theme +name = Tomorrow Night +author = Veronica Berglyd Olsen (adaptation) +credit = Chris Kempson (color theme) +url = https://github.com/chriskempson/tomorrow-theme +license = MIT License +licenseurl = https://github.com/chriskempson/tomorrow-theme/blob/master/LICENSE.md [Syntax] background = 29, 31, 33 diff --git a/nw/assets/themes/syntax/tomorrow_night_blue.conf b/nw/assets/themes/syntax/tomorrow_night_blue.conf index e1c36135..3738051f 100644 --- a/nw/assets/themes/syntax/tomorrow_night_blue.conf +++ b/nw/assets/themes/syntax/tomorrow_night_blue.conf @@ -19,10 +19,12 @@ ## [Main] -name = Tomorrow Night Blue -author = Veronica Berglyd Olsen -credit = Chris Kempson -url = https://github.com/chriskempson/tomorrow-theme +name = Tomorrow Night Blue +author = Veronica Berglyd Olsen (adaptation) +credit = Chris Kempson (color theme) +url = https://github.com/chriskempson/tomorrow-theme +license = MIT License +licenseurl = https://github.com/chriskempson/tomorrow-theme/blob/master/LICENSE.md [Syntax] background = 0, 36, 81 diff --git a/nw/assets/themes/syntax/tomorrow_night_bright.conf b/nw/assets/themes/syntax/tomorrow_night_bright.conf index 1c4122e3..9ce48b6a 100644 --- a/nw/assets/themes/syntax/tomorrow_night_bright.conf +++ b/nw/assets/themes/syntax/tomorrow_night_bright.conf @@ -19,10 +19,12 @@ ## [Main] -name = Tomorrow Night Bright -author = Veronica Berglyd Olsen -credit = Chris Kempson -url = https://github.com/chriskempson/tomorrow-theme +name = Tomorrow Night Bright +author = Veronica Berglyd Olsen (adaptation) +credit = Chris Kempson (color theme) +url = https://github.com/chriskempson/tomorrow-theme +license = MIT License +licenseurl = https://github.com/chriskempson/tomorrow-theme/blob/master/LICENSE.md [Syntax] background = 0, 0, 0 diff --git a/nw/assets/themes/syntax/tomorrow_night_eighties.conf b/nw/assets/themes/syntax/tomorrow_night_eighties.conf index e75ffe31..9d611cd3 100644 --- a/nw/assets/themes/syntax/tomorrow_night_eighties.conf +++ b/nw/assets/themes/syntax/tomorrow_night_eighties.conf @@ -19,10 +19,12 @@ ## [Main] -name = Tomorrow Night Eighties -author = Veronica Berglyd Olsen -credit = Chris Kempson -url = https://github.com/chriskempson/tomorrow-theme +name = Tomorrow Night Eighties +author = Veronica Berglyd Olsen (adaptation) +credit = Chris Kempson (color theme) +url = https://github.com/chriskempson/tomorrow-theme +license = MIT License +licenseurl = https://github.com/chriskempson/tomorrow-theme/blob/master/LICENSE.md [Syntax] background = 45, 45, 45 diff --git a/nw/gui/icons.py b/nw/gui/icons.py index bc0bd493..fe596fe3 100644 --- a/nw/gui/icons.py +++ b/nw/gui/icons.py @@ -98,7 +98,7 @@ class GuiIcons: } DECO_MAP = { - "nwicon" : ["icons", "novelWriter.svg"], + "nwicon" : ["icons", "novelwriter.svg"], } def __init__(self, theParent): diff --git a/nw/gui/theme.py b/nw/gui/theme.py index 31e862e0..5b4893a6 100644 --- a/nw/gui/theme.py +++ b/nw/gui/theme.py @@ -58,10 +58,13 @@ class GuiTheme: # Loaded Theme Settings ## Theme - self.themeName = "" - self.themeAuthor = "" - self.themeCredit = "" - self.themeUrl = "" + self.themeName = "" + self.themeDescription = "" + self.themeAuthor = "" + self.themeCredit = "" + self.themeUrl = "" + self.themeLicense = "" + self.themeLicenseUrl = "" ## GUI self.treeWCount = [ 0, 0, 0] @@ -73,10 +76,13 @@ class GuiTheme: # Loaded Syntax Settings ## Main - self.syntaxName = "" - self.syntaxAuthor = "" - self.syntaxCredit = "" - self.syntaxUrl = "" + self.syntaxName = "" + self.syntaxDescription = "" + self.syntaxAuthor = "" + self.syntaxCredit = "" + self.syntaxUrl = "" + self.syntaxLicense = "" + self.syntaxLicenseUrl = "" ## Colours self.colBack = [255,255,255] @@ -179,10 +185,13 @@ class GuiTheme: ## 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.themeDescription = self._parseLine( confParser, cnfSec, "description", "") + self.themeAuthor = self._parseLine( confParser, cnfSec, "author", "") + self.themeCredit = self._parseLine( confParser, cnfSec, "credit", "") + self.themeUrl = self._parseLine( confParser, cnfSec, "url", "") + self.themeLicense = self._parseLine( confParser, cnfSec, "license", "") + self.themeLicenseUrl = self._parseLine( confParser, cnfSec, "licenseurl", "") ## Palette cnfSec = "Palette" @@ -230,10 +239,13 @@ class GuiTheme: ## 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.syntaxDescription = self._parseLine( confParser, cnfSec, "description", "") + self.syntaxAuthor = self._parseLine( confParser, cnfSec, "author", "") + self.syntaxCredit = self._parseLine( confParser, cnfSec, "credit", "") + self.syntaxUrl = self._parseLine( confParser, cnfSec, "url", "") + self.syntaxLicense = self._parseLine( confParser, cnfSec, "license", "") + self.syntaxLicenseUrl = self._parseLine( confParser, cnfSec, "licenseurl", "") ## Syntax cnfSec = "Syntax" From 68b8d8b46958d1cd1341c6dce9477c8fd65e3615 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 17:16:14 +0200 Subject: [PATCH 45/53] Rewritten about dialog --- nw/__init__.py | 1 + nw/config.py | 2 +- nw/constants/constants.py | 1 - nw/gui/dialogs/about.py | 167 +++++++++++++++++++++++++++++++++++++- nw/gui/mainmenu.py | 48 ----------- 5 files changed, 167 insertions(+), 52 deletions(-) diff --git a/nw/__init__.py b/nw/__init__.py index 9020b85c..d64437fe 100644 --- a/nw/__init__.py +++ b/nw/__init__.py @@ -47,6 +47,7 @@ __maintainer__ = "Veronica Berglyd Olsen" __email__ = "code@vkbo.net" __status__ = "Pre-Release" __url__ = "https://github.com/vkbo/novelWriter" +__domain__ = "novelwriter.io" __docurl__ = "https://novelwriter.readthedocs.io" __credits__ = [ "Veronica Berglyd Olsen (developer)", diff --git a/nw/config.py b/nw/config.py index 4723858f..5acf8774 100644 --- a/nw/config.py +++ b/nw/config.py @@ -233,7 +233,7 @@ class Config: self.graphPath = path.join(self.assetPath,"graphics") self.dictPath = path.join(self.assetPath,"dict") self.iconPath = path.join(self.assetPath,"icons") - self.appIcon = path.join(self.iconPath, nwFiles.APP_ICON) + self.appIcon = path.join(self.iconPath, "novelwriter.svg") logger.verbose("App path: %s" % self.appPath) logger.verbose("Home path: %s" % self.homePath) diff --git a/nw/constants/constants.py b/nw/constants/constants.py index 96a97bc1..09622650 100644 --- a/nw/constants/constants.py +++ b/nw/constants/constants.py @@ -36,7 +36,6 @@ class nwConst(): class nwFiles(): - APP_ICON = "novelWriter.svg" PROJ_FILE = "nwProject.nwx" PROJ_DICT = "wordlist.txt" PROJ_LOCK = "nwProject.lock" diff --git a/nw/gui/dialogs/about.py b/nw/gui/dialogs/about.py index 9e253981..f71f6e4c 100644 --- a/nw/gui/dialogs/about.py +++ b/nw/gui/dialogs/about.py @@ -28,9 +28,13 @@ import logging import nw +from os import path +from datetime import datetime + from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QDialogButtonBox + QDialog, QHBoxLayout, QVBoxLayout, QDialogButtonBox, QTabWidget, + QTextBrowser, QLabel ) logger = logging.getLogger(__name__) @@ -42,11 +46,52 @@ class GuiAbout(QDialog): logger.debug("Initialising GuiAbout ...") - self.mainConf = nw.CONFIG + self.mainConf = nw.CONFIG + self.theParent = theParent self.outerBox = QVBoxLayout() self.innerBox = QHBoxLayout() + self.innerBox.setSpacing(16) + self.setWindowTitle("About %s" % nw.__package__) + self.setMinimumWidth(700) + self.setMinimumHeight(600) + + self.guiDeco = self.theParent.theTheme.loadDecoration("nwicon", (96, 96)) + self.lblName = QLabel("%s" % nw.__package__) + self.lblVers = QLabel("v%s" % nw.__version__) + self.lblDate = QLabel(datetime.strptime(nw.__date__, "%Y-%m-%d").strftime("%x")) + + self.leftBox = QVBoxLayout() + self.leftBox.setSpacing(4) + self.leftBox.addWidget(self.guiDeco, 0, Qt.AlignCenter) + self.leftBox.addWidget(self.lblName, 0, Qt.AlignCenter) + self.leftBox.addWidget(self.lblVers, 0, Qt.AlignCenter) + self.leftBox.addWidget(self.lblDate, 0, Qt.AlignCenter) + self.leftBox.addStretch(1) + self.innerBox.addLayout(self.leftBox) + + # Pages + self.pageAbout = QTextBrowser() + self.pageAbout.setOpenExternalLinks(True) + self.pageAbout.document().setDocumentMargin(16) + + # self.pageCredit = QTextBrowser() + # self.pageCredit.setOpenExternalLinks(True) + # self.pageCredit.document().setDocumentMargin(16) + + self.pageLicense = QTextBrowser() + self.pageLicense.setOpenExternalLinks(True) + self.pageLicense.document().setDocumentMargin(16) + + # Main Tab Area + self.tabBox = QTabWidget() + self.tabBox.addTab(self.pageAbout, "About") + # self.tabBox.addTab(self.pageCredit, "Credit") + self.tabBox.addTab(self.pageLicense, "License") + self.innerBox.addWidget(self.tabBox) + + # OK Button self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self._doClose) @@ -54,6 +99,10 @@ class GuiAbout(QDialog): self.outerBox.addWidget(self.buttonBox) self.setLayout(self.outerBox) + self._setStyleSheet() + self._fillAboutPage() + self._fillLicensePage() + logger.debug("GuiAbout initialisation complete") return @@ -62,6 +111,120 @@ class GuiAbout(QDialog): # Internal Functions ## + def _fillAboutPage(self): + """Generate the content for the About page. + """ + listPrefix = "  •  " + aboutMsg = ( + "

    About {name:s}

    " + "

    {copyright:s}.

    " + "

    Website: {domain:s}

    " + "

    {name:s} is a markdown-like text editor designed for organising and writing " + "novels. It is written in Python 3 with a Qt5 GUI, using PyQt5.

    " + "

    {name:s} 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.

    " + "

    {name:s} 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 License tab for the full text, or visit the GNU website at " + "GPL v3.0 for more details.

    " + "

    Credits

    " + "

    {credits:s}

    " + ).format( + name = nw.__package__, + copyright = nw.__copyright__, + website = nw.__url__, + domain = nw.__domain__, + credits = "
    ".join(["%s%s" % (listPrefix, x) for x in nw.__credits__]), + ) + + theTheme = self.theParent.theTheme + theIcons = self.theParent.theTheme.theIcons + if theTheme.themeName: + aboutMsg += ( + "

    Theme: {name:s}

    " + "

    " + "Author: {author:s}
    " + "Credit: {credit:s}
    " + "License: {license:s}" + "

    " + ).format( + name = theTheme.themeName, + author = theTheme.themeAuthor, + credit = theTheme.themeCredit, + license = theTheme.themeLicense, + lic_url = theTheme.themeLicenseUrl, + ) + if theIcons.themeName: + aboutMsg += ( + "

    Icons: {name:s}

    " + "

    " + "Author: {author:s}
    " + "Credit: {credit:s}
    " + "License: {license:s}" + "

    " + ).format( + name = theIcons.themeName, + author = theIcons.themeAuthor, + credit = theIcons.themeCredit, + license = theIcons.themeLicense, + lic_url = theIcons.themeLicenseUrl, + ) + if theTheme.syntaxName: + aboutMsg += ( + "

    Syntax: {name:s}

    " + "

    " + "Author: {author:s}
    " + "Credit: {credit:s}
    " + "License: {license:s}" + "

    " + ).format( + name = theTheme.syntaxName, + author = theTheme.syntaxAuthor, + credit = theTheme.syntaxCredit, + license = theTheme.syntaxLicense, + lic_url = theTheme.syntaxLicenseUrl, + ) + + self.pageAbout.setHtml(aboutMsg) + + return + + def _fillLicensePage(self): + """Load the content for the License page. + """ + docName = "gplv3_%s.htm" % self.mainConf.guiLang + docPath = path.join(self.mainConf.assetPath, "text", docName) + if path.isfile(docPath): + with open(docPath, mode="r", encoding="utf8") as inFile: + helpText = inFile.read() + self.pageLicense.setHtml(helpText) + else: + self.pageLicense.setHtml("Error loading license text ...") + return + + def _setStyleSheet(self): + """Set stylesheet for all browser tabs + """ + styleSheet = ( + "h1, h2, h3, h4 {{" + " color: rgb({hColR},{hColG},{hColB});" + "}}\n" + "a {{" + " color: rgb({hColR},{hColG},{hColB});" + "}}\n" + ).format( + hColR = self.theParent.theTheme.colHead[0], + hColG = self.theParent.theTheme.colHead[1], + hColB = self.theParent.theTheme.colHead[2], + ) + self.pageAbout.document().setDefaultStyleSheet(styleSheet) + # self.pageCredit.document().setDefaultStyleSheet(styleSheet) + self.pageLicense.document().setDefaultStyleSheet(styleSheet) + + return + def _doClose(self): self.close() return diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index 76563d59..31206d82 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -125,54 +125,6 @@ class GuiMainMenu(QMenuBar): if self.mainConf.showGUI: msgAbout = GuiAbout(self.theParent) msgAbout.exec_() - # listPrefix = "  •  " - # aboutMsg = ( - # "

    About {name:s}

    " - # "

    Version {version:s}, released {date:s}.

    " - # "

    {copyright:s}.

    " - # "

    {name:s} is a markdown-like text editor designed for organising " - # "and writing novels. It is written in Python 3 with a Qt5 GUI, " - # "using PyQt5.

    " - # "

    {name:s} 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.

    " - # "

    {name:s} 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 " - # "GPL v3.0 " - # "License for more details.

    " - # "

    Website: {website:s}

    " - # "

    Credits

    " - # "

    {credits:s}

    " - # ).format( - # name = nw.__package__, - # version = nw.__version__, - # date = nw.__date__, - # copyright = nw.__copyright__, - # website = nw.__url__, - # credits = "
    ".join(["%s%s" % (listPrefix, x) for x in nw.__credits__]), - # ) - # theTheme = self.theParent.theTheme - # theIcons = self.theParent.theTheme.theIcons - # if theTheme.themeCredit != "" or theTheme.syntaxCredit != "": - # aboutMsg += "

    GUI Theme and Syntax Highlighting

    " - # aboutMsg += "

    " - # if theTheme.themeCredit != "": - # aboutMsg += "%s\"%s\" by %s
    " % ( - # listPrefix, theTheme.themeName, theTheme.themeCredit - # ) - # if theIcons.themeCredit != "": - # aboutMsg += "%s\"%s\" by %s
    " % ( - # listPrefix, theIcons.themeName, theIcons.themeCredit - # ) - # if theTheme.syntaxCredit != "": - # aboutMsg += "%s\"%s\" by %s
    " % ( - # listPrefix, theTheme.syntaxName, theTheme.syntaxCredit - # ) - # aboutMsg += "

    " - # msgBox = QMessageBox() - # msgBox.about(self.theParent, "About %s" % nw.__package__, aboutMsg) return True def _showAboutQt(self): From 4c775f101acc24c7ee85fc581974af3aebb989a5 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 18:01:44 +0200 Subject: [PATCH 46/53] Moved syntax highlight options to the Editor tab in Preferences --- nw/gui/dialogs/configeditor.py | 72 ++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/nw/gui/dialogs/configeditor.py b/nw/gui/dialogs/configeditor.py index 4108cbcc..77abc231 100644 --- a/nw/gui/dialogs/configeditor.py +++ b/nw/gui/dialogs/configeditor.py @@ -64,7 +64,7 @@ class GuiConfigEditor(PagedDialog): self.addTab(self.tabGeneral, "General") self.addTab(self.tabLayout, "Layout") - self.addTab(self.tabEditing, "Editing") + self.addTab(self.tabEditing, "Editor") self.addTab(self.tabAutoRep, "Auto-Replace") self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) @@ -174,22 +174,6 @@ class GuiConfigEditGeneralTab(QWidget): "Changing this requires restarting %s." % nw.__package__ ) - ## Syntax Highlighting - self.selectSyntax = QComboBox() - self.selectSyntax.setMinimumWidth(200) - self.theSyntaxes = self.theTheme.listSyntax() - for syntaxFile, syntaxName in self.theSyntaxes: - self.selectSyntax.addItem(syntaxName, syntaxFile) - syntaxIdx = self.selectSyntax.findData(self.mainConf.guiSyntax) - if syntaxIdx != -1: - self.selectSyntax.setCurrentIndex(syntaxIdx) - - self.mainForm.addRow( - "Syntax highlight theme", - self.selectSyntax, - "" - ) - ## Dark Icons self.preferDarkIcons = QSwitch() self.preferDarkIcons.setChecked(self.mainConf.guiDark) @@ -210,13 +194,6 @@ class GuiConfigEditGeneralTab(QWidget): self.showFullPath ) - self.highlightQuotes = QSwitch() - self.highlightQuotes.setChecked(self.mainConf.highlightQuotes) - self.mainForm.addRow( - "Add highlighting to text in quotes", - self.highlightQuotes - ) - # AutoSave Settings # ================= self.mainForm.addGroupLabel("Automatic Save") @@ -287,11 +264,9 @@ class GuiConfigEditGeneralTab(QWidget): needsRestart = False guiTheme = self.selectTheme.currentData() - guiSyntax = self.selectSyntax.currentData() guiIcons = self.selectIcons.currentData() guiDark = self.preferDarkIcons.isChecked() showFullPath = self.showFullPath.isChecked() - highlightQuotes = self.highlightQuotes.isChecked() autoSaveDoc = self.autoSaveDoc.value() autoSaveProj = self.autoSaveProj.value() backupPath = self.backupPath @@ -303,11 +278,9 @@ class GuiConfigEditGeneralTab(QWidget): needsRestart |= self.mainConf.guiIcons != guiIcons self.mainConf.guiTheme = guiTheme - self.mainConf.guiSyntax = guiSyntax self.mainConf.guiIcons = guiIcons self.mainConf.guiDark = guiDark self.mainConf.showFullPath = showFullPath - self.mainConf.highlightQuotes = highlightQuotes self.mainConf.autoSaveDoc = autoSaveDoc self.mainConf.autoSaveProj = autoSaveProj self.mainConf.backupPath = backupPath @@ -530,6 +503,33 @@ class GuiConfigEditEditingTab(QWidget): self.mainForm.setHelpTextStyle(self.theTheme.helpText) self.setLayout(self.mainForm) + # Spell Checking + # ============== + self.mainForm.addGroupLabel("Syntax Highlighting") + + ## Syntax Highlighting + self.selectSyntax = QComboBox() + self.selectSyntax.setMinimumWidth(200) + self.theSyntaxes = self.theTheme.listSyntax() + for syntaxFile, syntaxName in self.theSyntaxes: + self.selectSyntax.addItem(syntaxName, syntaxFile) + syntaxIdx = self.selectSyntax.findData(self.mainConf.guiSyntax) + if syntaxIdx != -1: + self.selectSyntax.setCurrentIndex(syntaxIdx) + + self.mainForm.addRow( + "Highlight theme", + self.selectSyntax, + "" + ) + + self.highlightQuotes = QSwitch() + self.highlightQuotes.setChecked(self.mainConf.highlightQuotes) + self.mainForm.addRow( + "Highlight text wrapped in quotes", + self.highlightQuotes + ) + # Spell Checking # ============== self.mainForm.addGroupLabel("Spell Checking") @@ -583,13 +583,17 @@ class GuiConfigEditEditingTab(QWidget): validEntries = True needsRestart = False - spellTool = self.spellToolList.currentData() - spellLanguage = self.spellLangList.currentData() - bigDocLimit = self.bigDocLimit.value() + guiSyntax = self.selectSyntax.currentData() + highlightQuotes = self.highlightQuotes.isChecked() + spellTool = self.spellToolList.currentData() + spellLanguage = self.spellLangList.currentData() + bigDocLimit = self.bigDocLimit.value() - self.mainConf.spellTool = spellTool - self.mainConf.spellLanguage = spellLanguage - self.mainConf.bigDocLimit = bigDocLimit + self.mainConf.guiSyntax = guiSyntax + self.mainConf.highlightQuotes = highlightQuotes + self.mainConf.spellTool = spellTool + self.mainConf.spellLanguage = spellLanguage + self.mainConf.bigDocLimit = bigDocLimit self.mainConf.confChanged = True From a9ff0e8c2ba57c1ada001ab0d803501a1fd8f7cc Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 19:44:35 +0200 Subject: [PATCH 47/53] Fallnack icon should still work if no dark icon is specified --- nw/gui/icons.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nw/gui/icons.py b/nw/gui/icons.py index fe596fe3..a57f3029 100644 --- a/nw/gui/icons.py +++ b/nw/gui/icons.py @@ -76,6 +76,7 @@ class GuiIcons: "cls_trash" : (QStyle.SP_DriveHDIcon, "drive-harddisk"), "proj_document" : (QStyle.SP_FileIcon, "x-office-document"), "proj_folder" : (QStyle.SP_DirIcon, "folder"), + "proj_nwx" : (None, None), "status_lang" : (None, None), "status_time" : (None, None), "status_stats" : (None, None), @@ -295,8 +296,10 @@ class GuiIcons: # Finally. we check if we have a fallback icon if self.mainConf.guiDark: fbackIcon = path.join(self.mainConf.iconPath, self.fbackName, "%s-dark.svg" % iconKey) - else: - fbackIcon = path.join(self.mainConf.iconPath, self.fbackName, "%s.svg" % iconKey) + if path.isfile(fbackIcon): + logger.verbose("Loading icon '%s' from fallback theme" % iconKey) + return QIcon(fbackIcon) + fbackIcon = path.join(self.mainConf.iconPath, self.fbackName, "%s.svg" % iconKey) if path.isfile(fbackIcon): logger.verbose("Loading icon '%s' from fallback theme" % iconKey) return QIcon(fbackIcon) From 0bbd7de8057445084632d99dcd52bc2571303c7b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 19:45:00 +0200 Subject: [PATCH 48/53] Redesigned the open project dialog --- nw/assets/icons/fallback/proj_nwx.svg | 252 ++++++++++++++++++++++++++ nw/gui/dialogs/projectload.py | 97 +++++++--- nw/guimain.py | 7 +- 3 files changed, 326 insertions(+), 30 deletions(-) create mode 100644 nw/assets/icons/fallback/proj_nwx.svg diff --git a/nw/assets/icons/fallback/proj_nwx.svg b/nw/assets/icons/fallback/proj_nwx.svg new file mode 100644 index 00000000..6495b39c --- /dev/null +++ b/nw/assets/icons/fallback/proj_nwx.svg @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/nw/gui/dialogs/projectload.py b/nw/gui/dialogs/projectload.py index 1ae20b64..46d48824 100644 --- a/nw/gui/dialogs/projectload.py +++ b/nw/gui/dialogs/projectload.py @@ -33,7 +33,7 @@ from datetime import datetime from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QPushButton, QTreeWidget, - QAbstractItemView, QTreeWidgetItem + QAbstractItemView, QTreeWidgetItem, QDialogButtonBox, QLabel ) from nw.common import formatInt @@ -42,25 +42,33 @@ logger = logging.getLogger(__name__) class GuiProjectLoad(QDialog): + NONE_STATE = 0 + BROWSE_STATE = 1 + NEW_STATE = 2 + OPEN_STATE = 3 + def __init__(self, theParent): QDialog.__init__(self, theParent) logger.debug("Initialising GuiProjectLoad ...") - self.mainConf = nw.CONFIG - self.theParent = theParent - self.sourceItem = None - self.openPath = None + self.mainConf = nw.CONFIG + self.theParent = theParent + self.openState = self.NONE_STATE + self.openPath = None + + self.outerBox = QVBoxLayout() + self.innerBox = QHBoxLayout() + self.outerBox.setSpacing(16) + self.innerBox.setSpacing(16) - self.outerBox = QHBoxLayout() - self.innerBox = QVBoxLayout() self.setWindowTitle("Open Project") - self.setLayout(self.outerBox) + self.setMinimumWidth(650) + self.setMinimumHeight(400) + self.setModal(True) - self.guiDeco = self.theParent.theTheme.loadDecoration("nwicon", (128, 128)) - - self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) - self.outerBox.addLayout(self.innerBox) + self.guiDeco = self.theParent.theTheme.loadDecoration("nwicon", (96, 96)) + self.innerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) self.projectForm = QGridLayout() self.projectForm.setContentsMargins(0, 0, 0, 0) @@ -71,34 +79,45 @@ class GuiProjectLoad(QDialog): self.listBox.setColumnCount(4) self.listBox.setHeaderLabels(["Working Title","Words","Last Opened","Path"]) self.listBox.setRootIsDecorated(False) + self.listBox.setColumnHidden(3, True) + self.listBox.itemClicked.connect(self._doSelectRecent) self.listBox.itemDoubleClicked.connect(self._doOpenRecent) treeHead = self.listBox.headerItem() treeHead.setTextAlignment(1, Qt.AlignRight) treeHead.setTextAlignment(2, Qt.AlignRight) - self.recentButton = QPushButton("Open") - self.recentButton.clicked.connect(self._doOpenRecent) - self.browseButton = QPushButton("Browse") - self.browseButton.clicked.connect(self._doBrowse) - self.closeButton = QPushButton("Close") - self.closeButton.clicked.connect(self._doClose) + self.lblRecent = QLabel("Recently Opened:") + self.lblPath = QLabel("Path:") + self.selPath = QLabel("") + self.selPath.setWordWrap(True) - self.projectForm.addWidget(self.listBox, 0, 0, 1, 4) - self.projectForm.addWidget(self.recentButton, 1, 1) - self.projectForm.addWidget(self.browseButton, 1, 2) - self.projectForm.addWidget(self.closeButton, 1, 3) - self.projectForm.setColumnStretch(0, 1) + self.projectForm.addWidget(self.lblRecent, 0, 0, 1, 2) + self.projectForm.addWidget(self.listBox, 1, 0, 1, 2) + self.projectForm.addWidget(self.lblPath, 2, 0, 1, 1, Qt.AlignTop) + self.projectForm.addWidget(self.selPath, 2, 1, 1, 1, Qt.AlignTop) + self.projectForm.setColumnStretch(1, 1) + self.projectForm.setVerticalSpacing(4) + self.projectForm.setHorizontalSpacing(8) self.innerBox.addLayout(self.projectForm) - self.rejected.connect(self._doClose) - self.setModal(True) - self.setMinimumWidth(750) - self.setMinimumHeight(450) - self.show() + self.buttonBox = QDialogButtonBox(QDialogButtonBox.Open | QDialogButtonBox.Cancel) + self.buttonBox.accepted.connect(self._doOpenRecent) + self.buttonBox.rejected.connect(self._doClose) + + self.newButton = self.buttonBox.addButton("New", QDialogButtonBox.ActionRole) + self.newButton.clicked.connect(self._doNewProject) + + self.browseButton = self.buttonBox.addButton("Browse", QDialogButtonBox.ActionRole) + self.browseButton.clicked.connect(self._doBrowse) + + self.outerBox.addLayout(self.innerBox) + self.outerBox.addWidget(self.buttonBox) + self.setLayout(self.outerBox) self._populateList() + self._doSelectRecent() logger.debug("GuiProjectLoad initialisation complete") @@ -116,10 +135,19 @@ class GuiProjectLoad(QDialog): selItems = self.listBox.selectedItems() if selItems: self.openPath = selItems[0].text(3) + self.openState = self.OPEN_STATE self.accept() else: self.openPath = None + self.openState = self.NONE_STATE + return + def _doSelectRecent(self): + """A recent item has been selected. + """ + selList = self.listBox.selectedItems() + if selList: + self.selPath.setText(selList[0].text(3)) return def _doBrowse(self): @@ -129,6 +157,7 @@ class GuiProjectLoad(QDialog): logger.verbose("GuiProjectLoad browse button clicked") self._saveDialogState() self.openPath = None + self.openState = self.BROWSE_STATE self.accept() return @@ -140,6 +169,16 @@ class GuiProjectLoad(QDialog): self.close() return + def _doNewProject(self): + """Create a new project. + """ + logger.verbose("GuiProjectLoad new project button clicked") + self._saveDialogState() + self.openPath = None + self.openState = self.NEW_STATE + self.accept() + return + ## # Internal Functions ## @@ -156,7 +195,6 @@ class GuiProjectLoad(QDialog): def _populateList(self): """Populate the list box with recent project data. """ - listOrder = [] listData = {} for projPath in self.mainConf.recentProj.keys(): @@ -178,6 +216,7 @@ class GuiProjectLoad(QDialog): hasSelection = False for timeStamp in sorted(listOrder, reverse=True): newItem = QTreeWidgetItem([""]*4) + newItem.setIcon(0, self.theParent.theTheme.getIcon("proj_nwx")) newItem.setText(0, listData[timeStamp][0]) newItem.setText(1, formatInt(listData[timeStamp][1])) newItem.setText(2, datetime.fromtimestamp(timeStamp).strftime("%x %X")) diff --git a/nw/guimain.py b/nw/guimain.py index e8c0840a..558712ed 100644 --- a/nw/guimain.py +++ b/nw/guimain.py @@ -262,7 +262,12 @@ class GuiMain(QMainWindow): dlgProj = GuiProjectLoad(self) dlgProj.exec_() if dlgProj.result() == QDialog.Accepted: - self.openProject(dlgProj.openPath) + if dlgProj.openState == GuiProjectLoad.OPEN_STATE: + self.openProject(dlgProj.openPath) + elif dlgProj.openState == GuiProjectLoad.BROWSE_STATE: + self.openProject(dlgProj.openPath) + elif dlgProj.openState == GuiProjectLoad.NEW_STATE: + self.newProject() return True From cc340d721b45d1750dd6e40e868fcf617733dfe6 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 19:56:31 +0200 Subject: [PATCH 49/53] Session word count should just be a +/- number in brackets --- nw/gui/statusbar.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nw/gui/statusbar.py b/nw/gui/statusbar.py index 6d104357..0d2643c6 100644 --- a/nw/gui/statusbar.py +++ b/nw/gui/statusbar.py @@ -212,7 +212,7 @@ class GuiMainStatus(QStatusBar): sWC = self.sessWords, )) self.statsText.setText(( - "D:{wC:n} P:{pWC:n} S:{sWC:n}" + "D:{wC:n} P:{pWC:n} ({sWC:+n})" ).format( wC = self.wordCount, pWC = self.projWords, @@ -243,10 +243,10 @@ class StatusLED(QAbstractButton): def __init__(self, colNone, colTrue, colFalse, sW, sH, parent=None): super().__init__(parent=parent) - self.colNone = colNone - self.colTrue = colTrue - self.colFalse = colFalse - self._theCol = colNone + self.colNone = colNone + self.colTrue = colTrue + self.colFalse = colFalse + self._theCol = colNone self.setFixedWidth(sW) self.setFixedHeight(sH) From 7f3e9c0f314db1b7bf568a3cdcbdda2670ef56e0 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 20:13:10 +0200 Subject: [PATCH 50/53] Updated changelog --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d962671..daf37221 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,11 @@ **User Interface** -* The Export Tool has been removed and replaced by a new tool called "Build Novel Project". The new tool has the same filtering options as the Export Tool, but with more formatting options for titles. It also has a preview window to display the generated document. A Save As button provides exports to HTML, novelWriter Markdown. plain text, PDF and Open Document format. LaTeX export has not been ported over, and interfacing with Pandoc is no longer supported either. Although. as before, the HTML export can be converted with Pandoc still. The new tool also supports printing. PR #204 -* The Project Settings, Preferences, Item Editor, Merge Documents, and Split Documents dialogs have been redesigned. The ones with tabs, now have vertical tabs on the left with horizontal labels. The dialog design should be more compact, and have room for more tabs for future settings. PR #212 +* The Export Tool has been removed and replaced by a new tool called "Build Novel Project". The new tool has the same filtering options as the Export Tool, but with more formatting options for titles. It also has a preview window to display the generated document. A Save As button provides exports to HTML, novelWriter Markdown. plain text, PDF and Open Document format. LaTeX export has not been ported over, and interfacing with Pandoc is no longer supported either. Although, as before, the HTML export can be converted with Pandoc to other formats outside of novelWriter. The new tool also supports printing. PR #204 +* The Project Settings, Preferences, Item Editor, Merge Documents, and Split Documents dialogs have been redesigned. The ones with tabs now have vertical tabs on the left with horizontal labels. The dialog design should be more compact, and have room for more tabs for future settings. PR #212 +* A new icon, as well as a mimetype icon for the project files, have been designed and added to the app. PRs #213 and #214 +* The About dialog has been completely redesigned to allow more information. PR #217 +* The Open Project dialog has been cleaned up and made more readable. The project paths have been moved out of the list, and are now displayed when an item is selected instead. Icons have been added, and the New project dialog can also be triggered from this dialog. PR #218 ## Version 0.5.2 [2020-05-21] From 8aacad8ce0a3a30316872c82c68791f4dd06caa7 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 20:13:50 +0200 Subject: [PATCH 51/53] Made the item editor dialog less cluttered --- nw/gui/dialogs/itemeditor.py | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/nw/gui/dialogs/itemeditor.py b/nw/gui/dialogs/itemeditor.py index 51583195..ce1fac67 100644 --- a/nw/gui/dialogs/itemeditor.py +++ b/nw/gui/dialogs/itemeditor.py @@ -34,7 +34,7 @@ from PyQt5.QtWidgets import ( QDialogButtonBox ) -from nw.gui.additions import QSwitch, QHelpLabel +from nw.gui.additions import QSwitch from nw.constants import nwLabels, nwItemLayout, nwItemClass, nwItemType logger = logging.getLogger(__name__) @@ -59,13 +59,6 @@ class GuiItemEditor(QDialog): self.setWindowTitle("Item Settings") self.setLayout(self.outerBox) - # Labels - self.headLabel = QLabel("Edit Item Settings") - self.helpLabel = QHelpLabel( - "Item layout and status options depend on the root folder.", - self.theParent.theTheme.helpText - ) - # Item Label self.editName = QLineEdit() self.editName.setMinimumWidth(220) @@ -132,6 +125,7 @@ class GuiItemEditor(QDialog): # Assemble self.mainForm = QGridLayout() self.mainForm.setVerticalSpacing(4) + self.mainForm.setHorizontalSpacing(16) self.mainForm.addWidget(QLabel("Label"), 0, 0, 1, 1) self.mainForm.addWidget(self.editName, 0, 1, 1, 2) self.mainForm.addWidget(QLabel("Status"), 1, 0, 1, 1) @@ -141,19 +135,13 @@ class GuiItemEditor(QDialog): self.mainForm.addWidget(self.textExport, 3, 0, 1, 2) self.mainForm.addWidget(self.editExport, 3, 2, 1, 1) - self.outerBox.setSpacing(0) - self.outerBox.addWidget(self.headLabel) - self.outerBox.addWidget(self.helpLabel) - self.outerBox.addSpacing(8) + self.outerBox.setSpacing(16) self.outerBox.addLayout(self.mainForm) - self.outerBox.addSpacing(12) self.outerBox.addStretch(1) self.outerBox.addWidget(self.buttonBox) self.setLayout(self.outerBox) self.rejected.connect(self._doClose) - self.show() - self.editName.selectAll() logger.debug("GuiItemEditor initialisation complete") From 2a9bdd1985875f8151a317f0d882dc3011f9ffa2 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 20:29:40 +0200 Subject: [PATCH 52/53] Moved document stats to the details panel below the tree --- nw/gui/elements/docdetails.py | 120 ++++++++++++++++++++++++---------- nw/gui/elements/doctree.py | 2 +- nw/gui/statusbar.py | 19 +----- 3 files changed, 88 insertions(+), 53 deletions(-) diff --git a/nw/gui/elements/docdetails.py b/nw/gui/elements/docdetails.py index 8c231fa6..12eb6030 100644 --- a/nw/gui/elements/docdetails.py +++ b/nw/gui/elements/docdetails.py @@ -51,83 +51,119 @@ class GuiDocDetails(QFrame): self.mainBox.setHorizontalSpacing(6) self.setLayout(self.mainBox) - self.fntOne = QFont() - self.fntOne.setPointSize(10) - self.fntOne.setBold(True) + self.fntLabel = QFont() + self.fntLabel.setPointSize(10) + self.fntLabel.setBold(True) - self.fntTwo = QFont() - self.fntTwo.setFamily("Monospace") - self.fntTwo.setPointSize(10) + self.fntFixed = QFont() + self.fntFixed.setFamily("Monospace") + self.fntFixed.setPointSize(10) - self.fntThree = QFont() - self.fntThree.setPointSize(10) + self.fntValue = QFont() + self.fntValue.setPointSize(10) # Label self.labelName = QLabel("Label ") - self.labelName.setFont(self.fntOne) + self.labelName.setFont(self.fntLabel) self.labelName.setAlignment(Qt.AlignLeft | Qt.AlignBaseline) self.labelFlag = QLabel("") - self.labelFlag.setFont(self.fntTwo) + self.labelFlag.setFont(self.fntFixed) self.labelFlag.setAlignment(Qt.AlignRight | Qt.AlignBaseline) self.labelData = QLabel("") - self.labelData.setFont(self.fntThree) + self.labelData.setFont(self.fntValue) self.labelData.setAlignment(Qt.AlignLeft | Qt.AlignBaseline) self.labelData.setWordWrap(True) # Status self.statusName = QLabel("Status ") - self.statusName.setFont(self.fntOne) + self.statusName.setFont(self.fntLabel) self.statusName.setAlignment(Qt.AlignLeft) self.statusFlag = QLabel("") - self.statusFlag.setFont(self.fntTwo) + self.statusFlag.setFont(self.fntFixed) self.statusFlag.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.statusData = QLabel("") - self.statusData.setFont(self.fntThree) + self.statusData.setFont(self.fntValue) self.statusData.setAlignment(Qt.AlignLeft) # Class self.className = QLabel("Class ") - self.className.setFont(self.fntOne) + self.className.setFont(self.fntLabel) self.className.setAlignment(Qt.AlignLeft) self.classFlag = QLabel("") - self.classFlag.setFont(self.fntTwo) + self.classFlag.setFont(self.fntFixed) self.classFlag.setAlignment(Qt.AlignRight) self.classData = QLabel("") - self.classData.setFont(self.fntThree) + self.classData.setFont(self.fntValue) self.classData.setAlignment(Qt.AlignLeft) # Layout self.layoutName = QLabel("Layout ") - self.layoutName.setFont(self.fntOne) + self.layoutName.setFont(self.fntLabel) self.layoutName.setAlignment(Qt.AlignLeft) self.layoutFlag = QLabel("") - self.layoutFlag.setFont(self.fntTwo) + self.layoutFlag.setFont(self.fntFixed) self.layoutFlag.setAlignment(Qt.AlignRight) self.layoutData = QLabel("") - self.layoutData.setFont(self.fntThree) + self.layoutData.setFont(self.fntValue) self.layoutData.setAlignment(Qt.AlignLeft) + # Character Count + self.cCountName = QLabel(" Characters") + self.cCountName.setFont(self.fntLabel) + self.cCountName.setAlignment(Qt.AlignRight) + + self.cCountData = QLabel("") + self.cCountData.setFont(self.fntValue) + self.cCountData.setAlignment(Qt.AlignRight) + + # Word Count + self.wCountName = QLabel(" Words") + self.wCountName.setFont(self.fntLabel) + self.wCountName.setAlignment(Qt.AlignRight) + + self.wCountData = QLabel("") + self.wCountData.setFont(self.fntValue) + self.wCountData.setAlignment(Qt.AlignRight) + + # Paragraph Count + self.pCountName = QLabel(" Paragraphs") + self.pCountName.setFont(self.fntLabel) + self.pCountName.setAlignment(Qt.AlignRight) + + self.pCountData = QLabel("") + self.pCountData.setFont(self.fntValue) + self.pCountData.setAlignment(Qt.AlignRight) + # Assemble - self.mainBox.addWidget(self.labelName, 0, 0) - self.mainBox.addWidget(self.statusName, 1, 0) - self.mainBox.addWidget(self.className, 2, 0) - self.mainBox.addWidget(self.layoutName, 3, 0) - self.mainBox.addWidget(self.labelFlag, 0, 1) - self.mainBox.addWidget(self.statusFlag, 1, 1) - self.mainBox.addWidget(self.classFlag, 2, 1) - self.mainBox.addWidget(self.layoutFlag, 3, 1) - self.mainBox.addWidget(self.labelData, 0, 2) - self.mainBox.addWidget(self.statusData, 1, 2) - self.mainBox.addWidget(self.classData, 2, 2) - self.mainBox.addWidget(self.layoutData, 3, 2) + self.mainBox.addWidget(self.labelName, 0, 0, 1, 1) + self.mainBox.addWidget(self.labelFlag, 0, 1, 1, 1) + self.mainBox.addWidget(self.labelData, 0, 2, 1, 3) + + self.mainBox.addWidget(self.statusName, 1, 0, 1, 1) + self.mainBox.addWidget(self.statusFlag, 1, 1, 1, 1) + self.mainBox.addWidget(self.statusData, 1, 2, 1, 1) + self.mainBox.addWidget(self.cCountName, 1, 3, 1, 1) + self.mainBox.addWidget(self.cCountData, 1, 4, 1, 1) + + self.mainBox.addWidget(self.className, 2, 0, 1, 1) + self.mainBox.addWidget(self.classFlag, 2, 1, 1, 1) + self.mainBox.addWidget(self.classData, 2, 2, 1, 1) + self.mainBox.addWidget(self.wCountName, 2, 3, 1, 1) + self.mainBox.addWidget(self.wCountData, 2, 4, 1, 1) + + self.mainBox.addWidget(self.layoutName, 3, 0, 1, 1) + self.mainBox.addWidget(self.layoutFlag, 3, 1, 1, 1) + self.mainBox.addWidget(self.layoutData, 3, 2, 1, 1) + self.mainBox.addWidget(self.pCountName, 3, 3, 1, 1) + self.mainBox.addWidget(self.pCountData, 3, 4, 1, 1) self.mainBox.setColumnStretch(0,0) self.mainBox.setColumnStretch(1,0) @@ -149,13 +185,16 @@ class GuiDocDetails(QFrame): if nwItem is None: self.labelFlag.setText("") - self.statusFlag.setText("") - self.classFlag.setText("") - self.layoutFlag.setText("") self.labelData.setText("") + self.statusFlag.setText("") self.statusData.setText("") + self.classFlag.setText("") self.classData.setText("") + self.layoutFlag.setText("") self.layoutData.setText("") + self.cCountData.setText("–") + self.wCountData.setText("–") + self.pCountData.setText("–") else: theLabel = nwItem.itemName @@ -176,7 +215,7 @@ class GuiDocDetails(QFrame): else: exportFlag = " " else: - exportFlag = "+" + exportFlag = "-" self.labelFlag.setText(exportFlag) self.statusFlag.setPixmap(flagIcon.pixmap(10, 10)) @@ -188,6 +227,15 @@ class GuiDocDetails(QFrame): self.classData.setText(nwLabels.CLASS_NAME[nwItem.itemClass]) self.layoutData.setText(nwLabels.LAYOUT_NAME[nwItem.itemLayout]) + if nwItem.itemType == nwItemType.FILE: + self.cCountData.setText("{:n}".format(nwItem.charCount)) + self.wCountData.setText("{:n}".format(nwItem.wordCount)) + self.pCountData.setText("{:n}".format(nwItem.paraCount)) + else: + self.cCountData.setText("–") + self.wCountData.setText("–") + self.pCountData.setText("–") + return # END Class GuiDocDetails diff --git a/nw/gui/elements/doctree.py b/nw/gui/elements/doctree.py index bb06b9d2..89ef9d8c 100644 --- a/nw/gui/elements/doctree.py +++ b/nw/gui/elements/doctree.py @@ -421,7 +421,7 @@ class GuiDocTree(QTreeWidget): if nwItem.isExported: stExport = nwUnicode.U_CHECK else: - stExport = "+" + stExport = "-" tStatus = stExport+" "+stClass+stLayout diff --git a/nw/gui/statusbar.py b/nw/gui/statusbar.py index 0d2643c6..c7ee28df 100644 --- a/nw/gui/statusbar.py +++ b/nw/gui/statusbar.py @@ -195,22 +195,9 @@ class GuiMainStatus(QStatusBar): def _updateStats(self): """Update statistics. """ - self.statsText.setToolTip(( - "Document Stats
    " - "Characters: {cC:n}
    " - "Words: {wC:n}
    " - "Paragraphs: {pC:n}
    " - "
    " - "Project Stats
    " - "Words Total: {pWC:n}
    " - "This Session: {sWC:n}" - ).format( - cC = self.charCount, - wC = self.wordCount, - pC = self.paraCount, - pWC = self.projWords, - sWC = self.sessWords, - )) + self.statsText.setToolTip( + "D: Document word count
    P: Project word count" + ) self.statsText.setText(( "D:{wC:n} P:{pWC:n} ({sWC:+n})" ).format( From 2f1bc456c03f102ea665ee26490565593d22dec8 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 20:39:21 +0200 Subject: [PATCH 53/53] Changed some help text a bit --- nw/gui/dialogs/docsplit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nw/gui/dialogs/docsplit.py b/nw/gui/dialogs/docsplit.py index 137138c3..25cc2f1d 100644 --- a/nw/gui/dialogs/docsplit.py +++ b/nw/gui/dialogs/docsplit.py @@ -57,7 +57,7 @@ class GuiDocSplit(QDialog): self.headLabel = QLabel("Document Headers") self.helpLabel = QHelpLabel( - "Select the maximum level to split into files at.", self.theParent.theTheme.helpText + "Select the maximum level to split into files.", self.theParent.theTheme.helpText ) self.listBox = QListWidget()

    See the " - "GPL v3.0 " - "License for more details.

  • |C4L@ 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
    nB-jTnE9aLaoAq2%Ufs~|s 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 Vb)og4Z=hKi22WQ%mvv4FO#t{7(+U6p diff --git a/assets/icons/1024x1024/x-novelwriter-project.png b/assets/icons/1024x1024/x-novelwriter-project.png index d0eba36dbdd1a71864417f850659779b115341aa..235e6b4be4222a0e799fe511b961f2c24e811363 100644 GIT binary patch literal 77434 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Ǚi;U~ z-xSSL#myIehDG}BjGy@8Ag9R(@Kl>FYUK+sJIG#Eju|GCFaWSYUQ!#MeD_ZHauweT zgqf@(P_q3_g5dOtjVvib?kgtuEkUE%$XWHwO!ARU5aVexJ9*oY`YG^Y*|Aq2jb{w9 z#Jn0m*LI~hi5=$V*52A5#;)(xIsy38JbXF8^!YgZP=Dgt8|`f=$xL^T@ZhfdcrQ%# zP*{m0xmT3j{D&rrs8=Wk@QGt7>Ct-tW4-dnPh4F{e>TW`DoyWO2i-c5r~&=s3|g1- ztFT@K(NFx=DS`cqd6|TMJlOAP*Dz0yeUq}W_{;vN~5s z7tTDPj2Xz}5j}2|Ynu%PbmqM{Lqm*MC|S^Xi>L- zvF3!;k$at@P$SaCAI}^)DTj+N5HM-4jqu;MOX0Lz*n1wzB*lL0juFrZf~$b+yT@?G z30G45at*!h|Hg!sBT{I8Ts(Ky8c~61#b_*zRh$SP@?+UvLSC8fsF{X|rarxAeXk6x zzl;<3S9&n8F&)fWdo1Op71R11TgExQILiry^leb(03q|mV~2g$b@!?#_{U;!mdHK+fmnC1mKDh2NC7ZtoII zm;@NF4uY_Ibe0dhrt7y#zxn$*HDDifY4CdU#9qTKdEj0W&BF#!? z1w>M8$fmE}yI~4R+tRS2G5(?yegjd_>op#}iO0y;Y*kq7Ao@|sz4wzTIw1M(Cz6e! zJ$-ca*LG@1#LeaGARw7*E$>>%h?dR!U}f<2$~Cc&2HP`hn1&OKYDeNJC9hCbf9Bzc zz?5Nm-0Xr}Q;WFO&VS z!z>9d3$sD%yPe}=e|3FR2@dN29$Or7C`hW!3}sF;zPnP8ne(OtodLtDjnV+6ycQ7L zgsdp?67=C~O8N|)nD}Xf^u~w+wzPM=tS!(zaP>)|99mE?mOX$<;KKWm>v@x{#H?AAMwEz6Ely?B95-u`c;~wNWc}P?4G3s$-%frYk+eZh zW>U{(2V=X9%w0mvep#uUjrkS>$Ux+(;)&93RMB6ul@HF>WW8~%uVNN~;K~m$>m36? zes|k<{VS8-glKzFb&8R9DI)p1f#5mFr61{O40xmB;brafmOC&EShTaz(Mv$YzM;FH zO`GOirnSF2AugIfI2`I1UJVh5g=85V2bn3m&`>2Xd-8!z<1Y||ji=6s=U0a>C?xoX z*}u`t3+U%tvaFDnJbrlNUqs98L4KT-oY>+yo6JoQhI^#JKl?Sy4awa{jw|{M)Nq39 z_Msu*y2KwDi*ta)g%~BF