novelWriter 2.1.1__py3-none-any.whl → 2.2rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/METADATA +3 -3
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/RECORD +105 -76
- novelwriter/__init__.py +6 -24
- novelwriter/assets/i18n/project_de_DE.json +10 -0
- novelwriter/assets/i18n/project_en_GB.json +11 -0
- novelwriter/assets/i18n/project_en_US.json +10 -0
- novelwriter/assets/i18n/project_ja_JP.json +11 -1
- novelwriter/assets/i18n/project_nb_NO.json +10 -0
- novelwriter/assets/i18n/project_nn_NO.json +10 -0
- novelwriter/assets/icons/novelwriter.ico +0 -0
- novelwriter/assets/icons/novelwriter.svg +8 -183
- novelwriter/assets/icons/typicons_dark/icons.conf +17 -2
- novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_panel.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-markdown.svg +8 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-shortcode.svg +8 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +5 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +5 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +5 -0
- novelwriter/assets/icons/typicons_dark/typ_eye.svg +4 -0
- novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +4 -0
- novelwriter/assets/icons/typicons_light/icons.conf +17 -2
- novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_deco-note.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_panel.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-markdown.svg +8 -0
- novelwriter/assets/icons/typicons_light/nw_tb-shortcode.svg +8 -0
- novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +5 -0
- novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +5 -0
- novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +5 -0
- novelwriter/assets/icons/typicons_light/typ_eye.svg +4 -0
- novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +4 -0
- novelwriter/assets/icons/x-novelwriter-project.ico +0 -0
- novelwriter/assets/icons/x-novelwriter-project.svg +7 -206
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/assets/syntax/default_dark.conf +1 -0
- novelwriter/assets/syntax/default_light.conf +1 -0
- novelwriter/assets/syntax/grey_dark.conf +1 -0
- novelwriter/assets/syntax/grey_light.conf +1 -0
- novelwriter/assets/syntax/light_owl.conf +1 -0
- novelwriter/assets/syntax/night_owl.conf +1 -0
- novelwriter/assets/syntax/solarized_dark.conf +1 -0
- novelwriter/assets/syntax/solarized_light.conf +1 -0
- novelwriter/assets/syntax/tomorrow.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night_blue.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night_bright.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night_eighties.conf +1 -0
- novelwriter/assets/text/credits_en.htm +7 -0
- novelwriter/assets/text/release_notes.htm +7 -37
- novelwriter/common.py +22 -1
- novelwriter/config.py +27 -42
- novelwriter/constants.py +45 -7
- novelwriter/core/buildsettings.py +40 -24
- novelwriter/core/coretools.py +8 -1
- novelwriter/core/docbuild.py +2 -6
- novelwriter/core/index.py +264 -175
- novelwriter/core/options.py +8 -3
- novelwriter/core/project.py +2 -2
- novelwriter/core/projectdata.py +3 -3
- novelwriter/core/tohtml.py +60 -59
- novelwriter/core/tokenizer.py +110 -70
- novelwriter/core/tomd.py +51 -38
- novelwriter/core/toodt.py +184 -147
- novelwriter/dialogs/preferences.py +75 -106
- novelwriter/dialogs/projsettings.py +101 -110
- novelwriter/dialogs/updates.py +25 -14
- novelwriter/enum.py +28 -3
- novelwriter/extensions/novelselector.py +1 -1
- novelwriter/gui/doceditor.py +1345 -1235
- novelwriter/gui/dochighlight.py +98 -62
- novelwriter/gui/docviewer.py +151 -340
- novelwriter/gui/docviewerpanel.py +457 -0
- novelwriter/gui/editordocument.py +126 -0
- novelwriter/gui/mainmenu.py +350 -300
- novelwriter/gui/noveltree.py +101 -125
- novelwriter/gui/outline.py +154 -171
- novelwriter/gui/projtree.py +480 -380
- novelwriter/gui/sidebar.py +106 -75
- novelwriter/gui/statusbar.py +1 -1
- novelwriter/gui/theme.py +114 -75
- novelwriter/guimain.py +353 -254
- novelwriter/shared.py +36 -3
- novelwriter/tools/dictionaries.py +268 -0
- novelwriter/tools/manusbuild.py +17 -6
- novelwriter/tools/manuscript.py +11 -3
- novelwriter/tools/manussettings.py +0 -14
- novelwriter/tools/projwizard.py +16 -2
- novelwriter/tools/writingstats.py +1 -1
- novelwriter/assets/icons/typicons_dark/typ_at.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-menu.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_at.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-menu.svg +0 -4
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/LICENSE.md +0 -0
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/WHEEL +0 -0
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/top_level.txt +0 -0
@@ -1,207 +1,8 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
xmlns:xlink="http://www.w3.org/1999/xlink"
|
9
|
-
id="svg8"
|
10
|
-
version="1.1"
|
11
|
-
viewBox="0 0 270.93333 270.93334"
|
12
|
-
height="1024"
|
13
|
-
width="1024">
|
14
|
-
<defs
|
15
|
-
id="defs2">
|
16
|
-
<linearGradient
|
17
|
-
id="linearGradient2515">
|
18
|
-
<stop
|
19
|
-
style="stop-color:#f7f7f7;stop-opacity:1"
|
20
|
-
offset="0"
|
21
|
-
id="stop2511" />
|
22
|
-
<stop
|
23
|
-
style="stop-color:#e5e5e5;stop-opacity:1"
|
24
|
-
offset="1"
|
25
|
-
id="stop2513" />
|
26
|
-
</linearGradient>
|
27
|
-
<rect
|
28
|
-
x="60.484347"
|
29
|
-
y="205.79962"
|
30
|
-
width="130.57787"
|
31
|
-
height="65.785888"
|
32
|
-
id="rect852" />
|
33
|
-
<rect
|
34
|
-
id="rect1474"
|
35
|
-
height="28.631245"
|
36
|
-
width="177.70083"
|
37
|
-
y="18.019813"
|
38
|
-
x="13.463703" />
|
39
|
-
<rect
|
40
|
-
id="rect852-7"
|
41
|
-
height="65.785889"
|
42
|
-
width="130.57787"
|
43
|
-
y="205.79962"
|
44
|
-
x="60.484348" />
|
45
|
-
<rect
|
46
|
-
id="rect1544"
|
47
|
-
height="65.785889"
|
48
|
-
width="130.57787"
|
49
|
-
y="205.79962"
|
50
|
-
x="60.484348" />
|
51
|
-
<rect
|
52
|
-
x="60.484348"
|
53
|
-
y="205.79962"
|
54
|
-
width="130.57787"
|
55
|
-
height="65.785889"
|
56
|
-
id="rect1570" />
|
57
|
-
<rect
|
58
|
-
x="13.463703"
|
59
|
-
y="18.019813"
|
60
|
-
width="177.70083"
|
61
|
-
height="28.631245"
|
62
|
-
id="rect1587" />
|
63
|
-
<filter
|
64
|
-
id="filter1444"
|
65
|
-
style="color-interpolation-filters:sRGB">
|
66
|
-
<feFlood
|
67
|
-
id="feFlood1434"
|
68
|
-
result="flood"
|
69
|
-
flood-color="rgb(0,0,0)"
|
70
|
-
flood-opacity="0.498039" />
|
71
|
-
<feComposite
|
72
|
-
id="feComposite1436"
|
73
|
-
result="composite1"
|
74
|
-
operator="in"
|
75
|
-
in2="SourceGraphic"
|
76
|
-
in="flood" />
|
77
|
-
<feGaussianBlur
|
78
|
-
id="feGaussianBlur1438"
|
79
|
-
result="blur"
|
80
|
-
stdDeviation="3"
|
81
|
-
in="composite1" />
|
82
|
-
<feOffset
|
83
|
-
id="feOffset1440"
|
84
|
-
result="offset"
|
85
|
-
dy="6"
|
86
|
-
dx="6" />
|
87
|
-
<feComposite
|
88
|
-
id="feComposite1442"
|
89
|
-
result="composite2"
|
90
|
-
operator="over"
|
91
|
-
in2="offset"
|
92
|
-
in="SourceGraphic" />
|
93
|
-
</filter>
|
94
|
-
<filter
|
95
|
-
id="filter1456"
|
96
|
-
style="color-interpolation-filters:sRGB">
|
97
|
-
<feFlood
|
98
|
-
id="feFlood1446"
|
99
|
-
result="flood"
|
100
|
-
flood-color="rgb(0,0,0)"
|
101
|
-
flood-opacity="0.498039" />
|
102
|
-
<feComposite
|
103
|
-
id="feComposite1448"
|
104
|
-
result="composite1"
|
105
|
-
operator="in"
|
106
|
-
in2="SourceGraphic"
|
107
|
-
in="flood" />
|
108
|
-
<feGaussianBlur
|
109
|
-
id="feGaussianBlur1450"
|
110
|
-
result="blur"
|
111
|
-
stdDeviation="3"
|
112
|
-
in="composite1" />
|
113
|
-
<feOffset
|
114
|
-
id="feOffset1452"
|
115
|
-
result="offset"
|
116
|
-
dy="6"
|
117
|
-
dx="6" />
|
118
|
-
<feComposite
|
119
|
-
id="feComposite1454"
|
120
|
-
result="composite2"
|
121
|
-
operator="over"
|
122
|
-
in2="offset"
|
123
|
-
in="SourceGraphic" />
|
124
|
-
</filter>
|
125
|
-
<radialGradient
|
126
|
-
xlink:href="#linearGradient2515"
|
127
|
-
id="radialGradient2517"
|
128
|
-
cx="605.42725"
|
129
|
-
cy="623.97186"
|
130
|
-
fx="605.42725"
|
131
|
-
fy="623.97186"
|
132
|
-
r="410"
|
133
|
-
gradientTransform="matrix(2.4110274,1.7617596,-0.719517,0.98463462,-776.23441,-1372.7537)"
|
134
|
-
gradientUnits="userSpaceOnUse" />
|
135
|
-
</defs>
|
136
|
-
<metadata
|
137
|
-
id="metadata5">
|
138
|
-
<rdf:RDF>
|
139
|
-
<cc:Work
|
140
|
-
rdf:about="">
|
141
|
-
<dc:format>image/svg+xml</dc:format>
|
142
|
-
<dc:type
|
143
|
-
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
144
|
-
<dc:title></dc:title>
|
145
|
-
</cc:Work>
|
146
|
-
</rdf:RDF>
|
147
|
-
</metadata>
|
148
|
-
<g
|
149
|
-
id="layer3"
|
150
|
-
style="display:inline">
|
151
|
-
<path
|
152
|
-
clip-path="none"
|
153
|
-
transform="scale(0.26458333)"
|
154
|
-
d="m 192,22 c -44.32,0 -80,35.680002 -80,80 v 820 c 0,44.32002 35.68,80 80,80 h 640 c 44.31999,0 80,-35.67998 80,-80 V 213.44727 L 720.55469,22 Z"
|
155
|
-
style="fill:url(#radialGradient2517);fill-opacity:1;stroke:#999999;stroke-width:20;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
156
|
-
id="rect1481" />
|
157
|
-
<path
|
158
|
-
id="path1490"
|
159
|
-
style="display:inline;fill:#e0e0e0;fill-opacity:1;stroke:#999999;stroke-width:5.29167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
160
|
-
d="M 241.30037,56.474215 190.64713,5.8204593 V 35.307549 c 0,11.726333 9.44034,21.166666 21.16667,21.166666 z" />
|
161
|
-
<g
|
162
|
-
aria-label=".nwx"
|
163
|
-
transform="matrix(1.7893481,0,0,1.782571,-45.41919,-191.90571)"
|
164
|
-
id="text850"
|
165
|
-
style="font-size:5.64444px;line-height:1.25;font-family:'Fira Sans';-inkscape-font-specification:'Fira Sans, Normal';letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect852);display:inline;fill:#666666;fill-opacity:1">
|
166
|
-
<path
|
167
|
-
d="m 63.088865,241.76928 q 0,-1.36426 0.909505,-2.27376 0.930175,-0.93018 2.480467,-0.93018 1.550291,0 2.459796,0.93018 0.909504,0.9095 0.909504,2.27376 0,1.34359 -0.909504,2.27376 -0.909505,0.9095 -2.459796,0.9095 -1.550292,0 -2.480467,-0.9095 -0.909505,-0.93017 -0.909505,-2.27376 z"
|
168
|
-
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.3333px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#666666;fill-opacity:1"
|
169
|
-
id="path856" />
|
170
|
-
<path
|
171
|
-
d="m 84.75161,226.78312 q -2.542479,0 -3.782712,2.14974 v 15.79231 h -5.973791 v -22.36554 h 5.601721 l 0.206705,2.56314 q 2.397785,-2.97656 6.428544,-2.97656 3.162595,0 5.105627,1.88103 1.943033,1.88102 1.963703,6.55256 v 14.34537 h -5.994461 v -14.26269 q 0,-2.14973 -0.930175,-2.91454 -0.909505,-0.76482 -2.625161,-0.76482 z"
|
172
|
-
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.3333px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#666666;fill-opacity:1"
|
173
|
-
id="path858" />
|
174
|
-
<path
|
175
|
-
d="m 126.96089,222.35963 -5.68441,22.36554 h -5.00227 l -4.25814,-14.07665 -4.23746,14.07665 h -4.9816 l -5.705078,-22.36554 h 5.767088 l 2.95589,14.22134 4.05143,-14.22134 h 4.32014 l 4.09277,14.20067 2.91455,-14.20067 z"
|
176
|
-
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.3333px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#666666;fill-opacity:1"
|
177
|
-
id="path860" />
|
178
|
-
<path
|
179
|
-
d="m 134.77436,222.35963 3.65869,6.65592 3.76204,-6.65592 h 6.3872 l -6.36653,10.93472 6.63525,11.43082 h -6.3872 l -4.01009,-7.04866 -3.94808,7.04866 h -6.42854 l 6.63525,-11.43082 -6.36654,-10.93472 z"
|
180
|
-
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.3333px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#666666;fill-opacity:1"
|
181
|
-
id="path862" />
|
182
|
-
</g>
|
183
|
-
</g>
|
184
|
-
<g
|
185
|
-
id="g2509"
|
186
|
-
transform="matrix(1.2371037,0,0,1.2371037,206.3182,37.341857)">
|
187
|
-
<path
|
188
|
-
transform="matrix(0.16895991,0,0,0.18329422,-134.6942,-19.491243)"
|
189
|
-
id="rect1406-1"
|
190
|
-
style="display:inline;fill:#a11212;fill-opacity:1;stroke:#7e1b1b;stroke-width:9.99999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter1444)"
|
191
|
-
d="m 145.18984,56.414257 c -44.32,0 -79.999998,35.68 -79.999998,80.000003 v 199.99805 a 279.99999,279.99999 0 0 0 0,0.002 279.99999,279.99999 0 0 0 0,0.0195 v 199.98242 c 0,44.31999 35.679998,80 79.999998,80 44.32,0 80,-35.68001 80,-80 v -200 a 120,120 0 0 1 120,-120 120,120 0 0 1 120,120 v 282.83592 h 160 V 336.41621 a 279.99999,279.99999 0 0 0 -280,-280.000003 279.99999,279.99999 0 0 0 -0.81055,0 279.99999,279.99999 0 0 0 -133.46484,34.29688 c -14.4245,-20.75262 -38.42829,-34.29883 -65.72461,-34.29883 z M 376.65078,619.64082 c -0.62174,0.0972 -1.2172,0.22317 -1.7793,0.37696 0.5621,-0.15379 1.15756,-0.27973 1.7793,-0.37696 z m -1.7793,0.37696 c -0.5621,0.15378 -1.09071,0.33534 -1.58008,0.53906 0.48937,-0.20372 1.01798,-0.38528 1.58008,-0.53906 z m 338.85742,-0.37696 c 0.62174,0.0972 1.2172,0.22317 1.7793,0.37696 -0.5621,-0.15379 -1.15756,-0.27973 -1.7793,-0.37696 z m 1.7793,0.37696 c 0.5621,0.15378 1.09071,0.33534 1.58008,0.53906 -0.48938,-0.20372 -1.01798,-0.38528 -1.58008,-0.53906 z" />
|
192
|
-
<path
|
193
|
-
transform="matrix(0.16895991,0,0,0.18329422,-134.6942,-19.491243)"
|
194
|
-
id="path897"
|
195
|
-
style="display:inline;fill:#730d0d;fill-opacity:1;stroke:#590d0d;stroke-width:9.99999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter1456)"
|
196
|
-
d="m 465.18984,619.25215 v 0.16406 h -85.58398 c -5.49302,0 -9.91602,2.2329 -9.91602,5.00586 0,0.52294 0.15913,1.02696 0.45117,1.5 h -0.44531 c 0.30916,2.03607 1.24102,3.99791 2.81641,5.57227 l 165.59961,165.49414 c 3.92061,3.91808 10.23371,3.91812 14.15429,0 L 717.86757,631.49434 c 1.57569,-1.57463 2.50725,-3.53578 2.81641,-5.57227 h -0.44531 c 0.29216,-0.47304 0.45117,-0.97706 0.45117,-1.5 0,-2.77296 -4.42304,-5.00586 -9.91602,-5.00586 h -85.58398 v -0.16406 z" />
|
197
|
-
<rect
|
198
|
-
style="display:inline;fill:#c32222;fill-opacity:1;stroke:none;stroke-width:1.75982;stroke-linejoin:round;stroke-opacity:1"
|
199
|
-
id="rect914"
|
200
|
-
width="6.7583966"
|
201
|
-
height="82.482399"
|
202
|
-
x="-118.27303"
|
203
|
-
y="1.2969339"
|
204
|
-
rx="3.3791983"
|
205
|
-
ry="3.6658845" />
|
206
|
-
</g>
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
<svg width="256" height="256" version="1.1" viewBox="0 0 67.733 67.733" xmlns="http://www.w3.org/2000/svg">
|
4
|
+
<path d="m12.869 1.7145c-2.9081 0-5.2493 2.3412-5.2493 5.2493v53.806c0 2.9081 2.3412 5.2493 5.2493 5.2493h41.995c2.9081 0 5.2493-2.3412 5.2493-5.2493v-46.493l-12.562-12.562z" fill="#ececec" stroke="#999" stroke-linejoin="round" stroke-width="1.3123"/>
|
5
|
+
<path d="m60.113 14.277-12.562-12.562v7.3128c0 2.9081 2.3412 5.2493 5.2493 5.2493z" fill="#e0e0e0" stroke="#999" stroke-linejoin="round" stroke-width="1.3123"/>
|
6
|
+
<path d="m34.617 50.796c-0.31888 0-0.57319 0.09267-0.7628 0.27797-0.1853 0.18099-0.27797 0.41156-0.27797 0.69167 0 0.2758 0.09268 0.50636 0.27797 0.69166 0.18961 0.18099 0.44392 0.27144 0.7628 0.27144s0.57306-0.09044 0.76266-0.27144c0.18961-0.1853 0.28438-0.41587 0.28438-0.69166 0-0.28011-0.09477-0.51067-0.28438-0.69167-0.18961-0.1853-0.44378-0.27797-0.76266-0.27797zm-21.512 0.36204v9.4116h1.9456v-3.3226h1.7323c1.1118 0 1.978-0.26924 2.5985-0.8079 0.62484-0.53867 0.93722-1.2627 0.93722-2.172 0-0.90065-0.31238-1.644-0.93722-2.2301-0.62053-0.58607-1.4867-0.87903-2.5985-0.87903zm38.395 0.69154v1.7259h-1.0278v1.364h1.0278v3.6909c0 0.74121 0.1809 1.2713 0.54287 1.5902 0.36198 0.31889 0.84896 0.47828 1.4609 0.47828 0.40076 0 0.77566-0.0582 1.1247-0.17455v-1.4156c-0.17237 0.03448-0.3534 0.05178-0.543 0.05178-0.23701 0-0.41581-0.04745-0.53647-0.14226-0.12066-0.09481-0.18096-0.28867-0.18096-0.58171v-3.497h1.1893v-1.364h-1.1893v-1.7259zm-36.45 0.87916h1.7323c0.55589 0 0.95662 0.15729 1.2022 0.47188 0.24562 0.31027 0.36845 0.67008 0.36845 1.0795 0 0.40939-0.12283 0.7456-0.36845 1.0085-0.24562 0.26287-0.64636 0.39421-1.2022 0.39421h-1.7323zm9.8574 0.71755c-0.67224 0-1.1915 0.32101-1.5578 0.96311l-0.05818-0.83392h-1.7646v6.9942h1.8744v-4.583c0.21977-0.47834 0.68093-0.71756 1.3833-0.71756l0.67872 0.05178 0.01934-1.7906c-0.14651-0.05602-0.33829-0.08395-0.5753-0.08395zm4.2402 0c-1.0514 0-1.8659 0.34041-2.4433 1.0213-0.57743 0.67657-0.86609 1.5233-0.86609 2.5403v0.21979c0.01724 0.99546 0.31244 1.8228 0.88557 2.4822 0.57743 0.65933 1.3897 0.98899 2.4368 0.98899 1.0558 0 1.8702-0.33831 2.4433-1.0149 0.57312-0.67657 0.85968-1.5233 0.85968-2.5403v-0.13572c0-1.017-0.28655-1.8638-0.85968-2.5403-0.57313-0.68088-1.3919-1.0213-2.4563-1.0213zm10.93 0c-0.99974 0-1.7948 0.33819-2.3851 1.0148-0.58605 0.67657-0.87903 1.5429-0.87903 2.5987v0.27144c0.0043 0.93082 0.31236 1.7259 0.92427 2.3853 0.61191 0.65502 1.4608 0.98246 2.5467 0.98246 0.68085 0 1.2498-0.13134 1.7065-0.39421 0.45678-0.26287 0.79721-0.55386 1.0213-0.87275l-0.9244-1.0213c-0.41368 0.52143-0.97605 0.78214-1.6871 0.78214-0.47832 0-0.86398-0.13789-1.157-0.41369-0.29303-0.28011-0.47183-0.64634-0.53647-1.0988h4.4536v-0.79509c0-1.0342-0.26296-1.8659-0.78868-2.4951-0.52572-0.62917-1.2906-0.94376-2.2947-0.94376zm7.0715 0c-1.0816 0-1.8896 0.34251-2.424 1.0277-0.53434 0.68519-0.8015 1.5212-0.8015 2.508v0.18108c0 0.99115 0.26716 1.8293 0.8015 2.5145 0.53865 0.68088 1.3488 1.0213 2.4304 1.0213 0.81013 0 1.4932-0.23909 2.0491-0.71743 0.5602-0.47834 0.84453-1.0881 0.85314-1.8293h-1.7581c-0.0043 0.31889-0.11639 0.57306-0.33616 0.76267-0.21977 0.1853-0.4999 0.27797-0.84033 0.27797-0.55158 0-0.91141-0.20251-1.0795-0.6076-0.16375-0.40939-0.24555-0.88337-0.24555-1.422 0-0.65933 0.08403-1.1916 0.25208-1.5967 0.16806-0.40939 0.52357-0.614 1.0665-0.614 0.37921 0 0.67009 0.12059 0.87262 0.36192 0.20253 0.23702 0.30596 0.52578 0.31027 0.86622h1.7581c-0.0086-0.84032-0.2822-1.5061-0.82085-1.9973-0.53434-0.49127-1.2303-0.73691-2.0878-0.73691zm-13.432 0.12918v7.382c0 0.60331-0.28223 0.90492-0.84674 0.90492-0.19822 0-0.39643-0.01939-0.59465-0.05818v1.4803c0.29734 0.07326 0.60972 0.10983 0.93722 0.10983 0.75411 0 1.338-0.20894 1.7517-0.62695 0.41799-0.41801 0.62707-1.0214 0.62707-1.81v-7.382zm-4.57 1.3769c0.53003 0 0.90284 0.20462 1.1183 0.614 0.21977 0.40508 0.32962 0.88561 0.32962 1.4415 0 0.66364-0.10985 1.1937-0.32962 1.5902-0.21546 0.39646-0.58395 0.59465-1.1054 0.59465-0.53004 0-0.90494-0.19819-1.1247-0.59465-0.21546-0.40077-0.32321-0.88562-0.32321-1.4545 0-0.65072 0.10775-1.1786 0.32321-1.5836 0.21546-0.40508 0.58604-0.6076 1.1118-0.6076zm10.917 0c0.43092 0 0.7454 0.12492 0.94362 0.37486 0.20254 0.24563 0.30819 0.5559 0.3168 0.93081v0.14226h-2.5985c0.06464-0.43094 0.20477-0.78 0.42023-1.0472 0.21546-0.26718 0.52142-0.40075 0.91786-0.40075z" fill="#666" stroke-width=".1773" style="shape-inside:url(#rect2964);white-space:pre"/>
|
7
|
+
<path d="m16.933 38.766h1.5478q1.2383 0 1.7336-0.49531 0.55722-0.55722 0.55722-1.7955v-15.912q0-1.2383-0.49531-1.7336-0.49531-0.55722-1.7336-0.55722h-1.3002v-4.6435h7.9249l0.37148 4.1482q2.1051-2.6623 4.7673-3.8386 2.7242-1.2383 6.5628-1.2383 9.9062 0 9.9062 10.278v13.497q0 1.2383 0.49531 1.7955 0.55722 0.49531 1.7955 0.49531h1.7336v4.5816h-10.649v-20.308q0-3.0957-1.3002-4.4578-1.3002-1.424-4.2101-1.424-3.1576 0-5.2007 1.7955-2.0431 1.7955-2.0431 5.015v12.507q0 1.2383 0.43339 1.7955 0.49531 0.49531 1.6717 0.49531h1.6098v4.5816h-14.178z" fill="#346598" stroke-linecap="round" stroke-width=".16123"/>
|
207
8
|
</svg>
|
novelwriter/assets/manual.pdf
CHANGED
Binary file
|
novelwriter/assets/sample.zip
CHANGED
Binary file
|
@@ -61,6 +61,13 @@ more contributions are listed on the project's <a href="https://crowdin.com/proj
|
|
61
61
|
<a href="https://github.com/altercation/solarized">Solarized</a> themes by Ethan Schoonover (MIT License)
|
62
62
|
</p>
|
63
63
|
|
64
|
+
<h3>Fonts</h3>
|
65
|
+
|
66
|
+
<p>The font used for the main novelWriter logo, mimetype and text banners is:</p>
|
67
|
+
<p>
|
68
|
+
Pridi by Cadson Demak (Open Font License, Version 1.1)
|
69
|
+
</p>
|
70
|
+
|
64
71
|
<h3>Special Mentions</h3>
|
65
72
|
|
66
73
|
<p>Additional thanks to <a href="https://github.com/johnblommers">@johnblommers</a> who was an early user and who has provided a lot
|
@@ -2,46 +2,16 @@
|
|
2
2
|
<html>
|
3
3
|
<body>
|
4
4
|
|
5
|
-
<h2>Release Notes for 2.1</h2>
|
6
|
-
<p><i>Released on
|
5
|
+
<h2>Release Notes for 2.2 RC 1</h2>
|
6
|
+
<p><i>Released on 26 November 2023</i></p>
|
7
7
|
|
8
|
-
<p>
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
are edited in a new Manuscript Build Settings dialog, with a lot more options than the old tool.</p>
|
14
|
-
<p>The reason for this redesign is a long list of feature requests that could not easily be
|
15
|
-
accommodated in the old, much simpler tool. Far from all the features have been added yet, but now
|
16
|
-
that the new tool is in place, they will be gradually added in the coming releases.</p>
|
17
|
-
<p>The key feature added in this release is the extended control you now have for selecting exactly
|
18
|
-
what part of your project is included in a given build definition. You have the same filters for
|
19
|
-
selecting documents and notes, and turning on or off root folders as before, but you can now easily
|
20
|
-
override on a per-document basis what is included or excluded in addition to the filter.</p>
|
21
|
-
<p>A second major improvement is a better tool to format your manuscript headings. You no longer
|
22
|
-
have to look up formatting codes and add them manually. Instead, there is now a heading format
|
23
|
-
editor in the Build Settings dialog for creating the header format, with syntax highlighting
|
24
|
-
included.</p>
|
25
|
-
|
26
|
-
<h3>Other Changes</h3>
|
27
|
-
<p>Among other features is a new option to duplicate documents and folders in the project tree. The
|
28
|
-
duplicate feature is available from the right-click menu. A proper light colour theme has also been
|
29
|
-
added. In most cases it will be the same as the default theme, depending on your platform.</p>
|
30
|
-
<p>There are other, minor improvements as well, and a lot of code improvements under the hood. For
|
31
|
-
a full list of changes, see the detailed changelogs.</p>
|
8
|
+
<p>This is a release candidate of the next release version, and is intended for testing purposes.
|
9
|
+
Please be careful when using this version on live writing projects, and make sure you take frequent
|
10
|
+
backups.</p>
|
11
|
+
<p>Please check the changelog for an overview of changes. The full release notes will be added to
|
12
|
+
the final release.</p>
|
32
13
|
|
33
14
|
<p><i>See also the <a href="https://github.com/vkbo/novelWriter/releases">Releases</a> page.</i></p>
|
34
15
|
|
35
|
-
<a name="patch"></a><h2>Patch Notes</h2>
|
36
|
-
|
37
|
-
<h3>Patch 2.2.1 – 5 November 2023</h3>
|
38
|
-
|
39
|
-
<p>This is a patch release that fixes a layout issue and internationalisation issues with the new
|
40
|
-
Manuscript Build tool. It also fixes a number of issues related to bugs in the underlying Qt
|
41
|
-
framework that affects drag and drop functionality in the project tree. These issues were mostly
|
42
|
-
only affecting Debian Linux package releases.</p>
|
43
|
-
<p>Other, minor issues related to updating the editor on colour theme change and project word list
|
44
|
-
changes have been fixed as well. See the full changelog for more details.</p>
|
45
|
-
|
46
16
|
</body>
|
47
17
|
</html>
|
novelwriter/common.py
CHANGED
@@ -33,8 +33,11 @@ from typing import Any, Literal
|
|
33
33
|
from pathlib import Path
|
34
34
|
from datetime import datetime
|
35
35
|
from configparser import ConfigParser
|
36
|
+
from urllib.parse import urljoin
|
37
|
+
from urllib.request import pathname2url
|
36
38
|
|
37
|
-
from PyQt5.
|
39
|
+
from PyQt5.QtGui import QDesktopServices
|
40
|
+
from PyQt5.QtCore import QCoreApplication, QUrl
|
38
41
|
from PyQt5.QtWidgets import QWidget, qApp
|
39
42
|
|
40
43
|
from novelwriter.enum import nwItemClass, nwItemType, nwItemLayout
|
@@ -487,6 +490,24 @@ def makeFileNameSafe(text: str) -> str:
|
|
487
490
|
return "".join(c for c in text if c.isalnum() or c in allowed)
|
488
491
|
|
489
492
|
|
493
|
+
def getFileSize(path: Path) -> int:
|
494
|
+
"""Return the size of a file."""
|
495
|
+
try:
|
496
|
+
return path.stat().st_size
|
497
|
+
except Exception:
|
498
|
+
return -1
|
499
|
+
|
500
|
+
|
501
|
+
def openExternalPath(path: Path) -> bool:
|
502
|
+
"""Open a path by passing it to the desktop environment."""
|
503
|
+
if Path(path).exists():
|
504
|
+
QDesktopServices.openUrl(
|
505
|
+
QUrl(urljoin("file:", pathname2url(str(path))))
|
506
|
+
)
|
507
|
+
return True
|
508
|
+
return False
|
509
|
+
|
510
|
+
|
490
511
|
# =============================================================================================== #
|
491
512
|
# Other Functions
|
492
513
|
# =============================================================================================== #
|
novelwriter/config.py
CHANGED
@@ -146,12 +146,11 @@ class Config:
|
|
146
146
|
self.doReplaceDash = True # Replace multiple hyphens with dashes
|
147
147
|
self.doReplaceDots = True # Replace three dots with ellipsis
|
148
148
|
|
149
|
-
self.scrollPastEnd = 25 # Number of lines to scroll past end of document
|
150
149
|
self.autoScroll = False # Typewriter-like scrolling
|
151
150
|
self.autoScrollPos = 30 # Start point for typewriter-like scrolling
|
151
|
+
self.scrollPastEnd = True # Scroll past end of document, and centre cursor
|
152
152
|
|
153
153
|
self.wordCountTimer = 5.0 # Interval for word count update in seconds
|
154
|
-
self.bigDocLimit = 800 # Size threshold for heavy editor features in kilobytes
|
155
154
|
self.incNotesWCount = True # The status bar word count includes notes
|
156
155
|
|
157
156
|
self.highlightQuotes = True # Highlight text in quotes
|
@@ -180,9 +179,11 @@ class Config:
|
|
180
179
|
self.spellLanguage = "en"
|
181
180
|
|
182
181
|
# State
|
183
|
-
self.
|
184
|
-
self.
|
185
|
-
self.
|
182
|
+
self.showViewerPanel = True # The panel for the viewer is visible
|
183
|
+
self.showEditToolBar = False # The document editor toolbar visibility
|
184
|
+
self.useShortcodes = False # Use shortcodes for basic formatting
|
185
|
+
self.viewComments = True # Comments are shown in the viewer
|
186
|
+
self.viewSynopsis = True # Synopsis is shown in the viewer
|
186
187
|
|
187
188
|
# Search Bar Switches
|
188
189
|
self.searchCase = False
|
@@ -224,6 +225,7 @@ class Config:
|
|
224
225
|
# Other System Info
|
225
226
|
self.hostName = QSysInfo.machineHostName()
|
226
227
|
self.kernelVer = QSysInfo.kernelVersion()
|
228
|
+
self.isDebug = False
|
227
229
|
|
228
230
|
# Packages
|
229
231
|
self.hasEnchant = False # The pyenchant package
|
@@ -391,8 +393,7 @@ class Config:
|
|
391
393
|
return self._appPath / "assets"
|
392
394
|
|
393
395
|
def lastPath(self) -> Path:
|
394
|
-
"""Return the last path used by the user,
|
395
|
-
"""
|
396
|
+
"""Return the last path used by the user, if it exists."""
|
396
397
|
if isinstance(self._lastPath, Path):
|
397
398
|
if self._lastPath.is_dir():
|
398
399
|
return self._lastPath
|
@@ -400,9 +401,8 @@ class Config:
|
|
400
401
|
|
401
402
|
def backupPath(self) -> Path:
|
402
403
|
"""Return the backup path."""
|
403
|
-
if isinstance(self._backupPath, Path):
|
404
|
-
|
405
|
-
return self._backupPath
|
404
|
+
if isinstance(self._backupPath, Path) and self._backupPath.is_dir():
|
405
|
+
return self._backupPath
|
406
406
|
return self._backPath
|
407
407
|
|
408
408
|
def errorText(self) -> str:
|
@@ -485,6 +485,7 @@ class Config:
|
|
485
485
|
|
486
486
|
self._recentObj.loadCache()
|
487
487
|
self._checkOptionalPackages()
|
488
|
+
self.isDebug = logger.getEffectiveLevel() == logging.DEBUG
|
488
489
|
|
489
490
|
logger.debug("Config instance initialised")
|
490
491
|
|
@@ -575,9 +576,9 @@ class Config:
|
|
575
576
|
self.doReplaceDQuote = conf.rdBool(sec, "repdquotes", self.doReplaceDQuote)
|
576
577
|
self.doReplaceDash = conf.rdBool(sec, "repdash", self.doReplaceDash)
|
577
578
|
self.doReplaceDots = conf.rdBool(sec, "repdots", self.doReplaceDots)
|
578
|
-
self.scrollPastEnd = conf.rdInt(sec, "scrollpastend", self.scrollPastEnd)
|
579
579
|
self.autoScroll = conf.rdBool(sec, "autoscroll", self.autoScroll)
|
580
580
|
self.autoScrollPos = conf.rdInt(sec, "autoscrollpos", self.autoScrollPos)
|
581
|
+
self.scrollPastEnd = conf.rdBool(sec, "scrollpastend", self.scrollPastEnd)
|
581
582
|
self.fmtSQuoteOpen = conf.rdStr(sec, "fmtsquoteopen", self.fmtSQuoteOpen)
|
582
583
|
self.fmtSQuoteClose = conf.rdStr(sec, "fmtsquoteclose", self.fmtSQuoteClose)
|
583
584
|
self.fmtDQuoteOpen = conf.rdStr(sec, "fmtdquoteopen", self.fmtDQuoteOpen)
|
@@ -590,7 +591,6 @@ class Config:
|
|
590
591
|
self.showLineEndings = conf.rdBool(sec, "showlineendings", self.showLineEndings)
|
591
592
|
self.showMultiSpaces = conf.rdBool(sec, "showmultispaces", self.showMultiSpaces)
|
592
593
|
self.wordCountTimer = conf.rdFlt(sec, "wordcounttimer", self.wordCountTimer)
|
593
|
-
self.bigDocLimit = conf.rdInt(sec, "bigdoclimit", self.bigDocLimit)
|
594
594
|
self.incNotesWCount = conf.rdBool(sec, "incnoteswcount", self.incNotesWCount)
|
595
595
|
self.showFullPath = conf.rdBool(sec, "showfullpath", self.showFullPath)
|
596
596
|
self.highlightQuotes = conf.rdBool(sec, "highlightquotes", self.highlightQuotes)
|
@@ -602,33 +602,17 @@ class Config:
|
|
602
602
|
|
603
603
|
# State
|
604
604
|
sec = "State"
|
605
|
-
self.
|
606
|
-
self.
|
607
|
-
self.
|
608
|
-
self.
|
609
|
-
self.
|
610
|
-
self.
|
611
|
-
self.
|
612
|
-
self.
|
613
|
-
self.
|
614
|
-
|
615
|
-
|
616
|
-
# ToDo: These will be loaded for a few minor releases until the users have converted them
|
617
|
-
self.guiFont = conf.rdStr("Main", "guifont", self.guiFont)
|
618
|
-
self.guiFontSize = conf.rdInt("Main", "guifontsize", self.guiFontSize)
|
619
|
-
self.guiLocale = conf.rdStr("Main", "guilang", self.guiLocale)
|
620
|
-
self._backupPath = conf.rdPath("Backup", "backuppath", self._backupPath)
|
621
|
-
self.backupOnClose = conf.rdBool("Backup", "backuponclose", self.backupOnClose)
|
622
|
-
self.askBeforeBackup = conf.rdBool("Backup", "askbeforebackup", self.askBeforeBackup)
|
623
|
-
fmtSingleQuotes = conf.rdStrList(sec, "fmtsinglequote", [])
|
624
|
-
fmtDoubleQuotes = conf.rdStrList(sec, "fmtdoublequote", [])
|
625
|
-
|
626
|
-
if isinstance(fmtSingleQuotes, list) and len(fmtSingleQuotes) == 2:
|
627
|
-
self.fmtSQuoteOpen = fmtSingleQuotes[0]
|
628
|
-
self.fmtSQuoteClose = fmtSingleQuotes[1]
|
629
|
-
if isinstance(fmtDoubleQuotes, list) and len(fmtDoubleQuotes) == 2:
|
630
|
-
self.fmtDQuoteOpen = fmtDoubleQuotes[0]
|
631
|
-
self.fmtDQuoteClose = fmtDoubleQuotes[1]
|
605
|
+
self.showViewerPanel = conf.rdBool(sec, "showviewerpanel", self.showViewerPanel)
|
606
|
+
self.showEditToolBar = conf.rdBool(sec, "showedittoolbar", self.showEditToolBar)
|
607
|
+
self.useShortcodes = conf.rdBool(sec, "useshortcodes", self.useShortcodes)
|
608
|
+
self.viewComments = conf.rdBool(sec, "viewcomments", self.viewComments)
|
609
|
+
self.viewSynopsis = conf.rdBool(sec, "viewsynopsis", self.viewSynopsis)
|
610
|
+
self.searchCase = conf.rdBool(sec, "searchcase", self.searchCase)
|
611
|
+
self.searchWord = conf.rdBool(sec, "searchword", self.searchWord)
|
612
|
+
self.searchRegEx = conf.rdBool(sec, "searchregex", self.searchRegEx)
|
613
|
+
self.searchLoop = conf.rdBool(sec, "searchloop", self.searchLoop)
|
614
|
+
self.searchNextFile = conf.rdBool(sec, "searchnextfile", self.searchNextFile)
|
615
|
+
self.searchMatchCap = conf.rdBool(sec, "searchmatchcap", self.searchMatchCap)
|
632
616
|
|
633
617
|
# Check Values
|
634
618
|
# ============
|
@@ -699,9 +683,9 @@ class Config:
|
|
699
683
|
"repdquotes": str(self.doReplaceDQuote),
|
700
684
|
"repdash": str(self.doReplaceDash),
|
701
685
|
"repdots": str(self.doReplaceDots),
|
702
|
-
"scrollpastend": str(self.scrollPastEnd),
|
703
686
|
"autoscroll": str(self.autoScroll),
|
704
687
|
"autoscrollpos": str(self.autoScrollPos),
|
688
|
+
"scrollpastend": str(self.scrollPastEnd),
|
705
689
|
"fmtsquoteopen": str(self.fmtSQuoteOpen),
|
706
690
|
"fmtsquoteclose": str(self.fmtSQuoteClose),
|
707
691
|
"fmtdquoteopen": str(self.fmtDQuoteOpen),
|
@@ -714,7 +698,6 @@ class Config:
|
|
714
698
|
"showlineendings": str(self.showLineEndings),
|
715
699
|
"showmultispaces": str(self.showMultiSpaces),
|
716
700
|
"wordcounttimer": str(self.wordCountTimer),
|
717
|
-
"bigdoclimit": str(self.bigDocLimit),
|
718
701
|
"incnoteswcount": str(self.incNotesWCount),
|
719
702
|
"showfullpath": str(self.showFullPath),
|
720
703
|
"highlightquotes": str(self.highlightQuotes),
|
@@ -726,7 +709,9 @@ class Config:
|
|
726
709
|
}
|
727
710
|
|
728
711
|
conf["State"] = {
|
729
|
-
"
|
712
|
+
"showviewerpanel": str(self.showViewerPanel),
|
713
|
+
"showedittoolbar": str(self.showEditToolBar),
|
714
|
+
"useshortcodes": str(self.useShortcodes),
|
730
715
|
"viewcomments": str(self.viewComments),
|
731
716
|
"viewsynopsis": str(self.viewSynopsis),
|
732
717
|
"searchcase": str(self.searchCase),
|