novelWriter 2.6rc1__py3-none-any.whl → 2.6.1__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.
Files changed (57) hide show
  1. {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/METADATA +1 -1
  2. {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/RECORD +57 -56
  3. novelwriter/__init__.py +3 -3
  4. novelwriter/assets/i18n/nw_de_DE.qm +0 -0
  5. novelwriter/assets/i18n/nw_en_US.qm +0 -0
  6. novelwriter/assets/i18n/nw_es_419.qm +0 -0
  7. novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
  8. novelwriter/assets/i18n/nw_it_IT.qm +0 -0
  9. novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
  10. novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
  11. novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
  12. novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
  13. novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
  14. novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
  15. novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
  16. novelwriter/assets/i18n/project_de_DE.json +2 -0
  17. novelwriter/assets/i18n/project_en_US.json +2 -0
  18. novelwriter/assets/i18n/project_es_419.json +2 -0
  19. novelwriter/assets/i18n/project_fr_FR.json +3 -1
  20. novelwriter/assets/i18n/project_it_IT.json +2 -0
  21. novelwriter/assets/i18n/project_ja_JP.json +2 -0
  22. novelwriter/assets/i18n/project_nb_NO.json +2 -0
  23. novelwriter/assets/i18n/project_nl_NL.json +2 -0
  24. novelwriter/assets/i18n/project_pl_PL.json +2 -0
  25. novelwriter/assets/i18n/project_pt_BR.json +2 -0
  26. novelwriter/assets/i18n/project_zh_CN.json +2 -0
  27. novelwriter/assets/manual.pdf +0 -0
  28. novelwriter/assets/manual_fr_FR.pdf +0 -0
  29. novelwriter/assets/sample.zip +0 -0
  30. novelwriter/config.py +41 -19
  31. novelwriter/constants.py +4 -0
  32. novelwriter/core/buildsettings.py +7 -0
  33. novelwriter/core/project.py +2 -6
  34. novelwriter/dialogs/preferences.py +14 -5
  35. novelwriter/enum.py +0 -7
  36. novelwriter/extensions/novelselector.py +3 -2
  37. novelwriter/extensions/statusled.py +5 -6
  38. novelwriter/formats/shared.py +12 -11
  39. novelwriter/formats/todocx.py +1 -1
  40. novelwriter/formats/tohtml.py +30 -27
  41. novelwriter/formats/tokenizer.py +14 -8
  42. novelwriter/formats/tomarkdown.py +3 -2
  43. novelwriter/formats/toodt.py +1 -1
  44. novelwriter/formats/toqdoc.py +2 -0
  45. novelwriter/gui/doceditor.py +35 -19
  46. novelwriter/gui/docviewer.py +1 -1
  47. novelwriter/gui/itemdetails.py +1 -0
  48. novelwriter/gui/projtree.py +15 -18
  49. novelwriter/gui/statusbar.py +6 -7
  50. novelwriter/guimain.py +1 -1
  51. novelwriter/tools/dictionaries.py +2 -2
  52. novelwriter/tools/manussettings.py +8 -8
  53. novelwriter/tools/welcome.py +1 -1
  54. {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/LICENSE.md +0 -0
  55. {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/WHEEL +0 -0
  56. {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/entry_points.txt +0 -0
  57. {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: novelWriter
3
- Version: 2.6rc1
3
+ Version: 2.6.1
4
4
  Summary: A markdown-like text editor for planning and writing novels
5
5
  Author-email: Veronica Berglyd Olsen <code@vkbo.net>
6
6
  License: GNU General Public License v3
@@ -1,40 +1,41 @@
1
- novelwriter/__init__.py,sha256=FpUhjOmmT5CoBcmp4xnXISjYAfc-zg5aGTeni8uXVQw,8844
1
+ novelwriter/__init__.py,sha256=1gWN_28OfaF8oIwaLD64wwNjVFSCB4AjJM2dMR7Kha0,8843
2
2
  novelwriter/common.py,sha256=i5kxxzOOg0W60uZ8w1HhwlgEUYKqv60F1JTlu4KEjrY,21751
3
- novelwriter/config.py,sha256=ckvg0ufgBPz69qq-9Tk-RHoDE6vAG5tx4Sc9CJhA4qA,39789
4
- novelwriter/constants.py,sha256=sPAjs_SwLlr5YVDvXrU2ZeJo6m7732oilnWY3jK7KuY,25948
5
- novelwriter/enum.py,sha256=wbYnMgViyvuWEqeAGpNJDnk7AfnXDtxLey8Y4WbWkUo,3713
3
+ novelwriter/config.py,sha256=1pQwU0QsGJ5qAvxZ_iL2vwjTMajjsAuXdTP0IRK1X30,41108
4
+ novelwriter/constants.py,sha256=QVRHVUPE8JlJ4hUSYoVF2qsJtZoB0wvQmvIqQr4eZCU,26086
5
+ novelwriter/enum.py,sha256=bZFqyYVR76B-P1pod1zaYSG2pS8DBQdBP9oqxWJoiFg,3635
6
6
  novelwriter/error.py,sha256=Pq4ogfb4GlqTBC698o9bJ537Ce5kXzyNw2JZxMGmZJM,6849
7
- novelwriter/guimain.py,sha256=MqYuge0OPjfgyysjcQs_pdnSXcwAZq-DxnJJcvpVLBU,49628
7
+ novelwriter/guimain.py,sha256=UsBrDPsF2Y0SY3hzg9A3CWldhUi5ID765vce2dx1rRQ,49653
8
8
  novelwriter/shared.py,sha256=MaIQuDHX3XvW4SbhGaDlfI6YFn_yxzeq92IKi1ri810,17511
9
9
  novelwriter/types.py,sha256=-qQovORltSnUMWn5Hcjv2FJV18t_DumGkggjch_oFRE,5098
10
- novelwriter/assets/manual.pdf,sha256=vUvjZCWBpWsgbw8K7H9JWBH7sB7eWAVLmXvzx-cjxd8,2735354
11
- novelwriter/assets/sample.zip,sha256=h9OHiTX2pyJxORdaFp3qzRbklJWzmg7jVMOh3UAXqe0,28036
12
- novelwriter/assets/i18n/nw_de_DE.qm,sha256=jMjb_fnKDaBWX-qso1Ci76N0d5j_zQ0uu7c0NgVWp40,97177
13
- novelwriter/assets/i18n/nw_en_US.qm,sha256=a7Q5U9C5vFq8xk-xK3h-XFnWmG_85OHnUdScYDrZNCg,90203
14
- novelwriter/assets/i18n/nw_es_419.qm,sha256=LCNGv7RUpgTCWkA6oOyfPckGl-sKO1hmdGl_naQO8AY,99798
15
- novelwriter/assets/i18n/nw_fr_FR.qm,sha256=BwHQadfuvJyx2koKC2McMWrjJI7KQTEYq8mLe6n1wfI,100161
16
- novelwriter/assets/i18n/nw_it_IT.qm,sha256=ezbPAzRdh0sG4M4U3gcfldD4yJNtCZK6uowqK4SHMx4,99883
17
- novelwriter/assets/i18n/nw_ja_JP.qm,sha256=lrpFS5T1mW3dPcAGRYLcB3vcMBl5MbAqgOtbbao2clk,74622
18
- novelwriter/assets/i18n/nw_nb_NO.qm,sha256=bCeJnRX-e_KHEahvMVLxiu4PLW3V-AO3M1oKjRtXKRE,92747
19
- novelwriter/assets/i18n/nw_nl_NL.qm,sha256=WCnVcavSwehklScJQTU-AhogQzrtN1IHYT2cK5B-9gg,96703
20
- novelwriter/assets/i18n/nw_pl_PL.qm,sha256=oSy7GDTNNRqZy4tnp7llCVE6CkkqoJNEiI1s1p_wp5w,95451
21
- novelwriter/assets/i18n/nw_pt_BR.qm,sha256=iSuAZk2-sKrj_nNCcWUmL4bp7PAq83FrzNGbt3uSNoU,98365
22
- novelwriter/assets/i18n/nw_ru_RU.qm,sha256=W10A9BAdYhRbZRzHCpaN03G7Xba7hzl02L6bGveL_0o,94842
23
- novelwriter/assets/i18n/nw_zh_CN.qm,sha256=ndKC1LJffwRKg4K7aVz9x7xWwInH3rUb_aJBkd3UAj8,67298
24
- novelwriter/assets/i18n/project_de_DE.json,sha256=fuEYohM2xm0mLXmibbU0TISr0BCZb2yOiBLCUmKhDJQ,2810
10
+ novelwriter/assets/manual.pdf,sha256=uqL-ml8_KJ5j1w9aXNujbrO_fuyiUl_YUDsJczfqBtA,2687778
11
+ novelwriter/assets/manual_fr_FR.pdf,sha256=EUJk5-5IBxH1HvUt6ZHgmTtgxWEnIAWybJq5M5l6LmE,2719136
12
+ novelwriter/assets/sample.zip,sha256=13p5E9LWb06ry3CEYc9-c3pd_7LK7WxdHGRWGzHOEWI,28035
13
+ novelwriter/assets/i18n/nw_de_DE.qm,sha256=T7sqOXBBW4lakypIXCvBVqkvBFtThClmMsOgh5CCyHs,102407
14
+ novelwriter/assets/i18n/nw_en_US.qm,sha256=G8orcdkczAjSXFmbjGk6Los5dW3yADhKl2HuQaF6aEg,95153
15
+ novelwriter/assets/i18n/nw_es_419.qm,sha256=wxYAyhPu-LWPPJ-m5cG34ch8rjMWXFrGhdP4CMcSwNY,105274
16
+ novelwriter/assets/i18n/nw_fr_FR.qm,sha256=TpfOCWH5gz9W0OTEHXOBuECcqdyEiJYAts761JD1J_A,105257
17
+ novelwriter/assets/i18n/nw_it_IT.qm,sha256=MmPWCYj25QoY92-BwZG6_RilVEXvGA_wCptgVt8MSM4,104997
18
+ novelwriter/assets/i18n/nw_ja_JP.qm,sha256=i3I2DCEEsh4o891DcxUXF4Jz736EvPEbOzkxjC1DaIE,78758
19
+ novelwriter/assets/i18n/nw_nb_NO.qm,sha256=akO2Or98k903AJB5Z1x_PFOsDXp4LQjS6P47pBbz97M,97725
20
+ novelwriter/assets/i18n/nw_nl_NL.qm,sha256=20gCLmjMD8w9XCQkiulfBZT_NgmHUq8z_XSgP0Wty9Q,96613
21
+ novelwriter/assets/i18n/nw_pl_PL.qm,sha256=SVni2gmKNWaXJNZUvxZLMycBp7Q5myHmG99z-oPodtY,100243
22
+ novelwriter/assets/i18n/nw_pt_BR.qm,sha256=x73R7y1VrXApgZeb1M-69nlk0qARSMapZx-PYkSDyVE,103309
23
+ novelwriter/assets/i18n/nw_ru_RU.qm,sha256=WR0B0Jc2Vm64iYO6Q-GqOMCX1JsyB9VJqv-w4jAM4O8,94740
24
+ novelwriter/assets/i18n/nw_zh_CN.qm,sha256=AjV2BT7XgD1LWaAqweQNxrh7sITtpf-amRq4FbwL6Xc,70408
25
+ novelwriter/assets/i18n/project_de_DE.json,sha256=-9-FF2zYD9ulez9dXAKLbFWsbEX2KLXKE1cJS8csx1g,2866
25
26
  novelwriter/assets/i18n/project_en_GB.json,sha256=CvBOO8kaW0k7NlwvxFi62Br9HYKJKQLDk1nQfvXOj48,2537
26
- novelwriter/assets/i18n/project_en_US.json,sha256=EcQAVEiQgRL3qobuzkPTfOWIxAc3Om-tA7nXUFFXEdI,2483
27
- novelwriter/assets/i18n/project_es_419.json,sha256=Z6CAhc0hzekUZFDM-0ykRRsckJG4c2AETy4Xa_f2T7s,2730
28
- novelwriter/assets/i18n/project_fr_FR.json,sha256=CBojo05gdhxev5pFg889ENe_CKOHSDv3oj8SmkBFqGg,2788
29
- novelwriter/assets/i18n/project_it_IT.json,sha256=C_S5P86hGHaJ_sE-B3ceQGJgDzkXalyjF816oClf9h0,2566
30
- novelwriter/assets/i18n/project_ja_JP.json,sha256=8P03f2D9o2TlSxFU5ugRa-DJDeDZr_I_omDWN-xv3lY,2393
31
- novelwriter/assets/i18n/project_nb_NO.json,sha256=e8E9c188KRPJfgZa298hDiaLEuhjHMxbRMaIF8HaVew,2298
32
- novelwriter/assets/i18n/project_nl_NL.json,sha256=qUEEjLMRtvt9VuNmjb_qOVCXqUCENHskCEyp5YlPMc4,2683
27
+ novelwriter/assets/i18n/project_en_US.json,sha256=CvBOO8kaW0k7NlwvxFi62Br9HYKJKQLDk1nQfvXOj48,2537
28
+ novelwriter/assets/i18n/project_es_419.json,sha256=NQa1iAyQaoNyFSAfrPXNaoKyStyw7nexnGUHf-UMkOo,2792
29
+ novelwriter/assets/i18n/project_fr_FR.json,sha256=6ATiNU0YGEXwx_c2LpDvP7eCUDdUiGxtrssCVTiiyC8,2859
30
+ novelwriter/assets/i18n/project_it_IT.json,sha256=LHbGZT6MOHOmIKrl6HD1-Tl_RxKbeEL0eXqPVK0VwM8,2633
31
+ novelwriter/assets/i18n/project_ja_JP.json,sha256=CK8yvTAr_58mDMSU-XAXYk3ny9Iryp21EZ80dGJ60E8,2451
32
+ novelwriter/assets/i18n/project_nb_NO.json,sha256=CS4nU-8AnnmQLiET5wAsFa4F7UHimjCTbxzmtGugw0A,2350
33
+ novelwriter/assets/i18n/project_nl_NL.json,sha256=wlXDfy4rMKyXP0X3r22qSNFuseO33bePAHqvIVk_tHQ,2742
33
34
  novelwriter/assets/i18n/project_nn_NO.json,sha256=7ZfmtFWHcDMiLVqdOEDHQWHbpoC_bv5ESmf_-CoYiks,2250
34
- novelwriter/assets/i18n/project_pl_PL.json,sha256=msXu3rNhJ19ytVespoXQ95nZ-mFis5rlLeCPK4A3zS8,3461
35
- novelwriter/assets/i18n/project_pt_BR.json,sha256=FDxIeSlf3v8AcrWfgwk7UOMRDmb2hWdDoabsBq5rkL8,2763
35
+ novelwriter/assets/i18n/project_pl_PL.json,sha256=2mAchml-aT95ZT9qi3pAEMyyze5swkRa-OCWq6ZMoGk,3517
36
+ novelwriter/assets/i18n/project_pt_BR.json,sha256=lCtbr_i2gN3Atii1EgMn-B5SMP71_x4YsF7wXx7Hi7s,2828
36
37
  novelwriter/assets/i18n/project_ru_RU.json,sha256=Lq8msxzjhkFHXPJAmEEyjoFOUV28CLJXmayY3h3jiAo,4075
37
- novelwriter/assets/i18n/project_zh_CN.json,sha256=cfl0TsnbISYUvygOw015y0x0REDG97xR0yjyJ85Jm34,2322
38
+ novelwriter/assets/i18n/project_zh_CN.json,sha256=CGnJO6ElV40fm7yElNtDwHYsd_32d-cR7h1jG4xx4eY,2377
38
39
  novelwriter/assets/icons/none.svg,sha256=NRN9vMzohg7Ner71GwPthrCG0uA81TpY8UmKb8-L-pM,251
39
40
  novelwriter/assets/icons/novelwriter.ico,sha256=OJRIeeUcmS7Di51NA3uF5_Ov4V8T47gQ9qWv6C7qDeA,171059
40
41
  novelwriter/assets/icons/novelwriter.svg,sha256=Ad_SgOdXSDJtFR3DLCx6Afme15I78r38_YxCfO9F2z4,8511
@@ -286,7 +287,7 @@ novelwriter/assets/themes/default_light.conf,sha256=2a4SXzlbZpyV9EX3BuFSRFYuLuzu
286
287
  novelwriter/assets/themes/dracula.conf,sha256=pUvu7FS1nRPj3PyU3NZMR0WSb5sIa0oLpSa2XTzsh98,1425
287
288
  novelwriter/assets/themes/solarized_dark.conf,sha256=7dDjs8aiFuAjl--hqMJQEExrfCgAapiPY82CL6aAo-I,916
288
289
  novelwriter/assets/themes/solarized_light.conf,sha256=psCPVWcjAKB5y8H_E_h5zYUifxh5YpdFdBzxFofIHa0,918
289
- novelwriter/core/buildsettings.py,sha256=q5ZgkUKJO1-tktAJcgmgKMF5r6Op_UrE_ZTyw-_nyoM,24117
290
+ novelwriter/core/buildsettings.py,sha256=JZ56-8aBXUFxIygktZ_r62y3eWVLgLz1GAVvdZR0Hjo,24683
290
291
  novelwriter/core/coretools.py,sha256=sjhU0disSrOrc7X1ObahcjIUwXxyZhG3LiAUBvwBh4I,21175
291
292
  novelwriter/core/docbuild.py,sha256=svK66k4-x203zMYp6P5T5TMKPJDQRLuRAsDUfauIRBs,13778
292
293
  novelwriter/core/document.py,sha256=t52H5RrKu3Un-55Lhdd6cu_MN2-__bdXIJZDWzl72TM,12155
@@ -294,7 +295,7 @@ novelwriter/core/index.py,sha256=_hbKqnisf-5-WUYtju5EqpPKhfo2gsaiT28ZGXfalgc,486
294
295
  novelwriter/core/item.py,sha256=hPhR5vtn-FfEgx8OSJ7IbuYCqZOQ2kiPf_SDxbkUBFw,18819
295
296
  novelwriter/core/itemmodel.py,sha256=1W7A-uLI1g2sOe7gietKiV15McF6rMY1VMVJ4L0PpAc,18025
296
297
  novelwriter/core/options.py,sha256=wJ3PJrtwbLPCs-WEvMLTWTOdlX-bn8oaUBZqYNZLY5w,7482
297
- novelwriter/core/project.py,sha256=11g3CTQFqzwJBKfNG0AqTsrEonb97vdymC_cM4Ggjz0,21067
298
+ novelwriter/core/project.py,sha256=XNj5WltjIpUzGrPNZqJChte7lyVajYvf5JkqnZgA4kI,20941
298
299
  novelwriter/core/projectdata.py,sha256=EPgvvC8U8qAL3UMZSSuUNiMc9kifULJaexQ3N09Wj4A,10006
299
300
  novelwriter/core/projectxml.py,sha256=Y7_cTzd-kNK0yyvJIiWkdDvZJo6f2WveYM6IqZllHJY,22038
300
301
  novelwriter/core/sessions.py,sha256=XMp6JQcZYLpWRqio28pBFMTmj4EVak61rL7c3qC9TQY,4430
@@ -306,55 +307,55 @@ novelwriter/dialogs/about.py,sha256=TPdkAPpPsAx7zhCbfBrSn-GhXfz-xG1OSJIePdI-E1k,
306
307
  novelwriter/dialogs/docmerge.py,sha256=8Xu_kan7u9LI2__HCnEsDZjLcfn5XP-tFjWvE8VXrDs,6120
307
308
  novelwriter/dialogs/docsplit.py,sha256=nt5L_SuB7QlfDYgBecd57bir5RVIcbpptCMdIBg4-Fs,9306
308
309
  novelwriter/dialogs/editlabel.py,sha256=3x34vjqkdIvS1EdR6D1DHJgVcR_Ny-BkhMR6PKtnUOc,2988
309
- novelwriter/dialogs/preferences.py,sha256=__cUBVg5pMk0Er9f4GoVE0Wk7GOgiL2gBYDg3wViW2Q,38747
310
+ novelwriter/dialogs/preferences.py,sha256=CQdanGVIfZu6-u2Is9oewXWYbkhTpHTERwvfEqH2ixo,39131
310
311
  novelwriter/dialogs/projectsettings.py,sha256=uTTDKL5oZhj-DdCfxCOgvN8ZkoDg1Ds7j1wrYMHssHo,29949
311
312
  novelwriter/dialogs/quotes.py,sha256=t8VfrjcBknebtU88rgNEkgQK28qbAd7BN8HNFa0EuOA,4752
312
313
  novelwriter/dialogs/wordlist.py,sha256=zUPmeTp57_VEiIv-lnpuqfYWOYwo1GTrmgiZaXvFJ8U,8700
313
314
  novelwriter/extensions/configlayout.py,sha256=mw5n6bT4J5xJKtzy9dVf3RZCzejxOMSyIhzwbiMbDMQ,10828
314
315
  novelwriter/extensions/eventfilters.py,sha256=82DcBd900zQNce-3XQkQWXBuUuYfYpO_zlNt-p4NXBw,2547
315
316
  novelwriter/extensions/modified.py,sha256=EHkhJV5gR9DV2oOni0eiorFE0yfCfO860Bee3i3RHrA,6428
316
- novelwriter/extensions/novelselector.py,sha256=YjdsV8EIcnaM09TPP32-AYzw_sZkmI0hoBVP_zzEf8Y,3819
317
+ novelwriter/extensions/novelselector.py,sha256=g8pBkUoJxvHA1LX681ogfhIEhzHHPWjSY7tFJKSiIiE,3822
317
318
  novelwriter/extensions/pagedsidebar.py,sha256=Vw3creX1eHRHPSQQrQAhWZPw5-U-SjTlY_xhEfLnv8g,7273
318
319
  novelwriter/extensions/progressbars.py,sha256=fbFmfhO9FVNUSQqRB0mzEC4TyHvqpVvGXI2XObBMb6U,4653
319
- novelwriter/extensions/statusled.py,sha256=pgmoMimVLITcSVs-25Fy0rB7z-zXYNylxPjNciGsDy8,2968
320
+ novelwriter/extensions/statusled.py,sha256=5XZKNAsuJyrbG1LNm-RL6MDh3DE2heXuZmhHidPYuNQ,2893
320
321
  novelwriter/extensions/switch.py,sha256=W3K4of_fjhGj90P-5AeBSH9rukdfKAAckB5AbA3Ly_8,4324
321
322
  novelwriter/extensions/switchbox.py,sha256=xDdCKXqd4qOjZFciU6eJRrOYEv74MB2oQivEXx1sztg,4223
322
323
  novelwriter/extensions/versioninfo.py,sha256=gpV-sr1-nK_IjfkAC3ad3uqteFy7Lf2sYT46Osbcp6k,5060
323
- novelwriter/formats/shared.py,sha256=RRzDtQN_0ZqS54aLNR7yny8pQGBuI7YS7A5mvVYGyew,4605
324
- novelwriter/formats/todocx.py,sha256=4CNG0vOs6Ec9jGRPm9MgJUfo9VxD-5QNVPVrcaww9is,40279
325
- novelwriter/formats/tohtml.py,sha256=avC2aO_eOb9-5FI4zQ9uAZdZ0HpXOn8Hm6bER9JFK7s,17079
326
- novelwriter/formats/tokenizer.py,sha256=geeS70cuYlJJqjSIMjk_4owgW-6khPGMGQ_HxCzPz-8,48428
327
- novelwriter/formats/tomarkdown.py,sha256=vFmiCdaEKgZ_6pwTjtLnPlwLt19b4tPMzhGl7eo2-8c,6916
328
- novelwriter/formats/toodt.py,sha256=uH9htj75nQUxv1Oo58hqpwjJJlfwuqQV2m2DSuogWaM,58394
329
- novelwriter/formats/toqdoc.py,sha256=kV4IhvpHzbnNaPtbkDRoLGBqg55uq4pxbbWFRcylIx8,17910
324
+ novelwriter/formats/shared.py,sha256=Ni6bYdxOeeDmrLE-8TkgpF0OTlblGTmgrY6rcHC_R08,4666
325
+ novelwriter/formats/todocx.py,sha256=5gCtY18--9LPRTQJzb99lG4_5u9sEPQGWZRZ3D02_rI,40296
326
+ novelwriter/formats/tohtml.py,sha256=t9B2uZPKKLubjsEttb3INf3esCvK-GArgynFnY7EkGE,17128
327
+ novelwriter/formats/tokenizer.py,sha256=LbLV1XYo8KuAhR3v4CgVTYqzJB-vNIlFSLIYsFFBWA8,48659
328
+ novelwriter/formats/tomarkdown.py,sha256=95k9DOGtXiB5nTHBephGSSb1GxGgoTctr3rXXBubauM,6983
329
+ novelwriter/formats/toodt.py,sha256=lX-KvH8kyOPhyvNOcWIPy6ffjyG6ccZssWJJyuB0J4I,58411
330
+ novelwriter/formats/toqdoc.py,sha256=mJzNyKLzyx4w2m04N-gh-ch4i6iY8VRsrHGzYduDGzA,18081
330
331
  novelwriter/formats/toraw.py,sha256=niaFt6tVSIwGfMAEP-suDfzzTRN8M08V3KJClbG3hcU,2842
331
- novelwriter/gui/doceditor.py,sha256=bYse2QK_JPyiT_y_uIFtATsMO8NNM9DHpfXwVk0cf_o,116618
332
+ novelwriter/gui/doceditor.py,sha256=3EjFJUOuxdAdPiyHa7BYSHqoO5ntr_3P7MYhSJWEzQU,116894
332
333
  novelwriter/gui/dochighlight.py,sha256=z6WcQfkHzSlXg4-DALtJUHl_8wnikP-YT0iIZmnCV8I,19680
333
- novelwriter/gui/docviewer.py,sha256=LQKEJE5155hq4qHI0G694By2dzaobBMnPiAEr3e9Bgc,34516
334
+ novelwriter/gui/docviewer.py,sha256=SJ38_Zn6CMmSRdVF3EPztTQe907yWSqQr5B-0Mg6iVo,34518
334
335
  novelwriter/gui/docviewerpanel.py,sha256=3MXehPMyf__mpNaKPNow1I-9CUme_8cpXd-cOCAxWls,19726
335
336
  novelwriter/gui/editordocument.py,sha256=opqrQc_GMNa9InQBAWW_WugSHVO_5cievX7DuF1Cbm4,4723
336
- novelwriter/gui/itemdetails.py,sha256=K0mfBDDnRHKoq2OLS_nXzg-6qRnfOIxRgm0q5OhJTfg,9636
337
+ novelwriter/gui/itemdetails.py,sha256=HQ2E1p9EiDsuNTgULEV__AzqW1DJ6qjB5DWILtlkeyg,9678
337
338
  novelwriter/gui/mainmenu.py,sha256=VKMgE8_jxRM8973ycArOpGMaTwHy-7ju2TIzm2-Zqqo,41629
338
339
  novelwriter/gui/noveltree.py,sha256=-XKR_zBGjbO44hEknhZt64NeW00LIC_31LQURgjsv_U,27136
339
340
  novelwriter/gui/outline.py,sha256=e1U_KakgnJX044nmP5NsXzbrSVd-G_t0tJ_531zMXZI,38446
340
- novelwriter/gui/projtree.py,sha256=jfPygfefhRsp2iidX6MGe3fYnmKcrH7WDX-G3lf-xQc,52964
341
+ novelwriter/gui/projtree.py,sha256=ffXSwCIZotT28n6zIvN7UhwA5az1dgWh9Mff6gc4h2Y,53062
341
342
  novelwriter/gui/search.py,sha256=xP5M4iEA-6Hulgk2JwNqg8_myWi2KT8Yk9ufw4H3gh0,12844
342
343
  novelwriter/gui/sidebar.py,sha256=oPlbPu7jlE5J1P5Jn9X5YtvLgInzPz2Jr7AC98Z2S4k,6286
343
- novelwriter/gui/statusbar.py,sha256=XVonGSeSu35nweE6uXrhFzrBEIaijIJsLLWY64hQ6lk,9632
344
+ novelwriter/gui/statusbar.py,sha256=0XdsejOoPUCXxe_AN0f2w_4Duufa7wlUSRZg-EEeoYw,9487
344
345
  novelwriter/gui/theme.py,sha256=__9xz8RxP7fSEdpi_8-ZzewjBsBc7sxn82uE744Sw7U,32249
345
346
  novelwriter/text/counting.py,sha256=JEU-kv5BCdiFfTQc8Uk5Sym2WbRgJ4AKtixlwQIZe1M,4407
346
347
  novelwriter/text/patterns.py,sha256=T2BpUcVvXXFIadIdOqOYF1eih4LFBiRAZ7CtRuO85c8,7687
347
- novelwriter/tools/dictionaries.py,sha256=SlEAK21y5GEykJMU4O3OI_TUHVp0x3sRNW4xUaS5q0I,9268
348
+ novelwriter/tools/dictionaries.py,sha256=EhBGOvAW9AJnA29_GYan5XcRfciL6tSq7ZB-mmF8Ums,9250
348
349
  novelwriter/tools/lipsum.py,sha256=NZdCJ5TNwKdfwYqtRXtQ5pDbtVFbQzxiGoNPctpCHDk,4819
349
350
  novelwriter/tools/manusbuild.py,sha256=fUAGp7uaPY2rFUXRaGyE8Fce49z4-xkz1i8GAV2fXlI,14107
350
351
  novelwriter/tools/manuscript.py,sha256=ib5FKpcQR_A6jBWuTfQCHpx32ySvE4YFtz56a8pLAxE,40053
351
- novelwriter/tools/manussettings.py,sha256=r7SxaJZp5QnvMlhwoAPUPerAhzDUwDKv5ng3HHIHsQg,60831
352
+ novelwriter/tools/manussettings.py,sha256=jn8E6SroiuwHv5NINvRgYgaW85ji2li2bZW2NSobvTI,60883
352
353
  novelwriter/tools/noveldetails.py,sha256=k17ZH21M7yfLNEhY_qD-GREia5CxanN9dbVWt1selkk,18506
353
- novelwriter/tools/welcome.py,sha256=STHc6vLBN07MFGIbjhVbopVHTgJDvldzCC40-e1hUtQ,28018
354
+ novelwriter/tools/welcome.py,sha256=kE8HWfgvvncwEQnfXPoFipNzugpe2JemcVJr2kNiHIc,28020
354
355
  novelwriter/tools/writingstats.py,sha256=tuIkHkkiAPJv4zUBIFyh6_mVHRK-beYSc_zBUKG8MnM,22792
355
- novelWriter-2.6rc1.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
356
- novelWriter-2.6rc1.dist-info/METADATA,sha256=H3d21lUrJE1SbJXBjEQlhPgFyMTASdiop5PqvPYPW38,2582
357
- novelWriter-2.6rc1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
358
- novelWriter-2.6rc1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
359
- novelWriter-2.6rc1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
360
- novelWriter-2.6rc1.dist-info/RECORD,,
356
+ novelWriter-2.6.1.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
357
+ novelWriter-2.6.1.dist-info/METADATA,sha256=NeYxeDuy93SroSEwsD_UwERbeyy0Mv9Q2PofQctPb2E,2581
358
+ novelWriter-2.6.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
359
+ novelWriter-2.6.1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
360
+ novelWriter-2.6.1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
361
+ novelWriter-2.6.1.dist-info/RECORD,,
novelwriter/__init__.py CHANGED
@@ -47,9 +47,9 @@ __license__ = "GPLv3"
47
47
  __author__ = "Veronica Berglyd Olsen"
48
48
  __maintainer__ = "Veronica Berglyd Olsen"
49
49
  __email__ = "code@vkbo.net"
50
- __version__ = "2.6rc1"
51
- __hexversion__ = "0x020600c1"
52
- __date__ = "2025-01-09"
50
+ __version__ = "2.6.1"
51
+ __hexversion__ = "0x020601f0"
52
+ __date__ = "2025-02-02"
53
53
  __status__ = "Stable"
54
54
  __domain__ = "novelwriter.io"
55
55
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Synopsis",
3
3
  "Short Description": "Kurzbeschreibung",
4
+ "Footnotes": "Fußnoten",
4
5
  "Comment": "Kommentar",
5
6
  "Notes": "Notizen",
6
7
  "Tag": "Schlagwort",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Objekte",
14
15
  "Entities": "Organisationen",
15
16
  "Custom": "Benutzerdefiniert",
17
+ "New Page": "Neue Seite",
16
18
  "0": "Null",
17
19
  "1": "Eins",
18
20
  "2": "Zwei",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Synopsis",
3
3
  "Short Description": "Short Description",
4
+ "Footnotes": "Footnotes",
4
5
  "Comment": "Comment",
5
6
  "Notes": "Notes",
6
7
  "Tag": "Tag",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Objects",
14
15
  "Entities": "Entities",
15
16
  "Custom": "Custom",
17
+ "New Page": "New Page",
16
18
  "0": "Zero",
17
19
  "1": "One",
18
20
  "2": "Two",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Sinopsis",
3
3
  "Short Description": "Breve Descripción",
4
+ "Footnotes": "Notas al pie",
4
5
  "Comment": "Comentario",
5
6
  "Notes": "Notas",
6
7
  "Tag": "Etiqueta",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Objetos",
14
15
  "Entities": "Entidades",
15
16
  "Custom": "Otros",
17
+ "New Page": "Nueva Página",
16
18
  "0": "Cero",
17
19
  "1": "Uno",
18
20
  "2": "Dos",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Synopsis",
3
3
  "Short Description": "Description sommaire",
4
+ "Footnotes": "Notes de bas de page",
4
5
  "Comment": "Commentaire",
5
6
  "Notes": "Notes",
6
7
  "Tag": "Étiquette",
@@ -13,7 +14,8 @@
13
14
  "Objects": "Objets",
14
15
  "Entities": "Entités",
15
16
  "Custom": "Personnalisé",
16
- "0": "Zero",
17
+ "New Page": "Nouvelle page",
18
+ "0": "Zéro",
17
19
  "1": "Un",
18
20
  "2": "Deux",
19
21
  "3": "Trois",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Sinossi",
3
3
  "Short Description": "Breve descrizione",
4
+ "Footnotes": "Note a piè pagina",
4
5
  "Comment": "Commento",
5
6
  "Notes": "Note",
6
7
  "Tag": "Etichetta",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Oggetti",
14
15
  "Entities": "Enti",
15
16
  "Custom": "Personalizzato",
17
+ "New Page": "Nuova pagina",
16
18
  "0": "Zero",
17
19
  "1": "Uno",
18
20
  "2": "Due",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "あらすじ",
3
3
  "Short Description": "短い説明",
4
+ "Footnotes": "脚注",
4
5
  "Comment": "コメント ",
5
6
  "Notes": "ノート",
6
7
  "Tag": "タグ",
@@ -13,6 +14,7 @@
13
14
  "Objects": "オブジェクト",
14
15
  "Entities": "エンティティ",
15
16
  "Custom": "カスタム",
17
+ "New Page": "新規ページ",
16
18
  "0": "零",
17
19
  "1": "一",
18
20
  "2": "二",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Sammendrag",
3
3
  "Short Description": "Kort beskrivelse",
4
+ "Footnotes": "Fotnoter",
4
5
  "Comment": "Kommentar",
5
6
  "Notes": "Notat",
6
7
  "Tag": "Knagg",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Objekter",
14
15
  "Entities": "Enheter",
15
16
  "Custom": "Annet",
17
+ "New Page": "Ny side",
16
18
  "0": "null",
17
19
  "1": "én",
18
20
  "2": "to",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Synopsis",
3
3
  "Short Description": "Korte beschrijving",
4
+ "Footnotes": "Voetnoten",
4
5
  "Comment": "Opmerking",
5
6
  "Notes": "Notities",
6
7
  "Tag": "Label",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Objecten",
14
15
  "Entities": "Entiteiten",
15
16
  "Custom": "Aangepast",
17
+ "New Page": "Nieuwe pagina",
16
18
  "0": "nul",
17
19
  "1": "één",
18
20
  "2": "twee",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Streszczenie",
3
3
  "Short Description": "Krótki opis",
4
+ "Footnotes": "Przypisy",
4
5
  "Comment": "Komentarz",
5
6
  "Notes": "Notatki",
6
7
  "Tag": "Znacznik",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Obiekty",
14
15
  "Entities": "Podmioty",
15
16
  "Custom": "Różne",
17
+ "New Page": "Nowa strona",
16
18
  "0": "zero",
17
19
  "1": "pierwszy",
18
20
  "2": "drugi",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Sinopse",
3
3
  "Short Description": "Descrição breve",
4
+ "Footnotes": "Notas de rodapé",
4
5
  "Comment": "Comentário",
5
6
  "Notes": "Notas",
6
7
  "Tag": "Etiqueta",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Objetos",
14
15
  "Entities": "Entidades",
15
16
  "Custom": "Outros",
17
+ "New Page": "Nova página",
16
18
  "0": "Zero",
17
19
  "1": "Um",
18
20
  "2": "Dois",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "概要",
3
3
  "Short Description": "简短描述",
4
+ "Footnotes": "注释",
4
5
  "Comment": "注释",
5
6
  "Notes": "笔记",
6
7
  "Tag": "标签",
@@ -13,6 +14,7 @@
13
14
  "Objects": "物品",
14
15
  "Entities": "条目",
15
16
  "Custom": "自定义",
17
+ "New Page": "新建页面",
16
18
  "0": "零",
17
19
  "1": "一",
18
20
  "2": "二",
Binary file
Binary file
Binary file
novelwriter/config.py CHANGED
@@ -32,6 +32,7 @@ import sys
32
32
  from datetime import datetime
33
33
  from pathlib import Path
34
34
  from time import time
35
+ from typing import TYPE_CHECKING
35
36
 
36
37
  from PyQt5.QtCore import (
37
38
  PYQT_VERSION, PYQT_VERSION_STR, QT_VERSION, QT_VERSION_STR, QLibraryInfo,
@@ -47,6 +48,9 @@ from novelwriter.common import (
47
48
  from novelwriter.constants import nwFiles, nwUnicode
48
49
  from novelwriter.error import formatException, logException
49
50
 
51
+ if TYPE_CHECKING: # pragma: no cover
52
+ from novelwriter.core.projectdata import NWProjectData
53
+
50
54
  logger = logging.getLogger(__name__)
51
55
 
52
56
 
@@ -101,8 +105,11 @@ class Config:
101
105
  self._qtTrans = {}
102
106
 
103
107
  # PDF Manual
104
- pdfDocs = self._appPath / "assets" / "manual.pdf"
105
- self.pdfDocs = pdfDocs if pdfDocs.is_file() else None
108
+ self._manuals: dict[str, Path] = {}
109
+ if (assets := self._appPath / "assets").is_dir():
110
+ for item in assets.iterdir():
111
+ if item.is_file() and item.stem.startswith("manual") and item.suffix == ".pdf":
112
+ self._manuals[item.stem] = item
106
113
 
107
114
  # User Settings
108
115
  # =============
@@ -112,7 +119,7 @@ class Config:
112
119
 
113
120
  # General GUI Settings
114
121
  self.guiLocale = self._qLocale.name()
115
- self.guiTheme = "default" # GUI theme
122
+ self.guiTheme = "default_light" # GUI theme
116
123
  self.guiSyntax = "default_light" # Syntax theme
117
124
  self.guiFont = QFont() # Main GUI font
118
125
  self.guiScale = 1.0 # Set automatically by Theme class
@@ -135,6 +142,7 @@ class Config:
135
142
  self.emphLabels = True # Add emphasis to H1 and H2 item labels
136
143
  self.backupOnClose = False # Flag for running automatic backups
137
144
  self.askBeforeBackup = True # Flag for asking before running automatic backup
145
+ self.askBeforeExit = True # Flag for asking before exiting the app
138
146
 
139
147
  # Text Editor Settings
140
148
  self.textFont = QFont() # Editor font
@@ -257,6 +265,10 @@ class Config:
257
265
  def hasError(self) -> bool:
258
266
  return self._hasError
259
267
 
268
+ @property
269
+ def pdfDocs(self) -> Path | None:
270
+ return self._manuals.get(f"manual_{self.locale.name()}", self._manuals.get("manual"))
271
+
260
272
  @property
261
273
  def locale(self) -> QLocale:
262
274
  return self._dLocale
@@ -628,6 +640,7 @@ class Config:
628
640
  self._backupPath = conf.rdPath(sec, "backuppath", self._backupPath)
629
641
  self.backupOnClose = conf.rdBool(sec, "backuponclose", self.backupOnClose)
630
642
  self.askBeforeBackup = conf.rdBool(sec, "askbeforebackup", self.askBeforeBackup)
643
+ self.askBeforeExit = conf.rdBool(sec, "askbeforeexit", self.askBeforeExit)
631
644
 
632
645
  # Editor
633
646
  sec = "Editor"
@@ -739,6 +752,7 @@ class Config:
739
752
  "backuppath": str(self._backupPath),
740
753
  "backuponclose": str(self.backupOnClose),
741
754
  "askbeforebackup": str(self.askBeforeBackup),
755
+ "askbeforeexit": str(self.askBeforeExit),
742
756
  }
743
757
 
744
758
  conf["Editor"] = {
@@ -842,29 +856,30 @@ class RecentProjects:
842
856
 
843
857
  def __init__(self, config: Config) -> None:
844
858
  self._conf = config
845
- self._data = {}
859
+ self._data: dict[str, dict[str, str | int]] = {}
860
+ self._map: dict[str, str] = {}
846
861
  return
847
862
 
848
863
  def loadCache(self) -> bool:
849
864
  """Load the cache file for recent projects."""
850
865
  self._data = {}
851
-
866
+ self._map = {}
852
867
  cacheFile = self._conf.dataPath(nwFiles.RECENT_FILE)
853
868
  if cacheFile.is_file():
854
869
  try:
855
870
  with open(cacheFile, mode="r", encoding="utf-8") as inFile:
856
871
  data = json.load(inFile)
857
872
  for path, entry in data.items():
858
- self._data[path] = {
859
- "title": entry.get("title", ""),
860
- "words": entry.get("words", 0),
861
- "time": entry.get("time", 0),
862
- }
873
+ puuid = str(entry.get("uuid", ""))
874
+ title = str(entry.get("title", ""))
875
+ words = checkInt(entry.get("words", 0), 0)
876
+ saved = checkInt(entry.get("time", 0), 0)
877
+ if path and title:
878
+ self._setEntry(puuid, path, title, words, saved)
863
879
  except Exception:
864
880
  logger.error("Could not load recent project cache")
865
881
  logException()
866
882
  return False
867
-
868
883
  return True
869
884
 
870
885
  def saveCache(self) -> bool:
@@ -879,7 +894,6 @@ class RecentProjects:
879
894
  logger.error("Could not save recent project cache")
880
895
  logException()
881
896
  return False
882
-
883
897
  return True
884
898
 
885
899
  def listEntries(self) -> list[tuple[str, str, int, int]]:
@@ -889,14 +903,15 @@ class RecentProjects:
889
903
  for k, e in self._data.items()
890
904
  ]
891
905
 
892
- def update(self, path: str | Path, title: str, words: int, saved: float | int) -> None:
906
+ def update(self, path: str | Path, data: NWProjectData, saved: float | int) -> None:
893
907
  """Add or update recent cache information on a given project."""
894
- self._data[str(path)] = {
895
- "title": title,
896
- "words": int(words),
897
- "time": int(saved),
898
- }
899
- self.saveCache()
908
+ try:
909
+ if (remove := self._map.get(data.uuid)) and (remove != str(path)):
910
+ self.remove(remove)
911
+ self._setEntry(data.uuid, str(path), data.name, sum(data.currCounts), int(saved))
912
+ self.saveCache()
913
+ except Exception:
914
+ pass
900
915
  return
901
916
 
902
917
  def remove(self, path: str | Path) -> None:
@@ -906,6 +921,13 @@ class RecentProjects:
906
921
  self.saveCache()
907
922
  return
908
923
 
924
+ def _setEntry(self, puuid: str, path: str, title: str, words: int, saved: int) -> None:
925
+ """Set an entry in the recent projects record."""
926
+ self._data[path] = {"uuid": puuid, "title": title, "words": words, "time": saved}
927
+ if puuid:
928
+ self._map[puuid] = path
929
+ return
930
+
909
931
 
910
932
  class RecentPaths:
911
933
 
novelwriter/constants.py CHANGED
@@ -173,6 +173,10 @@ class nwKeyWords:
173
173
  TAG_KEY, POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY,
174
174
  OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY, STORY_KEY, MENTION_KEY,
175
175
  ]
176
+ CAN_CREATE = [
177
+ POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY,
178
+ OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY,
179
+ ]
176
180
 
177
181
  # Set of Valid Keys
178
182
  VALID_KEYS = set(ALL_KEYS)
@@ -159,6 +159,13 @@ SETTINGS_LABELS = {
159
159
  "format.indentFirstPar": QT_TRANSLATE_NOOP("Builds", "Indent First Paragraph"),
160
160
 
161
161
  "format.grpMargins": QT_TRANSLATE_NOOP("Builds", "Text Margins"),
162
+ "format.titleMargin": QT_TRANSLATE_NOOP("Builds", "Title and Partition"),
163
+ "format.h1Margin": QT_TRANSLATE_NOOP("Builds", "Heading 1 and Chapter"),
164
+ "format.h2Margin": QT_TRANSLATE_NOOP("Builds", "Heading 2 and Scene"),
165
+ "format.h3Margin": QT_TRANSLATE_NOOP("Builds", "Heading 3 and Section"),
166
+ "format.h4Margin": QT_TRANSLATE_NOOP("Builds", "Heading 4"),
167
+ "format.textMargin": QT_TRANSLATE_NOOP("Builds", "Text Paragraph"),
168
+ "format.sepMargin": QT_TRANSLATE_NOOP("Builds", "Scene Separator"),
162
169
 
163
170
  "format.grpPage": QT_TRANSLATE_NOOP("Builds", "Page Layout"),
164
171
  "format.pageUnit": QT_TRANSLATE_NOOP("Builds", "Unit"),
@@ -353,9 +353,7 @@ class NWProject:
353
353
 
354
354
  # Update recent projects
355
355
  if storePath := self._storage.storagePath:
356
- CONFIG.recentProjects.update(
357
- storePath, self._data.name, sum(self._data.initCounts), time()
358
- )
356
+ CONFIG.recentProjects.update(storePath, self._data, time())
359
357
 
360
358
  # Check the project tree consistency
361
359
  # This also handles any orphaned files found
@@ -421,9 +419,7 @@ class NWProject:
421
419
 
422
420
  # Update recent projects
423
421
  if storagePath := self._storage.storagePath:
424
- CONFIG.recentProjects.update(
425
- storagePath, self._data.name, sum(self._data.currCounts), saveTime
426
- )
422
+ CONFIG.recentProjects.update(storagePath, self._data, saveTime)
427
423
 
428
424
  SHARED.newStatusMessage(self.tr("Saved Project: {0}").format(self._data.name))
429
425
  self.setProjectChanged(False)