Merge branch 'main' into merge_1.6.2

This commit is contained in:
Veronica Berglyd Olsen
2022-03-20 15:58:36 +01:00
31 changed files with 692 additions and 1451 deletions
+2 -2
View File
@@ -29,5 +29,5 @@ jobs:
flake8 tests --count --select=E9,F63,F7,F82 --show-source --statistics flake8 tests --count --select=E9,F63,F7,F82 --show-source --statistics
- name: Coding Style Violations - name: Coding Style Violations
run: | run: |
flake8 novelwriter --count --max-line-length=99 --ignore E221,E226,E228,E241 --show-source --statistics flake8 novelwriter --count --max-line-length=99 --ignore E133,E221,E226,E228,E241,W503 --show-source --statistics
flake8 tests --count --max-line-length=99 --ignore E221,E226,E228,E241 --show-source --statistics flake8 tests --count --max-line-length=99 --ignore E133,E221,E226,E228,E241,W503 --show-source --statistics
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
testLinux: testLinux:
strategy: strategy:
matrix: matrix:
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] python-version: ["3.7", "3.8", "3.9", "3.10"]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Python Setup - name: Python Setup
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
- name: Python Setup - name: Python Setup
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: 3.9 python-version: "3.10"
architecture: x64 architecture: x64
- name: Install Packages - name: Install Packages
run: | run: |
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
- name: Python Setup - name: Python Setup
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: 3.9 python-version: "3.10"
architecture: x64 architecture: x64
- name: Checkout Source - name: Checkout Source
uses: actions/checkout@v2 uses: actions/checkout@v2
+3 -3
View File
@@ -31,9 +31,9 @@ The full credits are listed in
## Implementation ## Implementation
The application is written in Python 3 (3.6+) using Qt5 and PyQt5 (5.3+). It is developed on Linux, The application is written with Python 3 (3.7+) using Qt5 and PyQt5 (5.3+). It is developed on
but should in principle work fine on other operating systems as well as long as dependencies are Linux, but should in principle work fine on other operating systems as well as long as dependencies
met. It is regularly tested on Debian and Ubuntu Linux, Windows, and macOS. are met. It is regularly tested on Debian and Ubuntu Linux, Windows, and macOS.
## Installation ## Installation
+1 -1
View File
@@ -115,7 +115,7 @@ Windows
------- -------
First, make sure you have Python installed on your system. If you don't, you can download it from First, make sure you have Python installed on your system. If you don't, you can download it from
`python.org`_. Python 3.6 or higher is required, but it is recommended that you install the latest `python.org`_. Python 3.7 or higher is required, but it is recommended that you install the latest
version. version.
Make sure you select the "Add Python to PATH" option during installation, otherwise the ``python`` Make sure you select the "Add Python to PATH" option during installation, otherwise the ``python``
+22 -3
View File
@@ -11,13 +11,32 @@ changes require minor actions from the user.
The key changes in the formats are listed below, as well as the user actions required where The key changes in the formats are listed below, as well as the user actions required where
applicable. applicable.
.. caution::
When you update a project from one format version to the next, the project can no longer be
opened by a version of novelWriter prior to the version where the new file format was
introduced. You will get a notification about any updates to your project file format and will
have the option to decline the upgrade.
.. _a_prjfmt_1_4:
Format 1.4 Changes
==================
This project format was introduced in novelWriter version 1.7.
This format changes the way project items (folders, documents and notes) are stored. It is a more
compact format that is simpler and faster to parse, and easier to extend. The conversion is done
automatically the first time a project is loaded. No user action is required.
.. _a_prjfmt_1_3: .. _a_prjfmt_1_3:
Format 1.3 Changes Format 1.3 Changes
================== ==================
This project format vas introduces in novelWriter version 1.5. This project format was introduced in novelWriter version 1.5.
With this format, the number of document layouts was reduced from 8 to 2. The conversion of With this format, the number of document layouts was reduced from 8 to 2. The conversion of
document layouts is performed automatically when the project is opened. document layouts is performed automatically when the project is opened.
@@ -55,7 +74,7 @@ should be used only a few places in any given project. These are as follows:
Format 1.2 Changes Format 1.2 Changes
================== ==================
This project format was introduces in novelWriter version 0.10. This project format was introduced in novelWriter version 0.10.
With this format, the way auto-replace entries were stored in the main project XML file changed. With this format, the way auto-replace entries were stored in the main project XML file changed.
Opening an old project automatically converts the storage format up to and including version 1.1.1. Opening an old project automatically converts the storage format up to and including version 1.1.1.
@@ -69,7 +88,7 @@ auto-replace is not being used, can still be opened in novelWriter as of version
Format 1.1 Changes Format 1.1 Changes
================== ==================
This project format was introduces in novelWriter version 0.7. This project format was introduced in novelWriter version 0.7.
With this format, the ``content`` folder was introduced in the project storage. Previously, all With this format, the ``content`` folder was introduced in the project storage. Previously, all
novelWriter documents were saved in a series of folders numbered from ``data_0`` to ``data_f``. novelWriter documents were saved in a series of folders numbered from ``data_0`` to ``data_f``.
+5 -5
View File
@@ -60,9 +60,9 @@ __license__ = "GPLv3"
__author__ = "Veronica Berglyd Olsen" __author__ = "Veronica Berglyd Olsen"
__maintainer__ = "Veronica Berglyd Olsen" __maintainer__ = "Veronica Berglyd Olsen"
__email__ = "code@vkbo.net" __email__ = "code@vkbo.net"
__version__ = "1.6.2" __version__ = "1.7-alpha0"
__hexversion__ = "0x010602f0" __hexversion__ = "0x010700a0"
__date__ = "2022-03-20" __date__ = "2022-02-20"
__status__ = "Stable" __status__ = "Stable"
__domain__ = "novelwriter.io" __domain__ = "novelwriter.io"
__url__ = "https://novelwriter.io" __url__ = "https://novelwriter.io"
@@ -209,9 +209,9 @@ def main(sysArgs=None):
# Check Packages and Versions # Check Packages and Versions
errorData = [] errorData = []
errorCode = 0 errorCode = 0
if sys.hexversion < 0x030600f0: if sys.hexversion < 0x030700f0:
errorData.append( errorData.append(
"At least Python 3.6 is required, found %s" % CONFIG.verPyString "At least Python 3.7 is required, found %s" % CONFIG.verPyString
) )
errorCode |= 0x04 errorCode |= 0x04
if CONFIG.verQtValue < 50300: if CONFIG.verQtValue < 50300:
-13
View File
@@ -241,19 +241,6 @@ def formatTime(tS):
return "ERROR" return "ERROR"
def parseTimeStamp(theStamp, default, allowNone=False):
"""Parses a text representation of a timestamp and converts it into
a float. Note that negative timestamps cause an OSError on Windows.
See https://bugs.python.org/issue29097
"""
if str(theStamp).lower() == "none" and allowNone:
return None
try:
return datetime.strptime(theStamp, nwConst.FMT_TSTAMP).timestamp()
except Exception:
return default
# =============================================================================================== # # =============================================================================================== #
# String Functions # String Functions
# =============================================================================================== # # =============================================================================================== #
+40 -23
View File
@@ -139,24 +139,32 @@ class NWItem():
def packXML(self, xParent): def packXML(self, xParent):
"""Pack all the data in the class instance into an XML object. """Pack all the data in the class instance into an XML object.
""" """
xPack = etree.SubElement(xParent, "item", attrib={ itemAttrib = {}
"handle": str(self._handle), itemAttrib["handle"] = str(self._handle)
"order": str(self._order), itemAttrib["parent"] = str(self._parent)
"parent": str(self._parent), itemAttrib["order"] = str(self._order)
}) itemAttrib["type"] = str(self._type.name)
self._subPack(xPack, "name", text=str(self._name)) itemAttrib["class"] = str(self._class.name)
self._subPack(xPack, "type", text=str(self._type.name))
self._subPack(xPack, "class", text=str(self._class.name))
self._subPack(xPack, "status", text=str(self._status))
if self._type == nwItemType.FILE: if self._type == nwItemType.FILE:
self._subPack(xPack, "exported", text=str(self._exported)) itemAttrib["layout"] = str(self._layout.name)
self._subPack(xPack, "layout", text=str(self._layout.name))
self._subPack(xPack, "charCount", text=str(self._charCount), none=False) metaAttrib = {}
self._subPack(xPack, "wordCount", text=str(self._wordCount), none=False) if self._type == nwItemType.FILE:
self._subPack(xPack, "paraCount", text=str(self._paraCount), none=False) metaAttrib["charCount"] = str(self._charCount)
self._subPack(xPack, "cursorPos", text=str(self._cursorPos), none=False) metaAttrib["wordCount"] = str(self._wordCount)
metaAttrib["paraCount"] = str(self._paraCount)
metaAttrib["cursorPos"] = str(self._cursorPos)
else: else:
self._subPack(xPack, "expanded", text=str(self._expanded)) metaAttrib["expanded"] = str(self._expanded)
nameAttrib = {}
nameAttrib["status"] = str(self._status)
if self._type == nwItemType.FILE:
nameAttrib["exported"] = str(self._exported)
xPack = etree.SubElement(xParent, "item", attrib=itemAttrib)
self._subPack(xPack, "meta", attrib=metaAttrib)
self._subPack(xPack, "name", text=str(self._name), attrib=nameAttrib)
return return
@@ -175,19 +183,31 @@ class NWItem():
self.setParent(xItem.attrib.get("parent", None)) self.setParent(xItem.attrib.get("parent", None))
self.setOrder(xItem.attrib.get("order", 0)) self.setOrder(xItem.attrib.get("order", 0))
self.setType(xItem.attrib.get("type", None))
self.setClass(xItem.attrib.get("class", None))
self.setLayout(xItem.attrib.get("layout", None))
tmpStatus = ""
for xValue in xItem: for xValue in xItem:
if xValue.tag == "name": if xValue.tag == "meta":
self.setExpanded(xValue.attrib.get("expanded", False))
self.setCharCount(xValue.attrib.get("charCount", 0))
self.setWordCount(xValue.attrib.get("wordCount", 0))
self.setParaCount(xValue.attrib.get("paraCount", 0))
self.setCursorPos(xValue.attrib.get("cursorPos", 0))
elif xValue.tag == "name":
self.setName(xValue.text) self.setName(xValue.text)
self.setStatus(xValue.attrib.get("status", None))
self.setExported(xValue.attrib.get("exported", True))
# Legacy Format (1.3 and earlier)
elif xValue.tag == "status":
self.setStatus(xValue.text)
elif xValue.tag == "type": elif xValue.tag == "type":
self.setType(xValue.text) self.setType(xValue.text)
elif xValue.tag == "class": elif xValue.tag == "class":
self.setClass(xValue.text) self.setClass(xValue.text)
elif xValue.tag == "layout": elif xValue.tag == "layout":
self.setLayout(xValue.text) self.setLayout(xValue.text)
elif xValue.tag == "status":
tmpStatus = xValue.text
elif xValue.tag == "expanded": elif xValue.tag == "expanded":
self.setExpanded(xValue.text) self.setExpanded(xValue.text)
elif xValue.tag == "exported": elif xValue.tag == "exported":
@@ -206,9 +226,6 @@ class NWItem():
# version of novelWriter that doesn't know the tag # version of novelWriter that doesn't know the tag
logger.error("Unknown tag '%s'", xValue.tag) logger.error("Unknown tag '%s'", xValue.tag)
# Guarantees that <status> is parsed after <class>
self.setStatus(tmpStatus)
return True return True
@staticmethod @staticmethod
+5 -2
View File
@@ -53,7 +53,7 @@ logger = logging.getLogger(__name__)
class NWProject(): class NWProject():
FILE_VERSION = "1.3" FILE_VERSION = "1.4"
def __init__(self, theParent): def __init__(self, theParent):
@@ -479,8 +479,11 @@ class NWProject():
# 1.3 : Reduces the number of layouts to only two. One for novel # 1.3 : Reduces the number of layouts to only two. One for novel
# documents and one for project notes. Introduced in # documents and one for project notes. Introduced in
# version 1.5. # version 1.5.
# 1.4 : Introduces a more compact format for storing items. All
# settings aside from name are now attributes. Introduced
# in version 1.7.
if fileVersion not in ("1.0", "1.1", "1.2", "1.3"): if fileVersion not in ("1.0", "1.1", "1.2", "1.3", "1.4"):
self.theParent.makeAlert(self.tr( self.theParent.makeAlert(self.tr(
"Unknown or unsupported novelWriter project file format. " "Unknown or unsupported novelWriter project file format. "
"The project cannot be opened by this version of novelWriter. " "The project cannot be opened by this version of novelWriter. "
+1 -1
View File
@@ -330,7 +330,7 @@ class ToOdt(Tokenizer):
# Meta Data # Meta Data
xMeta = etree.SubElement(self._xMeta, _mkTag("meta", "creation-date")) xMeta = etree.SubElement(self._xMeta, _mkTag("meta", "creation-date"))
xMeta.text = datetime.now().strftime(r"%Y-%m-%dT%H:%M:%S") xMeta.text = datetime.now().isoformat(sep="T", timespec="seconds")
xMeta = etree.SubElement(self._xMeta, _mkTag("meta", "generator")) xMeta = etree.SubElement(self._xMeta, _mkTag("meta", "generator"))
xMeta.text = f"novelWriter/{novelwriter.__version__}" xMeta.text = f"novelWriter/{novelwriter.__version__}"
+2 -6
View File
@@ -457,12 +457,8 @@ class GuiWritingStats(QDialog):
if len(inData) < 6: if len(inData) < 6:
continue continue
dStart = datetime.strptime( dStart = datetime.fromisoformat(" ".join(inData[0:2]))
"%s %s" % (inData[0], inData[1]), nwConst.FMT_TSTAMP dEnd = datetime.fromisoformat(" ".join(inData[2:4]))
)
dEnd = datetime.strptime(
"%s %s" % (inData[2], inData[3]), nwConst.FMT_TSTAMP
)
sIdle = 0 sIdle = 0
if len(inData) > 6: if len(inData) > 6:
+78 -238
View File
@@ -1,13 +1,13 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.6.2" hexVersion="0x010602f0" fileVersion="1.3" timeStamp="2022-03-20 15:40:34"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:55:50">
<project> <project>
<name>Sample Project</name> <name>Sample Project</name>
<title>Sample Project</title> <title>Sample Project</title>
<author>Jane Smith</author> <author>Jane Smith</author>
<author>Jay Doh</author> <author>Jay Doh</author>
<saveCount>1302</saveCount> <saveCount>1303</saveCount>
<autoCount>199</autoCount> <autoCount>199</autoCount>
<editTime>64999</editTime> <editTime>64457</editTime>
</project> </project>
<settings> <settings>
<doBackup>False</doBackup> <doBackup>False</doBackup>
@@ -49,265 +49,105 @@
</importance> </importance>
</settings> </settings>
<content count="25"> <content count="25">
<item handle="7031beac91f75" order="0" parent="None"> <item handle="7031beac91f75" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="True"/>
<type>ROOT</type> <name status="Started">Novel</name>
<class>NOVEL</class>
<status>Started</status>
<expanded>True</expanded>
</item> </item>
<item handle="53b69b83cdafc" order="0" parent="7031beac91f75"> <item handle="53b69b83cdafc" parent="7031beac91f75" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="93" wordCount="19" paraCount="2" cursorPos="2"/>
<type>FILE</type> <name status="Started" exported="True">Title Page</name>
<class>NOVEL</class>
<status>Started</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>93</charCount>
<wordCount>19</wordCount>
<paraCount>2</paraCount>
<cursorPos>2</cursorPos>
</item> </item>
<item handle="974e400180a99" order="1" parent="7031beac91f75"> <item handle="974e400180a99" parent="7031beac91f75" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Page</name> <meta charCount="186" wordCount="39" paraCount="2" cursorPos="212"/>
<type>FILE</type> <name status="New" exported="True">Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>186</charCount>
<wordCount>39</wordCount>
<paraCount>2</paraCount>
<cursorPos>212</cursorPos>
</item> </item>
<item handle="edca4be2fcaf8" order="2" parent="7031beac91f75"> <item handle="edca4be2fcaf8" parent="7031beac91f75" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Part One</name> <meta charCount="26" wordCount="6" paraCount="1" cursorPos="33"/>
<type>FILE</type> <name status="New" exported="True">Part One</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>26</charCount>
<wordCount>6</wordCount>
<paraCount>1</paraCount>
<cursorPos>33</cursorPos>
</item> </item>
<item handle="e7ded148d6e4a" order="3" parent="7031beac91f75"> <item handle="e7ded148d6e4a" parent="7031beac91f75" order="3" type="FOLDER" class="NOVEL">
<name>A Folder</name> <meta expanded="True"/>
<type>FOLDER</type> <name status="1st Draft">A Folder</name>
<class>NOVEL</class>
<status>1st Draft</status>
<expanded>True</expanded>
</item> </item>
<item handle="6a2d6d5f4f401" order="0" parent="e7ded148d6e4a"> <item handle="6a2d6d5f4f401" parent="e7ded148d6e4a" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Chapter One</name> <meta charCount="75" wordCount="14" paraCount="1" cursorPos="279"/>
<type>FILE</type> <name status="Notes" exported="True">Chapter One</name>
<class>NOVEL</class>
<status>Notes</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>75</charCount>
<wordCount>14</wordCount>
<paraCount>1</paraCount>
<cursorPos>279</cursorPos>
</item> </item>
<item handle="636b6aa9b697b" order="1" parent="e7ded148d6e4a"> <item handle="636b6aa9b697b" parent="e7ded148d6e4a" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Making a Scene</name> <meta charCount="2429" wordCount="432" paraCount="14" cursorPos="219"/>
<type>FILE</type> <name status="1st Draft" exported="True">Making a Scene</name>
<class>NOVEL</class>
<status>1st Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>2429</charCount>
<wordCount>432</wordCount>
<paraCount>14</paraCount>
<cursorPos>219</cursorPos>
</item> </item>
<item handle="bc0cbd2a407f3" order="2" parent="e7ded148d6e4a"> <item handle="bc0cbd2a407f3" parent="e7ded148d6e4a" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Another Scene</name> <meta charCount="476" wordCount="93" paraCount="3" cursorPos="577"/>
<type>FILE</type> <name status="1st Draft" exported="True">Another Scene</name>
<class>NOVEL</class>
<status>1st Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>476</charCount>
<wordCount>93</wordCount>
<paraCount>3</paraCount>
<cursorPos>577</cursorPos>
</item> </item>
<item handle="ba8a28a246524" order="3" parent="e7ded148d6e4a"> <item handle="ba8a28a246524" parent="e7ded148d6e4a" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Interlude</name> <meta charCount="617" wordCount="101" paraCount="3" cursorPos="4"/>
<type>FILE</type> <name status="New" exported="True">Interlude</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>617</charCount>
<wordCount>101</wordCount>
<paraCount>3</paraCount>
<cursorPos>4</cursorPos>
</item> </item>
<item handle="96b68994dfa3d" order="4" parent="e7ded148d6e4a"> <item handle="96b68994dfa3d" parent="e7ded148d6e4a" order="4" type="FILE" class="NOVEL" layout="NOTE">
<name>A Note on Structure</name> <meta charCount="1692" wordCount="313" paraCount="6" cursorPos="1110"/>
<type>FILE</type> <name status="2nd Draft" exported="False">A Note on Structure</name>
<class>NOVEL</class>
<status>2nd Draft</status>
<exported>False</exported>
<layout>NOTE</layout>
<charCount>1692</charCount>
<wordCount>313</wordCount>
<paraCount>6</paraCount>
<cursorPos>1110</cursorPos>
</item> </item>
<item handle="88706ddc78b1b" order="5" parent="e7ded148d6e4a"> <item handle="88706ddc78b1b" parent="e7ded148d6e4a" order="5" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Chapter Two</name> <meta charCount="139" wordCount="28" paraCount="1" cursorPos="343"/>
<type>FILE</type> <name status="1st Draft" exported="True">Chapter Two</name>
<class>NOVEL</class>
<status>1st Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>139</charCount>
<wordCount>28</wordCount>
<paraCount>1</paraCount>
<cursorPos>343</cursorPos>
</item> </item>
<item handle="ae7339df26ded" order="6" parent="e7ded148d6e4a"> <item handle="ae7339df26ded" parent="e7ded148d6e4a" order="6" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>We Found John!</name> <meta charCount="189" wordCount="37" paraCount="1" cursorPos="224"/>
<type>FILE</type> <name status="1st Draft" exported="True">We Found John!</name>
<class>NOVEL</class>
<status>1st Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>189</charCount>
<wordCount>37</wordCount>
<paraCount>1</paraCount>
<cursorPos>224</cursorPos>
</item> </item>
<item handle="f6622b4617424" order="1" parent="None"> <item handle="f6622b4617424" parent="None" order="1" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="True"/>
<type>ROOT</type> <name status="None">Characters</name>
<class>CHARACTER</class>
<status>None</status>
<expanded>True</expanded>
</item> </item>
<item handle="f7e2d9f330615" order="0" parent="f6622b4617424"> <item handle="f7e2d9f330615" parent="f6622b4617424" order="0" type="FOLDER" class="CHARACTER">
<name>Main Characters</name> <meta expanded="True"/>
<type>FOLDER</type> <name status="None">Main Characters</name>
<class>CHARACTER</class>
<status>None</status>
<expanded>True</expanded>
</item> </item>
<item handle="14298de4d9524" order="0" parent="f7e2d9f330615"> <item handle="14298de4d9524" parent="f7e2d9f330615" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<name>John Smith</name> <meta charCount="49" wordCount="9" paraCount="1" cursorPos="24"/>
<type>FILE</type> <name status="Minor" exported="True">John Smith</name>
<class>CHARACTER</class>
<status>Minor</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>49</charCount>
<wordCount>9</wordCount>
<paraCount>1</paraCount>
<cursorPos>24</cursorPos>
</item> </item>
<item handle="bb2c23b3c42cc" order="1" parent="f7e2d9f330615"> <item handle="bb2c23b3c42cc" parent="f7e2d9f330615" order="1" type="FILE" class="CHARACTER" layout="NOTE">
<name>Jane Smith</name> <meta charCount="55" wordCount="9" paraCount="1" cursorPos="25"/>
<type>FILE</type> <name status="Major" exported="True">Jane Smith</name>
<class>CHARACTER</class>
<status>Major</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>55</charCount>
<wordCount>9</wordCount>
<paraCount>1</paraCount>
<cursorPos>25</cursorPos>
</item> </item>
<item handle="15c4492bd5107" order="2" parent="None"> <item handle="15c4492bd5107" parent="None" order="2" type="ROOT" class="WORLD">
<name>Locations</name> <meta expanded="True"/>
<type>ROOT</type> <name status="None">Locations</name>
<class>WORLD</class>
<status>None</status>
<expanded>True</expanded>
</item> </item>
<item handle="b3e74dbc1f584" order="0" parent="15c4492bd5107"> <item handle="b3e74dbc1f584" parent="15c4492bd5107" order="0" type="FILE" class="WORLD" layout="NOTE">
<name>Earth</name> <meta charCount="76" wordCount="15" paraCount="1" cursorPos="20"/>
<type>FILE</type> <name status="Main" exported="True">Earth</name>
<class>WORLD</class>
<status>Main</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>76</charCount>
<wordCount>15</wordCount>
<paraCount>1</paraCount>
<cursorPos>20</cursorPos>
</item> </item>
<item handle="f1471bef9f2ae" order="1" parent="15c4492bd5107"> <item handle="f1471bef9f2ae" parent="15c4492bd5107" order="1" type="FILE" class="WORLD" layout="NOTE">
<name>Space</name> <meta charCount="115" wordCount="24" paraCount="1" cursorPos="133"/>
<type>FILE</type> <name status="Minor" exported="True">Space</name>
<class>WORLD</class>
<status>Minor</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>115</charCount>
<wordCount>24</wordCount>
<paraCount>1</paraCount>
<cursorPos>133</cursorPos>
</item> </item>
<item handle="5eaea4e8cdee8" order="2" parent="15c4492bd5107"> <item handle="5eaea4e8cdee8" parent="15c4492bd5107" order="2" type="FILE" class="WORLD" layout="NOTE">
<name>Mars</name> <meta charCount="28" wordCount="6" paraCount="1" cursorPos="45"/>
<type>FILE</type> <name status="Major" exported="True">Mars</name>
<class>WORLD</class>
<status>Major</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>28</charCount>
<wordCount>6</wordCount>
<paraCount>1</paraCount>
<cursorPos>45</cursorPos>
</item> </item>
<item handle="6827118336ac1" order="3" parent="None"> <item handle="6827118336ac1" parent="None" order="3" type="ROOT" class="ARCHIVE">
<name>Archive</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Archive</name>
<class>ARCHIVE</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="ae9bf3c3ea159" order="0" parent="6827118336ac1"> <item handle="ae9bf3c3ea159" parent="6827118336ac1" order="0" type="FOLDER" class="ARCHIVE">
<name>Scenes</name> <meta expanded="True"/>
<type>FOLDER</type> <name status="New">Scenes</name>
<class>ARCHIVE</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="8a5deb88c0e97" order="0" parent="ae9bf3c3ea159"> <item handle="8a5deb88c0e97" parent="ae9bf3c3ea159" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Old File</name> <meta charCount="315" wordCount="55" paraCount="1" cursorPos="322"/>
<type>FILE</type> <name status="1st Draft" exported="True">Old File</name>
<class>NOVEL</class>
<status>1st Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>315</charCount>
<wordCount>55</wordCount>
<paraCount>1</paraCount>
<cursorPos>322</cursorPos>
</item> </item>
<item handle="98acd8c76c93a" order="4" parent="None"> <item handle="98acd8c76c93a" parent="None" order="4" type="TRASH" class="TRASH">
<name>Trash</name> <meta expanded="True"/>
<type>TRASH</type> <name status="None">Trash</name>
<class>TRASH</class>
<status>None</status>
<expanded>True</expanded>
</item> </item>
<item handle="b8136a5a774a0" order="0" parent="98acd8c76c93a"> <item handle="b8136a5a774a0" parent="98acd8c76c93a" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Delete Me!</name> <meta charCount="30" wordCount="6" paraCount="1" cursorPos="36"/>
<type>FILE</type> <name status="New" exported="True">Delete Me!</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>30</charCount>
<wordCount>6</wordCount>
<paraCount>1</paraCount>
<cursorPos>36</cursorPos>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
+2 -3
View File
@@ -11,7 +11,6 @@ license_file = LICENSE.md
license = GNU General Public License v3 license = GNU General Public License v3
classifiers = classifiers =
Programming Language :: Python :: 3 :: Only Programming Language :: Python :: 3 :: Only
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.9
@@ -29,7 +28,7 @@ project_urls =
Source Code = https://github.com/vkbo/novelWriter Source Code = https://github.com/vkbo/novelWriter
[options] [options]
python_requires = >=3.6 python_requires = >=3.7
include_package_data = True include_package_data = True
packages = find: packages = find:
install_requires = install_requires =
@@ -50,6 +49,6 @@ gui_scripts =
universal = 0 universal = 0
[flake8] [flake8]
ignore = E221,E226,E228,E241 ignore = E133,E221,E226,E228,E241,W503
max-line-length = 99 max-line-length = 99
exclude = docs/* exclude = docs/*
-1
View File
@@ -786,7 +786,6 @@ def makeForLaunchpad(doSign=False, isFirst=False, isSnapshot=False):
bldNum = "0" bldNum = "0"
distLoop = [ distLoop = [
("18.04", "bionic"),
("20.04", "focal"), ("20.04", "focal"),
("21.10", "impish"), ("21.10", "impish"),
("22.04", "jammy"), ("22.04", "jammy"),
+3 -3
View File
@@ -2,14 +2,14 @@ Source: novelwriter
Maintainer: Veronica Berglyd Olsen <code@vkbo.net> Maintainer: Veronica Berglyd Olsen <code@vkbo.net>
Section: text Section: text
Priority: optional Priority: optional
Build-Depends: dh-python, python3-setuptools, python3-all, debhelper (>= 9), python3 (>=3.6), python3-pyqt5 (>= 5.3), python3-lxml (>= 4.0), python3-enchant (>= 2.0) Build-Depends: dh-python, python3-setuptools, python3-all, debhelper (>= 9), python3 (>=3.7), python3-pyqt5 (>= 5.3), python3-lxml (>= 4.0), python3-enchant (>= 2.0)
Standards-Version: 4.5.1 Standards-Version: 4.5.1
Homepage: https://novelwriter.io Homepage: https://novelwriter.io
X-Python3-Version: >= 3.6 X-Python3-Version: >= 3.7
Package: novelwriter Package: novelwriter
Architecture: all Architecture: all
Depends: ${misc:Depends}, ${python3:Depends}, python3 (>=3.6), python3-pyqt5 (>= 5.3), python3-lxml (>= 4.0), python3-enchant (>= 2.0) Depends: ${misc:Depends}, ${python3:Depends}, python3 (>=3.7), python3-pyqt5 (>= 5.3), python3-lxml (>= 4.0), python3-enchant (>= 2.0)
Description: A markdown-like text editor for planning and writing novels Description: A markdown-like text editor for planning and writing novels
novelWriter is a plain text editor designed for writing novels assembled from novelWriter is a plain text editor designed for writing novels assembled from
many smaller text documents. It uses a minimal formatting syntax inspired by many smaller text documents. It uses a minimal formatting syntax inspired by
+3 -3
View File
@@ -10,9 +10,9 @@ synchronisation tools. All text is saved as plain text files with a meta data he
project structure is stored in a single project XML file, and other meta data is primarily saved as project structure is stored in a single project XML file, and other meta data is primarily saved as
JSON files. JSON files.
The application is written in Python 3 (3.6+) using Qt5 and PyQt5 (5.3+). It is developed on Linux, The application is written with Python 3 (3.7+) using Qt5 and PyQt5 (5.3+). It is developed on
but should in principle work fine on other operating systems as well as long as dependencies are Linux, but should in principle work fine on other operating systems as well as long as dependencies
met. It is regularly tested on Debian and Ubuntu Linux, Windows, and macOS. are met. It is regularly tested on Debian and Ubuntu Linux, Windows, and macOS.
novelWriter is developed and maintained by [Veronica Berglyd Olsen](https://github.com/vkbo). novelWriter is developed and maintained by [Veronica Berglyd Olsen](https://github.com/vkbo).
+66 -204
View File
@@ -1,12 +1,12 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.3" timeStamp="2021-08-02 17:47:39"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 22:04:38">
<project> <project>
<name>Lorem Ipsum</name> <name>Lorem Ipsum</name>
<title>Lorem Ipsum</title> <title>Lorem Ipsum</title>
<author>lipsum.com</author> <author>lipsum.com</author>
<saveCount>17</saveCount> <saveCount>21</saveCount>
<autoCount>24</autoCount> <autoCount>24</autoCount>
<editTime>1777</editTime> <editTime>1847</editTime>
</project> </project>
<settings> <settings>
<doBackup>False</doBackup> <doBackup>False</doBackup>
@@ -44,227 +44,89 @@
</importance> </importance>
</settings> </settings>
<content count="21"> <content count="21">
<item handle="b3643d0f92e32" order="0" parent="None"> <item handle="b3643d0f92e32" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="7a992350f3eb6" order="0" parent="b3643d0f92e32"> <item handle="7a992350f3eb6" parent="b3643d0f92e32" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Lorem Ipsum</name> <meta charCount="230" wordCount="40" paraCount="3" cursorPos="148"/>
<type>FILE</type> <name status="Finished" exported="True">Lorem Ipsum</name>
<class>NOVEL</class>
<status>Finished</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>230</charCount>
<wordCount>40</wordCount>
<paraCount>3</paraCount>
<cursorPos>148</cursorPos>
</item> </item>
<item handle="8c58a65414c23" order="1" parent="b3643d0f92e32"> <item handle="8c58a65414c23" parent="b3643d0f92e32" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Front Matter</name> <meta charCount="1058" wordCount="176" paraCount="2" cursorPos="43"/>
<type>FILE</type> <name status="Finished" exported="True">Front Matter</name>
<class>NOVEL</class>
<status>Finished</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>1058</charCount>
<wordCount>176</wordCount>
<paraCount>2</paraCount>
<cursorPos>43</cursorPos>
</item> </item>
<item handle="88d59a277361b" order="2" parent="b3643d0f92e32"> <item handle="88d59a277361b" parent="b3643d0f92e32" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Prologue</name> <meta charCount="584" wordCount="92" paraCount="1" cursorPos="4"/>
<type>FILE</type> <name status="Draft" exported="True">Prologue</name>
<class>NOVEL</class>
<status>Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>584</charCount>
<wordCount>92</wordCount>
<paraCount>1</paraCount>
<cursorPos>4</cursorPos>
</item> </item>
<item handle="db7e733775d4d" order="3" parent="b3643d0f92e32"> <item handle="db7e733775d4d" parent="b3643d0f92e32" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Act One</name> <meta charCount="35" wordCount="6" paraCount="1" cursorPos="42"/>
<type>FILE</type> <name status="New" exported="True">Act One</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>35</charCount>
<wordCount>6</wordCount>
<paraCount>1</paraCount>
<cursorPos>42</cursorPos>
</item> </item>
<item handle="45e6b01ca35c1" order="4" parent="b3643d0f92e32"> <item handle="45e6b01ca35c1" parent="b3643d0f92e32" order="4" type="FOLDER" class="NOVEL">
<name>Chapter One</name> <meta expanded="True"/>
<type>FOLDER</type> <name status="Draft">Chapter One</name>
<class>NOVEL</class>
<status>Draft</status>
<expanded>True</expanded>
</item> </item>
<item handle="fb609cd8319dc" order="0" parent="45e6b01ca35c1"> <item handle="fb609cd8319dc" parent="45e6b01ca35c1" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Chapter One</name> <meta charCount="419" wordCount="67" paraCount="1" cursorPos="56"/>
<type>FILE</type> <name status="Draft" exported="True">Chapter One</name>
<class>NOVEL</class>
<status>Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>419</charCount>
<wordCount>67</wordCount>
<paraCount>1</paraCount>
<cursorPos>56</cursorPos>
</item> </item>
<item handle="88243afbe5ed8" order="1" parent="45e6b01ca35c1"> <item handle="88243afbe5ed8" parent="45e6b01ca35c1" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene One</name> <meta charCount="2758" wordCount="404" paraCount="4" cursorPos="1528"/>
<type>FILE</type> <name status="Finished" exported="True">Scene One</name>
<class>NOVEL</class>
<status>Finished</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>2758</charCount>
<wordCount>404</wordCount>
<paraCount>4</paraCount>
<cursorPos>1528</cursorPos>
</item> </item>
<item handle="f96ec11c6a3da" order="2" parent="45e6b01ca35c1"> <item handle="f96ec11c6a3da" parent="45e6b01ca35c1" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene Two</name> <meta charCount="4043" wordCount="600" paraCount="6" cursorPos="2335"/>
<type>FILE</type> <name status="Finished" exported="True">Scene Two</name>
<class>NOVEL</class>
<status>Finished</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>4043</charCount>
<wordCount>600</wordCount>
<paraCount>6</paraCount>
<cursorPos>2335</cursorPos>
</item> </item>
<item handle="846352075de7d" order="5" parent="b3643d0f92e32"> <item handle="846352075de7d" parent="b3643d0f92e32" order="5" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Interlude</name> <meta charCount="631" wordCount="109" paraCount="3" cursorPos="376"/>
<type>FILE</type> <name status="New" exported="False">Interlude</name>
<class>NOVEL</class>
<status>New</status>
<exported>False</exported>
<layout>DOCUMENT</layout>
<charCount>631</charCount>
<wordCount>109</wordCount>
<paraCount>3</paraCount>
<cursorPos>376</cursorPos>
</item> </item>
<item handle="6bd935d2490cd" order="6" parent="b3643d0f92e32"> <item handle="6bd935d2490cd" parent="b3643d0f92e32" order="6" type="FOLDER" class="NOVEL">
<name>Chapter Two</name> <meta expanded="True"/>
<type>FOLDER</type> <name status="Draft">Chapter Two</name>
<class>NOVEL</class>
<status>Draft</status>
<expanded>True</expanded>
</item> </item>
<item handle="441420a886d82" order="0" parent="6bd935d2490cd"> <item handle="441420a886d82" parent="6bd935d2490cd" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Chapter Two</name> <meta charCount="477" wordCount="70" paraCount="1" cursorPos="56"/>
<type>FILE</type> <name status="Draft" exported="True">Chapter Two</name>
<class>NOVEL</class>
<status>Draft</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>477</charCount>
<wordCount>70</wordCount>
<paraCount>1</paraCount>
<cursorPos>56</cursorPos>
</item> </item>
<item handle="eb103bc70c90c" order="1" parent="6bd935d2490cd"> <item handle="eb103bc70c90c" parent="6bd935d2490cd" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene Three</name> <meta charCount="3006" wordCount="439" paraCount="4" cursorPos="57"/>
<type>FILE</type> <name status="Finished" exported="True">Scene Three</name>
<class>NOVEL</class>
<status>Finished</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>3006</charCount>
<wordCount>439</wordCount>
<paraCount>4</paraCount>
<cursorPos>57</cursorPos>
</item> </item>
<item handle="f8c0562e50f1b" order="2" parent="6bd935d2490cd"> <item handle="f8c0562e50f1b" parent="6bd935d2490cd" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene Four</name> <meta charCount="3839" wordCount="563" paraCount="6" cursorPos="56"/>
<type>FILE</type> <name status="Finished" exported="True">Scene Four</name>
<class>NOVEL</class>
<status>Finished</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>3839</charCount>
<wordCount>563</wordCount>
<paraCount>6</paraCount>
<cursorPos>56</cursorPos>
</item> </item>
<item handle="47666c91c7ccf" order="3" parent="6bd935d2490cd"> <item handle="47666c91c7ccf" parent="6bd935d2490cd" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene Five</name> <meta charCount="3644" wordCount="543" paraCount="5" cursorPos="351"/>
<type>FILE</type> <name status="Finished" exported="True">Scene Five</name>
<class>NOVEL</class>
<status>Finished</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>3644</charCount>
<wordCount>543</wordCount>
<paraCount>5</paraCount>
<cursorPos>351</cursorPos>
</item> </item>
<item handle="67a8707f2f249" order="1" parent="None"> <item handle="67a8707f2f249" parent="None" order="1" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="4c4f28287af27" order="0" parent="67a8707f2f249"> <item handle="4c4f28287af27" parent="67a8707f2f249" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<name>Mr. Nobody</name> <meta charCount="1864" wordCount="284" paraCount="3" cursorPos="1883"/>
<type>FILE</type> <name status="Major" exported="True">Mr. Nobody</name>
<class>CHARACTER</class>
<status>Major</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>1864</charCount>
<wordCount>284</wordCount>
<paraCount>3</paraCount>
<cursorPos>1883</cursorPos>
</item> </item>
<item handle="6c6afb1247750" order="2" parent="None"> <item handle="6c6afb1247750" parent="None" order="2" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="2426c6f0ca922" order="0" parent="6c6afb1247750"> <item handle="2426c6f0ca922" parent="6c6afb1247750" order="0" type="FILE" class="PLOT" layout="NOTE">
<name>Main</name> <meta charCount="1369" wordCount="195" paraCount="2" cursorPos="1387"/>
<type>FILE</type> <name status="Main" exported="True">Main</name>
<class>PLOT</class>
<status>Main</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>1369</charCount>
<wordCount>195</wordCount>
<paraCount>2</paraCount>
<cursorPos>1387</cursorPos>
</item> </item>
<item handle="60bdf227455cc" order="3" parent="None"> <item handle="60bdf227455cc" parent="None" order="3" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="04468803b92e1" order="0" parent="60bdf227455cc"> <item handle="04468803b92e1" parent="60bdf227455cc" order="0" type="FILE" class="WORLD" layout="NOTE">
<name>Ancient Europe</name> <meta charCount="1770" wordCount="259" paraCount="3" cursorPos="1792"/>
<type>FILE</type> <name status="Minor" exported="True">Ancient Europe</name>
<class>WORLD</class>
<status>Minor</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>1770</charCount>
<wordCount>259</wordCount>
<paraCount>3</paraCount>
<cursorPos>1792</cursorPos>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
+27 -66
View File
@@ -1,13 +1,13 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.3" timeStamp="2021-08-02 17:47:26"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:21">
<project> <project>
<name>Test Minimal</name> <name>Test Minimal</name>
<title>Minimal</title> <title>Minimal</title>
<author>Jane Doe</author> <author>Jane Doe</author>
<author>John Doh</author> <author>John Doh</author>
<saveCount>9</saveCount> <saveCount>12</saveCount>
<autoCount>2</autoCount> <autoCount>2</autoCount>
<editTime>113</editTime> <editTime>129</editTime>
</project> </project>
<settings> <settings>
<doBackup>True</doBackup> <doBackup>True</doBackup>
@@ -42,76 +42,37 @@
</importance> </importance>
</settings> </settings>
<content count="8"> <content count="8">
<item handle="a508bb932959c" order="0" parent="None"> <item handle="a508bb932959c" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="a35baf2e93843" order="0" parent="a508bb932959c"> <item handle="a35baf2e93843" parent="a508bb932959c" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="28" wordCount="6" paraCount="1" cursorPos="33"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>28</charCount>
<wordCount>6</wordCount>
<paraCount>1</paraCount>
<cursorPos>33</cursorPos>
</item> </item>
<item handle="a6d311a93600a" order="1" parent="a508bb932959c"> <item handle="a6d311a93600a" parent="a508bb932959c" order="1" type="FOLDER" class="NOVEL">
<name>New Chapter</name> <meta expanded="True"/>
<type>FOLDER</type> <name status="New">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="f5ab3e30151e1" order="0" parent="a6d311a93600a"> <item handle="f5ab3e30151e1" parent="a6d311a93600a" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Chapter</name> <meta charCount="11" wordCount="2" paraCount="0" cursorPos="16"/>
<type>FILE</type> <name status="New" exported="True">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>11</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>16</cursorPos>
</item> </item>
<item handle="8c659a11cd429" order="1" parent="a6d311a93600a"> <item handle="8c659a11cd429" parent="a6d311a93600a" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Scene</name> <meta charCount="9" wordCount="2" paraCount="0" cursorPos="15"/>
<type>FILE</type> <name status="New" exported="True">New Scene</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>9</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>15</cursorPos>
</item> </item>
<item handle="7695ce551d265" order="1" parent="None"> <item handle="7695ce551d265" parent="None" order="1" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="afb3043c7b2b3" order="2" parent="None"> <item handle="afb3043c7b2b3" parent="None" order="2" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="9d5247ab588e0" order="3" parent="None"> <item handle="9d5247ab588e0" parent="None" order="3" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.2" timeStamp="2021-08-02 02:30:49"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:31">
<project> <project>
<name>Test Custom</name> <name>Test Custom</name>
<title>Test Novel</title> <title>Test Novel</title>
@@ -42,231 +42,97 @@
</importance> </importance>
</settings> </settings>
<content count="23"> <content count="23">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="0" parent="None"> <item handle="44cb730c42048" parent="None" order="0" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="0" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="0" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="0" parent="None"> <item handle="811786ad1ae74" parent="None" order="0" type="ROOT" class="WORLD">
<name>Locations</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Locations</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="None"> <item handle="25fc0e7096fc6" parent="None" order="0" type="ROOT" class="TIMELINE">
<name>Timeline</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Timeline</name>
<class>TIMELINE</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="31489056e0916" order="0" parent="None"> <item handle="31489056e0916" parent="None" order="0" type="ROOT" class="OBJECT">
<name>Objects</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Objects</name>
<class>OBJECT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="None"> <item handle="98010bd9270f9" parent="None" order="0" type="ROOT" class="ENTITY">
<name>Entities</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Entities</name>
<class>ENTITY</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="0e17daca5f3e1" order="0" parent="73475cb40a568"> <item handle="0e17daca5f3e1" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="0" parent="73475cb40a568"> <item handle="1a6562590ef19" parent="73475cb40a568" order="0" type="FOLDER" class="NOVEL">
<name>Chapter 1</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">Chapter 1</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="031b4af5197ec" order="0" parent="1a6562590ef19"> <item handle="031b4af5197ec" parent="1a6562590ef19" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Chapter 1</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Chapter 1</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="41cfc0d1f2d12" order="0" parent="1a6562590ef19"> <item handle="41cfc0d1f2d12" parent="1a6562590ef19" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 1.1</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 1.1</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="2858dcd1057d3" order="0" parent="1a6562590ef19"> <item handle="2858dcd1057d3" parent="1a6562590ef19" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 1.2</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 1.2</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="2fca346db6561" order="0" parent="1a6562590ef19"> <item handle="2fca346db6561" parent="1a6562590ef19" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 1.3</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 1.3</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="02d20bbd7e394" order="0" parent="73475cb40a568"> <item handle="02d20bbd7e394" parent="73475cb40a568" order="0" type="FOLDER" class="NOVEL">
<name>Chapter 2</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">Chapter 2</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="7688b6ef52555" order="0" parent="02d20bbd7e394"> <item handle="7688b6ef52555" parent="02d20bbd7e394" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Chapter 2</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Chapter 2</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="c837649cce43f" order="0" parent="02d20bbd7e394"> <item handle="c837649cce43f" parent="02d20bbd7e394" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 2.1</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 2.1</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="6208ef0f7750c" order="0" parent="02d20bbd7e394"> <item handle="6208ef0f7750c" parent="02d20bbd7e394" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 2.2</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 2.2</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="3e1e967e9b793" order="0" parent="02d20bbd7e394"> <item handle="3e1e967e9b793" parent="02d20bbd7e394" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 2.3</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 2.3</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="39fa9ec190eee" order="0" parent="73475cb40a568"> <item handle="39fa9ec190eee" parent="73475cb40a568" order="0" type="FOLDER" class="NOVEL">
<name>Chapter 3</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">Chapter 3</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="d029fa3a95e17" order="0" parent="39fa9ec190eee"> <item handle="d029fa3a95e17" parent="39fa9ec190eee" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Chapter 3</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Chapter 3</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="81b8a03f97e87" order="0" parent="39fa9ec190eee"> <item handle="81b8a03f97e87" parent="39fa9ec190eee" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 3.1</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 3.1</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="da4ea2a5506f2" order="0" parent="39fa9ec190eee"> <item handle="da4ea2a5506f2" parent="39fa9ec190eee" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 3.2</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 3.2</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="a68b412c42825" order="0" parent="39fa9ec190eee"> <item handle="a68b412c42825" parent="39fa9ec190eee" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 3.3</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 3.3</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.2" timeStamp="2021-08-02 02:29:34"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:31">
<project> <project>
<name>Test Custom</name> <name>Test Custom</name>
<title>Test Novel</title> <title>Test Novel</title>
@@ -42,138 +42,61 @@
</importance> </importance>
</settings> </settings>
<content count="14"> <content count="14">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="0" parent="None"> <item handle="44cb730c42048" parent="None" order="0" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="0" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="0" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="0" parent="None"> <item handle="811786ad1ae74" parent="None" order="0" type="ROOT" class="WORLD">
<name>Locations</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Locations</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="None"> <item handle="25fc0e7096fc6" parent="None" order="0" type="ROOT" class="TIMELINE">
<name>Timeline</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Timeline</name>
<class>TIMELINE</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="31489056e0916" order="0" parent="None"> <item handle="31489056e0916" parent="None" order="0" type="ROOT" class="OBJECT">
<name>Objects</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Objects</name>
<class>OBJECT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="None"> <item handle="98010bd9270f9" parent="None" order="0" type="ROOT" class="ENTITY">
<name>Entities</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Entities</name>
<class>ENTITY</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="0e17daca5f3e1" order="0" parent="73475cb40a568"> <item handle="0e17daca5f3e1" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="0" parent="73475cb40a568"> <item handle="1a6562590ef19" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 1</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 1</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="031b4af5197ec" order="0" parent="73475cb40a568"> <item handle="031b4af5197ec" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 2</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 2</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="41cfc0d1f2d12" order="0" parent="73475cb40a568"> <item handle="41cfc0d1f2d12" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 3</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 3</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="2858dcd1057d3" order="0" parent="73475cb40a568"> <item handle="2858dcd1057d3" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 4</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 4</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="2fca346db6561" order="0" parent="73475cb40a568"> <item handle="2fca346db6561" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 5</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 5</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="02d20bbd7e394" order="0" parent="73475cb40a568"> <item handle="02d20bbd7e394" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Scene 6</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Scene 6</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.2" timeStamp="2021-08-02 02:28:30"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:32">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title></title> <title></title>
@@ -40,100 +40,45 @@
</importance> </importance>
</settings> </settings>
<content count="10"> <content count="10">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="0" parent="None"> <item handle="44cb730c42048" parent="None" order="0" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="0" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="0" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="0" parent="None"> <item handle="811786ad1ae74" parent="None" order="0" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="73475cb40a568"> <item handle="25fc0e7096fc6" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="0" parent="73475cb40a568"> <item handle="31489056e0916" parent="73475cb40a568" order="0" type="FOLDER" class="NOVEL">
<name>New Chapter</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="31489056e0916"> <item handle="98010bd9270f9" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Chapter</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="0" parent="31489056e0916"> <item handle="0e17daca5f3e1" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Scene</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Scene</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="0" parent="31489056e0916"> <item handle="1a6562590ef19" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Hello</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Hello</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="031b4af5197ec" order="0" parent="71ee45a3c0db9"> <item handle="031b4af5197ec" parent="71ee45a3c0db9" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<name>Jane</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Jane</name>
<class>CHARACTER</class>
<status>New</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.2" timeStamp="2021-08-02 02:31:23"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:31">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title></title> <title></title>
@@ -40,76 +40,37 @@
</importance> </importance>
</settings> </settings>
<content count="8"> <content count="8">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="0" parent="None"> <item handle="44cb730c42048" parent="None" order="0" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="0" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="0" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="0" parent="None"> <item handle="811786ad1ae74" parent="None" order="0" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="73475cb40a568"> <item handle="25fc0e7096fc6" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="0" parent="73475cb40a568"> <item handle="31489056e0916" parent="73475cb40a568" order="0" type="FOLDER" class="NOVEL">
<name>New Chapter</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="31489056e0916"> <item handle="98010bd9270f9" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Chapter</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="0" parent="31489056e0916"> <item handle="0e17daca5f3e1" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Scene</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Scene</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.2" timeStamp="2021-08-02 02:29:01"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:32">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title></title> <title></title>
@@ -40,104 +40,53 @@
</importance> </importance>
</settings> </settings>
<content count="12"> <content count="12">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="0" parent="None"> <item handle="44cb730c42048" parent="None" order="0" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="0" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="0" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="0" parent="None"> <item handle="811786ad1ae74" parent="None" order="0" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="73475cb40a568"> <item handle="25fc0e7096fc6" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="0" parent="73475cb40a568"> <item handle="31489056e0916" parent="73475cb40a568" order="0" type="FOLDER" class="NOVEL">
<name>New Chapter</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="31489056e0916"> <item handle="98010bd9270f9" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Chapter</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="0" parent="31489056e0916"> <item handle="0e17daca5f3e1" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Scene</name> <meta charCount="0" wordCount="0" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Scene</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>0</charCount>
<wordCount>0</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="0" parent="None"> <item handle="1a6562590ef19" parent="None" order="0" type="ROOT" class="TIMELINE">
<name>Timeline</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Timeline</name>
<class>TIMELINE</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="031b4af5197ec" order="0" parent="None"> <item handle="031b4af5197ec" parent="None" order="0" type="ROOT" class="OBJECT">
<name>Object</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Object</name>
<class>OBJECT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="41cfc0d1f2d12" order="0" parent="None"> <item handle="41cfc0d1f2d12" parent="None" order="0" type="ROOT" class="CUSTOM">
<name>Custom1</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Custom1</name>
<class>CUSTOM</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="2858dcd1057d3" order="0" parent="None"> <item handle="2858dcd1057d3" parent="None" order="0" type="ROOT" class="CUSTOM">
<name>Custom2</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Custom2</name>
<class>CUSTOM</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,11 +1,11 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-beta2" hexVersion="0x010500b2" fileVersion="1.3" timeStamp="2021-08-31 00:03:45"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 22:05:03">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title></title> <title></title>
<saveCount>5</saveCount> <saveCount>5</saveCount>
<autoCount>2</autoCount> <autoCount>2</autoCount>
<editTime>4</editTime> <editTime>3</editTime>
</project> </project>
<settings> <settings>
<doBackup>True</doBackup> <doBackup>True</doBackup>
@@ -40,119 +40,53 @@
</importance> </importance>
</settings> </settings>
<content count="12"> <content count="12">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="73475cb40a568"> <item handle="25fc0e7096fc6" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="11" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>11</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="1" parent="73475cb40a568"> <item handle="31489056e0916" parent="73475cb40a568" order="1" type="FOLDER" class="NOVEL">
<name>New Chapter</name> <meta expanded="True"/>
<type>FOLDER</type> <name status="New">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="31489056e0916"> <item handle="98010bd9270f9" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Chapter</name> <meta charCount="11" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>11</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="1" parent="31489056e0916"> <item handle="0e17daca5f3e1" parent="31489056e0916" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Scene</name> <meta charCount="612" wordCount="95" paraCount="10" cursorPos="768"/>
<type>FILE</type> <name status="New" exported="True">New Scene</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>612</charCount>
<wordCount>95</wordCount>
<paraCount>10</paraCount>
<cursorPos>768</cursorPos>
</item> </item>
<item handle="44cb730c42048" order="1" parent="None"> <item handle="44cb730c42048" parent="None" order="1" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="031b4af5197ec" order="0" parent="44cb730c42048"> <item handle="031b4af5197ec" parent="44cb730c42048" order="0" type="FILE" class="PLOT" layout="NOTE">
<name>New File</name> <meta charCount="48" wordCount="10" paraCount="1" cursorPos="69"/>
<type>FILE</type> <name status="New" exported="True">New File</name>
<class>PLOT</class>
<status>New</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>48</charCount>
<wordCount>10</wordCount>
<paraCount>1</paraCount>
<cursorPos>69</cursorPos>
</item> </item>
<item handle="71ee45a3c0db9" order="2" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="2" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="1a6562590ef19" order="0" parent="71ee45a3c0db9"> <item handle="1a6562590ef19" parent="71ee45a3c0db9" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<name>New File</name> <meta charCount="34" wordCount="8" paraCount="1" cursorPos="51"/>
<type>FILE</type> <name status="New" exported="True">New File</name>
<class>CHARACTER</class>
<status>New</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>34</charCount>
<wordCount>8</wordCount>
<paraCount>1</paraCount>
<cursorPos>51</cursorPos>
</item> </item>
<item handle="811786ad1ae74" order="3" parent="None"> <item handle="811786ad1ae74" parent="None" order="3" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="True"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>True</expanded>
</item> </item>
<item handle="41cfc0d1f2d12" order="0" parent="811786ad1ae74"> <item handle="41cfc0d1f2d12" parent="811786ad1ae74" order="0" type="FILE" class="WORLD" layout="NOTE">
<name>New File</name> <meta charCount="51" wordCount="9" paraCount="1" cursorPos="68"/>
<type>FILE</type> <name status="New" exported="True">New File</name>
<class>WORLD</class>
<status>New</status>
<exported>True</exported>
<layout>NOTE</layout>
<charCount>51</charCount>
<wordCount>9</wordCount>
<paraCount>1</paraCount>
<cursorPos>68</cursorPos>
</item> </item>
<item handle="2fca346db6561" order="4" parent="None"> <item handle="2fca346db6561" parent="None" order="4" type="TRASH" class="TRASH">
<name>Trash</name> <meta expanded="True"/>
<type>TRASH</type> <name status="None">Trash</name>
<class>TRASH</class>
<status>None</status>
<expanded>True</expanded>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.2" timeStamp="2021-08-02 02:49:51"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:41">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title></title> <title></title>
@@ -40,76 +40,37 @@
</importance> </importance>
</settings> </settings>
<content count="8"> <content count="8">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="73475cb40a568"> <item handle="25fc0e7096fc6" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="11" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>11</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="1" parent="73475cb40a568"> <item handle="31489056e0916" parent="73475cb40a568" order="1" type="FOLDER" class="NOVEL">
<name>New Chapter</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="31489056e0916"> <item handle="98010bd9270f9" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Chapter</name> <meta charCount="11" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>11</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="1" parent="31489056e0916"> <item handle="0e17daca5f3e1" parent="31489056e0916" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Scene</name> <meta charCount="9" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Scene</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>9</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="44cb730c42048" order="1" parent="None"> <item handle="44cb730c42048" parent="None" order="1" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="2" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="2" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="3" parent="None"> <item handle="811786ad1ae74" parent="None" order="3" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.5-alpha0" hexVersion="0x010500a0" fileVersion="1.2" timeStamp="2021-08-02 03:04:13"> <novelWriterXML appVersion="1.7-alpha0" hexVersion="0x010700a0" fileVersion="1.4" timeStamp="2022-02-17 21:57:36">
<project> <project>
<name>Project Name</name> <name>Project Name</name>
<title>Project Title</title> <title>Project Title</title>
@@ -46,76 +46,37 @@
</importance> </importance>
</settings> </settings>
<content count="8"> <content count="8">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" parent="None" order="0" type="ROOT" class="NOVEL">
<name>Novel</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Novel</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="0" parent="73475cb40a568"> <item handle="25fc0e7096fc6" parent="73475cb40a568" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>Title Page</name> <meta charCount="11" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">Title Page</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>11</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="1" parent="73475cb40a568"> <item handle="31489056e0916" parent="73475cb40a568" order="1" type="FOLDER" class="NOVEL">
<name>New Chapter</name> <meta expanded="False"/>
<type>FOLDER</type> <name status="New">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="0" parent="31489056e0916"> <item handle="98010bd9270f9" parent="31489056e0916" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Chapter</name> <meta charCount="11" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Chapter</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>11</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="1" parent="31489056e0916"> <item handle="0e17daca5f3e1" parent="31489056e0916" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<name>New Scene</name> <meta charCount="9" wordCount="2" paraCount="0" cursorPos="0"/>
<type>FILE</type> <name status="New" exported="True">New Scene</name>
<class>NOVEL</class>
<status>New</status>
<exported>True</exported>
<layout>DOCUMENT</layout>
<charCount>9</charCount>
<wordCount>2</wordCount>
<paraCount>0</paraCount>
<cursorPos>0</cursorPos>
</item> </item>
<item handle="44cb730c42048" order="1" parent="None"> <item handle="44cb730c42048" parent="None" order="1" type="ROOT" class="PLOT">
<name>Plot</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Plot</name>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="2" parent="None"> <item handle="71ee45a3c0db9" parent="None" order="2" type="ROOT" class="CHARACTER">
<name>Characters</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">Characters</name>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="3" parent="None"> <item handle="811786ad1ae74" parent="None" order="3" type="ROOT" class="WORLD">
<name>World</name> <meta expanded="False"/>
<type>ROOT</type> <name status="New">World</name>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
+3 -20
View File
@@ -24,8 +24,6 @@ import os
import time import time
import pytest import pytest
from datetime import datetime
from mock import causeOSError from mock import causeOSError
from tools import writeFile from tools import writeFile
@@ -33,9 +31,9 @@ from novelwriter.guimain import GuiMain
from novelwriter.common import ( from novelwriter.common import (
checkString, checkInt, checkFloat, checkBool, checkHandle, isHandle, checkString, checkInt, checkFloat, checkBool, checkHandle, isHandle,
isTitleTag, isItemClass, isItemType, isItemLayout, hexToInt, checkIntRange, isTitleTag, isItemClass, isItemType, isItemLayout, hexToInt, checkIntRange,
checkIntTuple, formatInt, formatTimeStamp, formatTime, parseTimeStamp, checkIntTuple, formatInt, formatTimeStamp, formatTime, splitVersionNumber,
splitVersionNumber, transferCase, fuzzyTime, numberToRoman, jsonEncode, transferCase, fuzzyTime, numberToRoman, jsonEncode, readTextFile,
readTextFile, makeFileNameSafe, sha256sum, getGuiItem, NWConfigParser makeFileNameSafe, sha256sum, getGuiItem, NWConfigParser
) )
@@ -272,21 +270,6 @@ def testBaseCommon_FormatTime():
# END Test testBaseCommon_FormatTime # END Test testBaseCommon_FormatTime
@pytest.mark.base
def testBaseCommon_ParseTimeStamp():
"""Test the parseTimeStamp function.
"""
localEpoch = datetime(2000, 1, 1).timestamp()
assert parseTimeStamp(None, 0.0, allowNone=True) is None
assert parseTimeStamp("None", 0.0, allowNone=True) is None
assert parseTimeStamp("None", 0.0) == 0.0
assert parseTimeStamp("2000-01-01 00:00:00", 123.0) == localEpoch
assert parseTimeStamp("2000-13-01 00:00:00", 123.0) == 123.0
assert parseTimeStamp("2000-01-32 00:00:00", 123.0) == 123.0
# END Test testBaseCommon_ParseTimeStamp
@pytest.mark.base @pytest.mark.base
def testBaseCommon_SplitVersionNumber(): def testBaseCommon_SplitVersionNumber():
"""Test the splitVersionNumber function. """Test the splitVersionNumber function.
+109 -27
View File
@@ -306,22 +306,6 @@ def testCoreItem_LayoutSetter(mockGUI):
theItem.setLayout("NOTE") theItem.setLayout("NOTE")
assert theItem.itemLayout == nwItemLayout.NOTE assert theItem.itemLayout == nwItemLayout.NOTE
# Deprecated Layouts
theItem.setLayout("TITLE")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("PAGE")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("BOOK")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("PARTITION")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("UNNUMBERED")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("CHAPTER")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("SCENE")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
# Alternatives # Alternatives
theItem.setLayout(nwItemLayout.NOTE) theItem.setLayout(nwItemLayout.NOTE)
assert theItem.itemLayout == nwItemLayout.NOTE assert theItem.itemLayout == nwItemLayout.NOTE
@@ -358,12 +342,9 @@ def testCoreItem_XMLPackUnpack(mockGUI, caplog):
xContent = etree.SubElement(nwXML, "content") xContent = etree.SubElement(nwXML, "content")
theItem.packXML(xContent) theItem.packXML(xContent)
assert etree.tostring(xContent, pretty_print=False, encoding="utf-8") == ( assert etree.tostring(xContent, pretty_print=False, encoding="utf-8") == (
b"<content>" b'<content><item handle="0123456789abc" parent="0123456789abc" order="1" type="FILE" '
b"<item handle=\"0123456789abc\" order=\"1\" parent=\"0123456789abc\">" b'class="NOVEL" layout="NOTE"><meta charCount="7" wordCount="5" paraCount="3" '
b"<name>A Name</name><type>FILE</type><class>NOVEL</class><status>New</status>" b'cursorPos="11"/><name status="New" exported="False">A Name</name></item></content>'
b"<exported>False</exported><layout>NOTE</layout><charCount>7</charCount>"
b"<wordCount>5</wordCount><paraCount>3</paraCount><cursorPos>11</cursorPos></item>"
b"</content>"
) )
# Unpack # Unpack
@@ -404,11 +385,8 @@ def testCoreItem_XMLPackUnpack(mockGUI, caplog):
xContent = etree.SubElement(nwXML, "content") xContent = etree.SubElement(nwXML, "content")
theItem.packXML(xContent) theItem.packXML(xContent)
assert etree.tostring(xContent, pretty_print=False, encoding="utf-8") == ( assert etree.tostring(xContent, pretty_print=False, encoding="utf-8") == (
b"<content>" b'<content><item handle="0123456789abc" parent="0123456789abc" order="1" type="FOLDER" '
b"<item handle=\"0123456789abc\" order=\"1\" parent=\"0123456789abc\">" b'class="NOVEL"><meta expanded="True"/><name status="New">A Name</name></item></content>'
b"<name>A Name</name><type>FOLDER</type><class>NOVEL</class><status>New</status>"
b"<expanded>True</expanded></item>"
b"</content>"
) )
# Unpack # Unpack
@@ -462,3 +440,107 @@ def testCoreItem_XMLPackUnpack(mockGUI, caplog):
) )
# END Test testCoreItem_XMLPackUnpack # END Test testCoreItem_XMLPackUnpack
@pytest.mark.core
def testCoreItem_ConvertFromFmt12(mockGUI):
"""Test the setter for all the nwItemLayout values for the NWItem
class using the class names that were present in file format 1.2.
"""
theProject = NWProject(mockGUI)
theItem = NWItem(theProject)
# Deprecated Layouts
theItem.setLayout("TITLE")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("PAGE")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("BOOK")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("PARTITION")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("UNNUMBERED")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("CHAPTER")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("SCENE")
assert theItem.itemLayout == nwItemLayout.DOCUMENT
theItem.setLayout("MUMBOJUMBO")
assert theItem.itemLayout == nwItemLayout.NO_LAYOUT
# END Test testCoreItem_ConvertFromFmt12
@pytest.mark.core
def testCoreItem_ConvertFromFmt13(mockGUI):
"""Test packing and unpacking XML objects for the NWItem class from
format version 1.3
"""
theProject = NWProject(mockGUI)
# Make Version 1.3 XML
nwXML = etree.Element("novelWriterXML")
xContent = etree.SubElement(nwXML, "content")
# Folder
xPack = etree.SubElement(xContent, "item", attrib={
"handle": "a000000000001",
"order": "1",
"parent": "b000000000001",
})
NWItem._subPack(xPack, "name", text="Folder")
NWItem._subPack(xPack, "type", text="FOLDER")
NWItem._subPack(xPack, "class", text="NOVEL")
NWItem._subPack(xPack, "status", text="New")
NWItem._subPack(xPack, "expanded", text="True")
# Unpack Folder
theItem = NWItem(theProject)
theItem.unpackXML(xContent[0])
assert theItem.itemHandle == "a000000000001"
assert theItem.itemParent == "b000000000001"
assert theItem.itemOrder == 1
assert theItem.isExpanded is True
assert theItem.isExported is True
assert theItem.charCount == 0
assert theItem.wordCount == 0
assert theItem.paraCount == 0
assert theItem.cursorPos == 0
assert theItem.itemClass == nwItemClass.NOVEL
assert theItem.itemType == nwItemType.FOLDER
assert theItem.itemLayout == nwItemLayout.NO_LAYOUT
# File
xPack = etree.SubElement(xContent, "item", attrib={
"handle": "c000000000001",
"order": "2",
"parent": "a000000000001",
})
NWItem._subPack(xPack, "name", text="Scene")
NWItem._subPack(xPack, "type", text="FILE")
NWItem._subPack(xPack, "class", text="NOVEL")
NWItem._subPack(xPack, "status", text="New")
NWItem._subPack(xPack, "exported", text="True")
NWItem._subPack(xPack, "layout", text="DOCUMENT")
NWItem._subPack(xPack, "charCount", text="600")
NWItem._subPack(xPack, "wordCount", text="100")
NWItem._subPack(xPack, "paraCount", text="6")
NWItem._subPack(xPack, "cursorPos", text="50")
# Unpack File
theItem = NWItem(theProject)
theItem.unpackXML(xContent[1])
assert theItem.itemHandle == "c000000000001"
assert theItem.itemParent == "a000000000001"
assert theItem.itemOrder == 2
assert theItem.isExpanded is False
assert theItem.isExported is True
assert theItem.charCount == 600
assert theItem.wordCount == 100
assert theItem.paraCount == 6
assert theItem.cursorPos == 50
assert theItem.itemClass == nwItemClass.NOVEL
assert theItem.itemType == nwItemType.FILE
assert theItem.itemLayout == nwItemLayout.DOCUMENT
# END Test testCoreItem_ConvertFromFmt13
+23 -30
View File
@@ -385,36 +385,29 @@ def testCoreTree_XMLPackUnpack(mockGUI, mockItems):
nwXML = etree.Element("novelWriterXML") nwXML = etree.Element("novelWriterXML")
theTree.packXML(nwXML) theTree.packXML(nwXML)
assert etree.tostring(nwXML, pretty_print=False, encoding="utf-8") == ( assert etree.tostring(nwXML, pretty_print=False, encoding="utf-8") == (
b"<novelWriterXML>" b'<novelWriterXML>'
b"<content count=\"8\">" b'<content count="8">'
b"<item handle=\"a000000000001\" order=\"0\" parent=\"None\">" b'<item handle="a000000000001" parent="None" order="0" type="ROOT" class="NOVEL">'
b"<name>Novel</name><type>ROOT</type><class>NOVEL</class><status>None</status>" b'<meta expanded="True"/><name status="None">Novel</name></item>'
b"<expanded>True</expanded></item>" b'<item handle="b000000000001" parent="a000000000001" order="0" type="FOLDER" '
b"<item handle=\"b000000000001\" order=\"0\" parent=\"a000000000001\">" b'class="NOVEL"><meta expanded="True"/><name status="None">Act One</name></item>'
b"<name>Act One</name><type>FOLDER</type><class>NOVEL</class><status>None</status>" b'<item handle="c000000000001" parent="b000000000001" order="0" type="FILE" class="NOVEL" '
b"<expanded>True</expanded></item>" b'layout="DOCUMENT"><meta charCount="300" wordCount="50" paraCount="2" cursorPos="0"/>'
b"<item handle=\"c000000000001\" order=\"0\" parent=\"b000000000001\">" b'<name status="None" exported="True">Chapter One</name></item>'
b"<name>Chapter One</name><type>FILE</type><class>NOVEL</class><status>None</status>" b'<item handle="c000000000002" parent="b000000000001" order="0" type="FILE" class="NOVEL" '
b"<exported>True</exported><layout>DOCUMENT</layout><charCount>300</charCount>" b'layout="DOCUMENT"><meta charCount="3000" wordCount="500" paraCount="20" cursorPos="0"/>'
b"<wordCount>50</wordCount><paraCount>2</paraCount><cursorPos>0</cursorPos></item>" b'<name status="None" exported="True">Scene One</name></item>'
b"<item handle=\"c000000000002\" order=\"0\" parent=\"b000000000001\">" b'<item handle="a000000000002" parent="None" order="0" type="ROOT" class="ARCHIVE">'
b"<name>Scene One</name><type>FILE</type><class>NOVEL</class><status>None</status>" b'<meta expanded="False"/><name status="None">Outtakes</name></item>'
b"<exported>True</exported><layout>DOCUMENT</layout><charCount>3000</charCount>" b'<item handle="a000000000003" parent="None" order="0" type="TRASH" class="TRASH">'
b"<wordCount>500</wordCount><paraCount>20</paraCount><cursorPos>0</cursorPos></item>" b'<meta expanded="False"/><name status="None">Trash</name></item>'
b"<item handle=\"a000000000002\" order=\"0\" parent=\"None\">" b'<item handle="a000000000004" parent="None" order="0" type="ROOT" class="CHARACTER">'
b"<name>Outtakes</name><type>ROOT</type><class>ARCHIVE</class><status>None</status>" b'<meta expanded="True"/><name status="None">Characters</name></item>'
b"<expanded>False</expanded></item>" b'<item handle="b000000000002" parent="a000000000002" order="0" type="FILE" '
b"<item handle=\"a000000000003\" order=\"0\" parent=\"None\">" b'class="CHARACTER" layout="NOTE"><meta charCount="2000" wordCount="400" paraCount="16" '
b"<name>Trash</name><type>TRASH</type><class>TRASH</class><status>None</status>" b'cursorPos="0"/><name status="None" exported="True">Jane Doe</name></item>'
b"<expanded>False</expanded></item>" b'</content>'
b"<item handle=\"a000000000004\" order=\"0\" parent=\"None\">" b'</novelWriterXML>'
b"<name>Characters</name><type>ROOT</type><class>CHARACTER</class><status>None</status>"
b"<expanded>True</expanded></item>"
b"<item handle=\"b000000000002\" order=\"0\" parent=\"a000000000002\">"
b"<name>Jane Doe</name><type>FILE</type><class>CHARACTER</class><status>None</status>"
b"<exported>True</exported><layout>NOTE</layout><charCount>2000</charCount>"
b"<wordCount>400</wordCount><paraCount>16</paraCount><cursorPos>0</cursorPos></item>"
b"</content></novelWriterXML>"
) )
theTree.clear() theTree.clear()