Implement project file format 1.4 (#993)

* Update the item class with more compact item storage format
* Bump version and file version
* Update tests
* Add explicit test coverage for format conversions for item class
* Update the documentation
This commit is contained in:
Veronica Berglyd Olsen
2022-02-20 22:05:31 +01:00
committed by GitHub
parent be703c1f46
commit 045a595537
17 changed files with 666 additions and 1389 deletions
+66 -204
View File
@@ -1,12 +1,12 @@
<?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>
<name>Lorem Ipsum</name>
<title>Lorem Ipsum</title>
<author>lipsum.com</author>
<saveCount>17</saveCount>
<saveCount>21</saveCount>
<autoCount>24</autoCount>
<editTime>1777</editTime>
<editTime>1847</editTime>
</project>
<settings>
<doBackup>False</doBackup>
@@ -44,227 +44,89 @@
</importance>
</settings>
<content count="21">
<item handle="b3643d0f92e32" order="0" parent="None">
<name>Novel</name>
<type>ROOT</type>
<class>NOVEL</class>
<status>New</status>
<expanded>True</expanded>
<item handle="b3643d0f92e32" parent="None" order="0" type="ROOT" class="NOVEL">
<meta expanded="True"/>
<name status="New">Novel</name>
</item>
<item handle="7a992350f3eb6" order="0" parent="b3643d0f92e32">
<name>Lorem Ipsum</name>
<type>FILE</type>
<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 handle="7a992350f3eb6" parent="b3643d0f92e32" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="230" wordCount="40" paraCount="3" cursorPos="148"/>
<name status="Finished" exported="True">Lorem Ipsum</name>
</item>
<item handle="8c58a65414c23" order="1" parent="b3643d0f92e32">
<name>Front Matter</name>
<type>FILE</type>
<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 handle="8c58a65414c23" parent="b3643d0f92e32" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="1058" wordCount="176" paraCount="2" cursorPos="43"/>
<name status="Finished" exported="True">Front Matter</name>
</item>
<item handle="88d59a277361b" order="2" parent="b3643d0f92e32">
<name>Prologue</name>
<type>FILE</type>
<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 handle="88d59a277361b" parent="b3643d0f92e32" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="584" wordCount="92" paraCount="1" cursorPos="4"/>
<name status="Draft" exported="True">Prologue</name>
</item>
<item handle="db7e733775d4d" order="3" parent="b3643d0f92e32">
<name>Act One</name>
<type>FILE</type>
<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 handle="db7e733775d4d" parent="b3643d0f92e32" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="35" wordCount="6" paraCount="1" cursorPos="42"/>
<name status="New" exported="True">Act One</name>
</item>
<item handle="45e6b01ca35c1" order="4" parent="b3643d0f92e32">
<name>Chapter One</name>
<type>FOLDER</type>
<class>NOVEL</class>
<status>Draft</status>
<expanded>True</expanded>
<item handle="45e6b01ca35c1" parent="b3643d0f92e32" order="4" type="FOLDER" class="NOVEL">
<meta expanded="True"/>
<name status="Draft">Chapter One</name>
</item>
<item handle="fb609cd8319dc" order="0" parent="45e6b01ca35c1">
<name>Chapter One</name>
<type>FILE</type>
<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 handle="fb609cd8319dc" parent="45e6b01ca35c1" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="419" wordCount="67" paraCount="1" cursorPos="56"/>
<name status="Draft" exported="True">Chapter One</name>
</item>
<item handle="88243afbe5ed8" order="1" parent="45e6b01ca35c1">
<name>Scene One</name>
<type>FILE</type>
<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 handle="88243afbe5ed8" parent="45e6b01ca35c1" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="2758" wordCount="404" paraCount="4" cursorPos="1528"/>
<name status="Finished" exported="True">Scene One</name>
</item>
<item handle="f96ec11c6a3da" order="2" parent="45e6b01ca35c1">
<name>Scene Two</name>
<type>FILE</type>
<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 handle="f96ec11c6a3da" parent="45e6b01ca35c1" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="4043" wordCount="600" paraCount="6" cursorPos="2335"/>
<name status="Finished" exported="True">Scene Two</name>
</item>
<item handle="846352075de7d" order="5" parent="b3643d0f92e32">
<name>Interlude</name>
<type>FILE</type>
<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 handle="846352075de7d" parent="b3643d0f92e32" order="5" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="631" wordCount="109" paraCount="3" cursorPos="376"/>
<name status="New" exported="False">Interlude</name>
</item>
<item handle="6bd935d2490cd" order="6" parent="b3643d0f92e32">
<name>Chapter Two</name>
<type>FOLDER</type>
<class>NOVEL</class>
<status>Draft</status>
<expanded>True</expanded>
<item handle="6bd935d2490cd" parent="b3643d0f92e32" order="6" type="FOLDER" class="NOVEL">
<meta expanded="True"/>
<name status="Draft">Chapter Two</name>
</item>
<item handle="441420a886d82" order="0" parent="6bd935d2490cd">
<name>Chapter Two</name>
<type>FILE</type>
<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 handle="441420a886d82" parent="6bd935d2490cd" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="477" wordCount="70" paraCount="1" cursorPos="56"/>
<name status="Draft" exported="True">Chapter Two</name>
</item>
<item handle="eb103bc70c90c" order="1" parent="6bd935d2490cd">
<name>Scene Three</name>
<type>FILE</type>
<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 handle="eb103bc70c90c" parent="6bd935d2490cd" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="3006" wordCount="439" paraCount="4" cursorPos="57"/>
<name status="Finished" exported="True">Scene Three</name>
</item>
<item handle="f8c0562e50f1b" order="2" parent="6bd935d2490cd">
<name>Scene Four</name>
<type>FILE</type>
<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 handle="f8c0562e50f1b" parent="6bd935d2490cd" order="2" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="3839" wordCount="563" paraCount="6" cursorPos="56"/>
<name status="Finished" exported="True">Scene Four</name>
</item>
<item handle="47666c91c7ccf" order="3" parent="6bd935d2490cd">
<name>Scene Five</name>
<type>FILE</type>
<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 handle="47666c91c7ccf" parent="6bd935d2490cd" order="3" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta charCount="3644" wordCount="543" paraCount="5" cursorPos="351"/>
<name status="Finished" exported="True">Scene Five</name>
</item>
<item handle="67a8707f2f249" order="1" parent="None">
<name>Characters</name>
<type>ROOT</type>
<class>CHARACTER</class>
<status>New</status>
<expanded>True</expanded>
<item handle="67a8707f2f249" parent="None" order="1" type="ROOT" class="CHARACTER">
<meta expanded="True"/>
<name status="New">Characters</name>
</item>
<item handle="4c4f28287af27" order="0" parent="67a8707f2f249">
<name>Mr. Nobody</name>
<type>FILE</type>
<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 handle="4c4f28287af27" parent="67a8707f2f249" order="0" type="FILE" class="CHARACTER" layout="NOTE">
<meta charCount="1864" wordCount="284" paraCount="3" cursorPos="1883"/>
<name status="Major" exported="True">Mr. Nobody</name>
</item>
<item handle="6c6afb1247750" order="2" parent="None">
<name>Plot</name>
<type>ROOT</type>
<class>PLOT</class>
<status>New</status>
<expanded>True</expanded>
<item handle="6c6afb1247750" parent="None" order="2" type="ROOT" class="PLOT">
<meta expanded="True"/>
<name status="New">Plot</name>
</item>
<item handle="2426c6f0ca922" order="0" parent="6c6afb1247750">
<name>Main</name>
<type>FILE</type>
<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 handle="2426c6f0ca922" parent="6c6afb1247750" order="0" type="FILE" class="PLOT" layout="NOTE">
<meta charCount="1369" wordCount="195" paraCount="2" cursorPos="1387"/>
<name status="Main" exported="True">Main</name>
</item>
<item handle="60bdf227455cc" order="3" parent="None">
<name>World</name>
<type>ROOT</type>
<class>WORLD</class>
<status>New</status>
<expanded>True</expanded>
<item handle="60bdf227455cc" parent="None" order="3" type="ROOT" class="WORLD">
<meta expanded="True"/>
<name status="New">World</name>
</item>
<item handle="04468803b92e1" order="0" parent="60bdf227455cc">
<name>Ancient Europe</name>
<type>FILE</type>
<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 handle="04468803b92e1" parent="60bdf227455cc" order="0" type="FILE" class="WORLD" layout="NOTE">
<meta charCount="1770" wordCount="259" paraCount="3" cursorPos="1792"/>
<name status="Minor" exported="True">Ancient Europe</name>
</item>
</content>
</novelWriterXML>