novelWriter 2.5rc1__py3-none-any.whl → 2.5.2__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 (41) hide show
  1. {novelWriter-2.5rc1.dist-info → novelWriter-2.5.2.dist-info}/METADATA +1 -1
  2. {novelWriter-2.5rc1.dist-info → novelWriter-2.5.2.dist-info}/RECORD +41 -39
  3. {novelWriter-2.5rc1.dist-info → novelWriter-2.5.2.dist-info}/WHEEL +1 -1
  4. novelwriter/__init__.py +3 -3
  5. novelwriter/assets/i18n/nw_de_DE.qm +0 -0
  6. novelwriter/assets/i18n/nw_en_US.qm +0 -0
  7. novelwriter/assets/i18n/nw_es_419.qm +0 -0
  8. novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
  9. novelwriter/assets/i18n/nw_it_IT.qm +0 -0
  10. novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
  11. novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
  12. novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
  13. novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
  14. novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
  15. novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
  16. novelwriter/assets/i18n/project_pl_PL.json +116 -0
  17. novelwriter/assets/manual.pdf +0 -0
  18. novelwriter/assets/sample.zip +0 -0
  19. novelwriter/assets/text/credits_en.htm +52 -44
  20. novelwriter/common.py +10 -0
  21. novelwriter/core/project.py +15 -4
  22. novelwriter/core/status.py +4 -1
  23. novelwriter/core/storage.py +6 -1
  24. novelwriter/core/tokenizer.py +17 -11
  25. novelwriter/core/toqdoc.py +13 -13
  26. novelwriter/dialogs/preferences.py +14 -27
  27. novelwriter/dialogs/projectsettings.py +6 -10
  28. novelwriter/extensions/configlayout.py +18 -3
  29. novelwriter/extensions/statusled.py +12 -2
  30. novelwriter/gui/doceditor.py +3 -3
  31. novelwriter/gui/docviewer.py +5 -5
  32. novelwriter/gui/docviewerpanel.py +7 -0
  33. novelwriter/gui/outline.py +1 -0
  34. novelwriter/gui/projtree.py +66 -49
  35. novelwriter/guimain.py +50 -42
  36. novelwriter/shared.py +9 -0
  37. novelwriter/tools/manuscript.py +1 -0
  38. novelwriter/tools/welcome.py +9 -0
  39. {novelWriter-2.5rc1.dist-info → novelWriter-2.5.2.dist-info}/LICENSE.md +0 -0
  40. {novelWriter-2.5rc1.dist-info → novelWriter-2.5.2.dist-info}/entry_points.txt +0 -0
  41. {novelWriter-2.5rc1.dist-info → novelWriter-2.5.2.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: novelWriter
3
- Version: 2.5rc1
3
+ Version: 2.5.2
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,24 +1,25 @@
1
- novelwriter/__init__.py,sha256=GYdc7rDpW0764jkkbmX8iziTEnMHeHhcqgH4pHPr5Ng,7553
2
- novelwriter/common.py,sha256=sJK-MpM6bnZbhp0D8nRLRqL0HlnogGKDQozRhAZv6FU,18236
1
+ novelwriter/__init__.py,sha256=vemA3ERUhjeVgO3BDRRw_WJPGdtiFt0DLbrn2gO3WKA,7552
2
+ novelwriter/common.py,sha256=qg7jqTVqLOk4zlhKkFoLgYfBdtrBweZYkZeNn7OXX5k,18494
3
3
  novelwriter/config.py,sha256=cUL4S-JOKhxEes--NxCiV84NpanvVbcbW_K5v74dS3w,39081
4
4
  novelwriter/constants.py,sha256=y-UjNZxtU2lzn0Ji9lKiNU3233RmoJuK-3JWHT6GIvc,21368
5
5
  novelwriter/enum.py,sha256=c1IS9rmpWMtqnMzftpWoQFtfRqcK9VMTO0vbMsf7pLM,3501
6
6
  novelwriter/error.py,sha256=iIx1OzyXTT7Ngk2mXW_5c0YqVdFBD0NIkUFgAXNNBlM,6813
7
- novelwriter/guimain.py,sha256=b6RwIFtLCOFoETmNSnHP2QvaWJ6qRoiBPYLMLBoi8m4,53363
8
- novelwriter/shared.py,sha256=PPbEe8S2TRzEvXii8s8U4R0371ACpeMFdKmAkO-On4g,15540
7
+ novelwriter/guimain.py,sha256=i3qIrDKlwsaF0BgaTzldHWPOozs1wYpmvwQTVro06_c,53662
8
+ novelwriter/shared.py,sha256=LMgMXZK28LJUnRDbcTqTp4ZDVCKBt3EJYZMnIdu4R18,15906
9
9
  novelwriter/types.py,sha256=tV-XFc10wsk7zH__S2dEuEfidI6_adgOetpAVbnmJmI,4691
10
- novelwriter/assets/manual.pdf,sha256=SfYdeBc57qUYB84p1HtAZ9gMl08DRdqePCvAzGRHl3M,2692539
11
- novelwriter/assets/sample.zip,sha256=bio1FbkHrclw5cJkdgawV-urSO96Qf2eIARB-m60980,27808
12
- novelwriter/assets/i18n/nw_de_DE.qm,sha256=PPBpHJ3M0jL0t4xSY8zr3CKaO0umGW4K4Tb7bj0gtlA,97532
13
- novelwriter/assets/i18n/nw_en_US.qm,sha256=sZKjLkT2CcPhGAS3WUgKm9XO3ugbBrx2zbwVyhP7vSE,90470
14
- novelwriter/assets/i18n/nw_es_419.qm,sha256=8saaQ1As_hOgBI-oyEIqV5KCmLaMg_ldkOT9Q1uJmaY,99857
15
- novelwriter/assets/i18n/nw_fr_FR.qm,sha256=-hpWyPhLqC-Ri8Zp9mCnfhc5CrCy1_p69E71pxxncuk,100316
16
- novelwriter/assets/i18n/nw_it_IT.qm,sha256=mRgsonFCjm6bgG2sldQtMrRDAfqNIpiq9ebp1Sfl-gM,100250
17
- novelwriter/assets/i18n/nw_ja_JP.qm,sha256=kbZKcnRDKralChIDOqsnK8Sn0NdcjlTDf03fOLVPxxY,74895
18
- novelwriter/assets/i18n/nw_nb_NO.qm,sha256=cuQLRkvGXIFYsK7a4j1wxKY3H7JQIfjObkVvFbVFt-Q,92928
19
- novelwriter/assets/i18n/nw_nl_NL.qm,sha256=4RcFVAWj3PGT4jeivxLEp85HfiSr3FvFCnlmjQRXSRc,96814
20
- novelwriter/assets/i18n/nw_pt_BR.qm,sha256=JNs3XUrVyq2qNxlwSu4em8J8qUi_Wfp_Wom3JtwXWSE,98636
21
- novelwriter/assets/i18n/nw_zh_CN.qm,sha256=3q2cSsY3kT7dRggXq-fj8Sank88V_G2RKzjXQY5-3nA,67445
10
+ novelwriter/assets/manual.pdf,sha256=Js2sAkX3shCh5xqRhXFL2aiMEeqbQzRqo1TXlwwbG_I,2739813
11
+ novelwriter/assets/sample.zip,sha256=KRzxNo7kIYdcYX4HZvcQhaz2ewmH9wJHcmMuKeATcNI,27805
12
+ novelwriter/assets/i18n/nw_de_DE.qm,sha256=__e0mtl0hfBX61eICSrJhR4mY0r7W9IkI5fYCwvLrYw,100554
13
+ novelwriter/assets/i18n/nw_en_US.qm,sha256=Mueo40jL6hBXcV0Vxac-Jd-GAsLASSqEV_7W96sFkZ8,93304
14
+ novelwriter/assets/i18n/nw_es_419.qm,sha256=eHiRXnf86BPH5MGvJuo8bR_nBaf-HULE-nRW76o9-yU,103131
15
+ novelwriter/assets/i18n/nw_fr_FR.qm,sha256=mB2TCRNjttTFoC34iGbri5OVt2ygCNtxPS5g48CA-HA,103616
16
+ novelwriter/assets/i18n/nw_it_IT.qm,sha256=Lg7F4YjU3FE1axKalwcoF9kFvEXS0KDqVNYqHQqhVi4,103350
17
+ novelwriter/assets/i18n/nw_ja_JP.qm,sha256=ILDwq_8kHCiorjZabSbUYer9xB9q7hf-NQyAlReVKf8,77169
18
+ novelwriter/assets/i18n/nw_nb_NO.qm,sha256=g2raFt2Lw5RcE0IJM1_f7GJsqt8G_uSv7m6sD6zFe_0,95946
19
+ novelwriter/assets/i18n/nw_nl_NL.qm,sha256=SnEtdqHaSb8xWA4-EpnWxXD_uK8BeBs44I32AwlST3M,99906
20
+ novelwriter/assets/i18n/nw_pl_PL.qm,sha256=Em13jYHYnTbLZp_JaodgZntmcpxBrvbitOZhM8ZQXig,98702
21
+ novelwriter/assets/i18n/nw_pt_BR.qm,sha256=EXqtpkEPafPipTd0rCBN6cQ5SlqVyeMPwyMfgpTKjMs,101680
22
+ novelwriter/assets/i18n/nw_zh_CN.qm,sha256=poSDKRXapJ8zHBmiRdA85KcIN1nm6gnowDMlpoJwAKE,69647
22
23
  novelwriter/assets/i18n/project_de_DE.json,sha256=85ud9rxRHyXm85QDmW_LKcUE8h0L1Bvukaf5Tjt-wpg,2818
23
24
  novelwriter/assets/i18n/project_en_GB.json,sha256=7c9W2YJAELCSwx4zN_2qYZ3xsGncinCrGNhaj_FVkxk,2511
24
25
  novelwriter/assets/i18n/project_en_US.json,sha256=EcQAVEiQgRL3qobuzkPTfOWIxAc3Om-tA7nXUFFXEdI,2483
@@ -29,6 +30,7 @@ novelwriter/assets/i18n/project_ja_JP.json,sha256=8P03f2D9o2TlSxFU5ugRa-DJDeDZr_
29
30
  novelwriter/assets/i18n/project_nb_NO.json,sha256=e8E9c188KRPJfgZa298hDiaLEuhjHMxbRMaIF8HaVew,2298
30
31
  novelwriter/assets/i18n/project_nl_NL.json,sha256=qUEEjLMRtvt9VuNmjb_qOVCXqUCENHskCEyp5YlPMc4,2683
31
32
  novelwriter/assets/i18n/project_nn_NO.json,sha256=7ZfmtFWHcDMiLVqdOEDHQWHbpoC_bv5ESmf_-CoYiks,2250
33
+ novelwriter/assets/i18n/project_pl_PL.json,sha256=msXu3rNhJ19ytVespoXQ95nZ-mFis5rlLeCPK4A3zS8,3461
32
34
  novelwriter/assets/i18n/project_pt_BR.json,sha256=FDxIeSlf3v8AcrWfgwk7UOMRDmb2hWdDoabsBq5rkL8,2763
33
35
  novelwriter/assets/i18n/project_ru_RU.json,sha256=F4QkD6VVDCtGdil7uoXCmuczvUpe9tv-1L-3Eyc8sKE,3699
34
36
  novelwriter/assets/i18n/project_zh_CN.json,sha256=cfl0TsnbISYUvygOw015y0x0REDG97xR0yjyJ85Jm34,2322
@@ -258,7 +260,7 @@ novelwriter/assets/syntax/tomorrow_night.conf,sha256=mWPneIV_6tszLEK4-Eo-kcJmUbr
258
260
  novelwriter/assets/syntax/tomorrow_night_blue.conf,sha256=L42gcekFfNpCCB45m9Lhzmz8Y6Lvbpik3AADi_1Aao8,1549
259
261
  novelwriter/assets/syntax/tomorrow_night_bright.conf,sha256=h8_775Ed8hl2XhfCoxAY2kT43vi-UvG8UHik1aI4eRw,1554
260
262
  novelwriter/assets/syntax/tomorrow_night_eighties.conf,sha256=stO_xH5RzMN0jaZeYr53LVXbpqSmIXALBFGVLlJBDLA,1557
261
- novelwriter/assets/text/credits_en.htm,sha256=FLmgB5HLLWyKPBfJp-_P86cb6s9pOGu7OnIpEYpAJqo,4361
263
+ novelwriter/assets/text/credits_en.htm,sha256=jeEMRXuD-ZpGgRPtS3oZQ4HdIe6pwSnB3ZifvYiZLjU,2904
262
264
  novelwriter/assets/text/lipsum.txt,sha256=sGA6AC_p4jrUifxLxy3cSODeRwkpBNXDPGgX6YRTm2s,62937
263
265
  novelwriter/assets/themes/cyberpunk_night.conf,sha256=FvG_YVfEnMwJV1XUDEdpi9qoHQ5sdyVEaR_Y3WfWNA8,923
264
266
  novelwriter/assets/themes/default.conf,sha256=K0LZ64lODpCtUg3pISTAP4UKvEYMvPkmIYN9RDEaWwk,72
@@ -274,47 +276,47 @@ novelwriter/core/document.py,sha256=T8FlxyEMlR3t2HNE92InseWUMylWFTMnr2fP-Ge5LQc,
274
276
  novelwriter/core/index.py,sha256=soGv-bDdAHk77ubqr1OfftGtyB1aJAJNODyfOq2nZm8,48450
275
277
  novelwriter/core/item.py,sha256=0p_o3eCf8ZK30MiUR1rd1fDXb63lqNB4lHZeLMA6Wys,17635
276
278
  novelwriter/core/options.py,sha256=8yAQoTkDhTCZY7EGg29Fq7Lj4n4Hd2i-Kx7TlgnausM,7372
277
- novelwriter/core/project.py,sha256=Y94t4SS-CcO5OxV_NyB6gGw1ZjsGE6p3f4v87vO5V6w,21634
279
+ novelwriter/core/project.py,sha256=tdD6GrwicCttvlM2jt0Tx8A9VpfFi5g4sTsM2h497R4,22066
278
280
  novelwriter/core/projectdata.py,sha256=bt-LDNJsM2K4VwTcyZU_V2KOUZJFRKrNXNIwbU1v3Eo,9799
279
281
  novelwriter/core/projectxml.py,sha256=dbgm2ryPCOa1BFsFay-6vEK2itE8TWYRUiwCBpPp59g,22013
280
282
  novelwriter/core/sessions.py,sha256=V9eBXaUMcXTZjYXR5dgi6E14COIlcLIkNwS6pDrn75U,4405
281
283
  novelwriter/core/spellcheck.py,sha256=MwkRPp3MJa2X-6yRWX6Rc-sq2vLsbLnjNnyUpAbRFiE,7176
282
- novelwriter/core/status.py,sha256=pxW43PfS8rRjsNe3N406YSMOzSxOLCV5YrPH0Tw7YqQ,11498
283
- novelwriter/core/storage.py,sha256=cu3V1YzdUJECW_QEXj9F2991ZKfYJHbCVynmPmMmLn8,20775
284
+ novelwriter/core/status.py,sha256=FW20GK6_gxsYCiD7ZDg_gGIgp6yw3y1PS5mBN5HlARo,11592
285
+ novelwriter/core/storage.py,sha256=mNM9EMW0VRMwEkmTKnzotPVdJk4tJDDUNAHNH9yG5mw,20926
284
286
  novelwriter/core/tohtml.py,sha256=NxM4c52q2ZFNW-XdHOI9L5lqTSiw9J5KZAELhdmN_9I,19211
285
- novelwriter/core/tokenizer.py,sha256=6aUIdbF_u2nXEJn7YY5tpIVISXlvy-Y_w6T07on9t2I,47631
287
+ novelwriter/core/tokenizer.py,sha256=M4hbOqPtaeLFFPwVlQs03eHgSDHEWjZKw3_zzWtgqB0,47975
286
288
  novelwriter/core/tomarkdown.py,sha256=sZG64PLyTjDuIxnPQVMdcMSF-obsp4C06B1dUKhlbHU,7925
287
289
  novelwriter/core/toodt.py,sha256=Hrb6FJkwf2wwcKE6f7lw5o0PZqKsf1TWqvJbrJWrijU,62529
288
- novelwriter/core/toqdoc.py,sha256=tt34SuQ6phh-8huOJfbwt4Velkq9lo6z2LJUVeze1W4,15537
290
+ novelwriter/core/toqdoc.py,sha256=p8_4WwwXcnEuPw2XsU4Xq76YTyT2JMk7NQR1arCjVd8,15500
289
291
  novelwriter/core/tree.py,sha256=mmOB7kN0tjWda_AdT1WuZyFrewuc6uRAlqCfX6opwek,18681
290
292
  novelwriter/dialogs/about.py,sha256=0iBYkifACc5vZj4KwG0G2Dll_Wp4acAHUfNTto74MFU,4755
291
293
  novelwriter/dialogs/docmerge.py,sha256=HtJvmu56CGb_G27XGRgF3kl0jPR_14SBVsOKv_UyVX8,6286
292
294
  novelwriter/dialogs/docsplit.py,sha256=nPb7U68vtZ5yuJtUIr-2yTWCfADCtK4T1h7LgL0Hx8c,9281
293
295
  novelwriter/dialogs/editlabel.py,sha256=cs8ztrK1Gi3lEZozvs978dNAR6rnlV8cWr9dZArD51I,2963
294
- novelwriter/dialogs/preferences.py,sha256=yC2m-eLAo9p0a8b0ffxOolL9-AHF58EtlkSTYEMOUMg,38490
295
- novelwriter/dialogs/projectsettings.py,sha256=hyRuOYk0FLPkZm8F8e-tx6-1dMRmp3PV8GZYojYpIlc,27635
296
+ novelwriter/dialogs/preferences.py,sha256=HSH8JrJUi3r_bBiTkkLtLUbsCIZpMI3LECOWDHpqhMU,38050
297
+ novelwriter/dialogs/projectsettings.py,sha256=EfMcfCDGn59XuzkJGuuKhS9UFdYTNIxTJPEiQB71zGg,27525
296
298
  novelwriter/dialogs/quotes.py,sha256=JCgoz9I8HepxYYVBXOzQac6aFpzNMF4CRdw4CnAnuNM,4727
297
299
  novelwriter/dialogs/wordlist.py,sha256=yuQebLRuasVk2QUm2zWGn7ZzuWM4lFGyXz0egQPyILw,8511
298
- novelwriter/extensions/configlayout.py,sha256=fHZb8xCCahzQRuP2Y0a36W8i9W1CfgmvBKyh_YKrtf4,9982
300
+ novelwriter/extensions/configlayout.py,sha256=rQfK0kAwSZn30WEtqJKP8RoNWOjVP4C3gYTAXXkm5u0,10443
299
301
  novelwriter/extensions/eventfilters.py,sha256=mTU_sMQPOEocRfvLcwQyXUpkm314tH32WsID61ss1CI,2522
300
302
  novelwriter/extensions/modified.py,sha256=kXntkvw1ZWeRxseZyA444bV3O9RbmbErtaDDafu0DwY,5756
301
303
  novelwriter/extensions/novelselector.py,sha256=etVtoDkHGJIP4ab__vStJQCREKYt5sWLfK1vyuO3hLI,3794
302
304
  novelwriter/extensions/pagedsidebar.py,sha256=Brgl_d8KXnWWJov-sTkj9tMQu7Xrz8v7rXcnvpAaRK8,7232
303
305
  novelwriter/extensions/progressbars.py,sha256=BpJHycboSNGYWIfAEMqIy1Qxf32Cg8TeWM3hogzakTs,4628
304
- novelwriter/extensions/statusled.py,sha256=omaAm_-wpQr7Hw65rlJYWX3mvI0TBx1rpQDWk_3e6rI,2690
306
+ novelwriter/extensions/statusled.py,sha256=QdgkMSMKMfQRM9kiEXCuH-wbrq_AH9Sh8zBvYfvJE6Q,2943
305
307
  novelwriter/extensions/switch.py,sha256=4kXJ3EHEhaivj1D69iBi46hkkPBGAt-Rt5EjVK3V4Aw,4299
306
308
  novelwriter/extensions/switchbox.py,sha256=5tCiFWkT9WF9xh2c__BnNAJHFLw2nRso3fJZfwzDqRE,4198
307
309
  novelwriter/extensions/versioninfo.py,sha256=R2_U6B678be0WNxbnhUntpxR5PnZVGf6eeyENp-S-Xo,5035
308
- novelwriter/gui/doceditor.py,sha256=_V_hbCnNZJ9LbPsktPWl64uAoOPixBbsZF1xabPQdfs,113640
310
+ novelwriter/gui/doceditor.py,sha256=Cv9_sMKpSozKrIPusvcLDzlgD6rr8JxDHkzIoApOfMc,113720
309
311
  novelwriter/gui/dochighlight.py,sha256=4JNWQkfaEc0p-EvRRkbBWwQdrFqVotgremzu2WWw9hA,19463
310
- novelwriter/gui/docviewer.py,sha256=iNjjj-1YXXbHySTo94NDvdyTfzV_OJtNOjF4J7qWXvU,32198
311
- novelwriter/gui/docviewerpanel.py,sha256=Bh-WT2iSBqhMSxBgWKqNjJ2Erx_Y4BzsXLY_2RkMbMw,19852
312
+ novelwriter/gui/docviewer.py,sha256=eXnUE-q_hrwIaJ7FBJf5XrTiQOkWz_r_oAsoYe9w3PI,32251
313
+ novelwriter/gui/docviewerpanel.py,sha256=CCCzSc-Ol5jCmoEfpZ-RD-tcwzkyM7g_iBSQNeljGgE,20040
312
314
  novelwriter/gui/editordocument.py,sha256=5_v-gwZ9-CwJHGs7lFUGdY3paR7F1PW2FjD6_fbq5wY,4087
313
315
  novelwriter/gui/itemdetails.py,sha256=0U3hghK4Vue3AwtLBRY6YJMN3vOCjatvvzXhJDn4UXo,9688
314
316
  novelwriter/gui/mainmenu.py,sha256=PaJjO38DQ72UL9hMyvSbh2I1daxOZBSbJhNsov771fw,38908
315
317
  novelwriter/gui/noveltree.py,sha256=rAU_f6efrt5uAsew6jGqo3X3E3ggrZaoQh2prm13wD8,27635
316
- novelwriter/gui/outline.py,sha256=hAS6DCPhQtAUrIP4a2qBFa-Rm1fYDS-ijqnEZ2UIbic,42231
317
- novelwriter/gui/projtree.py,sha256=PUw0NcRqGHpYm1WTqUHflSSekigNJrqEs-Un0oCbGH0,77270
318
+ novelwriter/gui/outline.py,sha256=Id6hSEe1iLls6qPckX-b3U21rPOOndlfe7r4VsNC3G8,42312
319
+ novelwriter/gui/projtree.py,sha256=iMsMf8IcaV3Dvsbx3thWvWffHFqM5kTWP2AC69Fsvg0,78027
318
320
  novelwriter/gui/search.py,sha256=HnS0_vOg15f3woXeZ8MS_ZAblx9aFIuN7BSa195tY1M,13262
319
321
  novelwriter/gui/sidebar.py,sha256=jBkOinx69lwt4m1GovQ7nF44lF-g_SOk3yTT96KlbFY,6212
320
322
  novelwriter/gui/statusbar.py,sha256=-rF6bIJXGKFRswVKWE1c5In5x3sX4iXMfp0AGxZxt0c,9053
@@ -324,14 +326,14 @@ novelwriter/text/patterns.py,sha256=sEBPf9buLtJvYeoYquZzDcSC6gfKBHIUPGbD31y5H-g,
324
326
  novelwriter/tools/dictionaries.py,sha256=92GNCSEOK1EI7t2DiayT8p7nzKW7LwxJJz98F6kn3Vg,9243
325
327
  novelwriter/tools/lipsum.py,sha256=NcmoxWzrbEybh_w1FzxuxHmeTr8N03OrxjxsPWEbae4,4794
326
328
  novelwriter/tools/manusbuild.py,sha256=c3NdpkAqUPTKN2BpGX_xleFtZPi1G8uv80XBZEp27Bw,14071
327
- novelwriter/tools/manuscript.py,sha256=77BaTqfytdrqgUxnCLUUVPxx1wScu289xfyBhcHGX-M,37955
329
+ novelwriter/tools/manuscript.py,sha256=UgLSm6TFfftSc_cttzaic6Y06pwdMOMmSBhVWzdCSYA,38009
328
330
  novelwriter/tools/manussettings.py,sha256=Uz7QpCb2l_SftpQ5N7x0qHdq41-6fvTRHv7bxWvDLWg,56145
329
331
  novelwriter/tools/noveldetails.py,sha256=xNpTf5-hFu-K_flPhMLug6tNboKvDWV7OEetpHx6Lsc,18481
330
- novelwriter/tools/welcome.py,sha256=XTTqVqeojZW8hoA6b4nusq4cJ4d1ISoHVPYrEjO4lR0,27759
332
+ novelwriter/tools/welcome.py,sha256=KLSlBTih_HOTJ3nmyv4IU4ec8XNJDL5AwXMZ6amqmIw,28027
331
333
  novelwriter/tools/writingstats.py,sha256=f5nbmE5V9VsQ8qi_DlvfF5yVIupEbVDavtuMbTzU7IA,22753
332
- novelWriter-2.5rc1.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
333
- novelWriter-2.5rc1.dist-info/METADATA,sha256=mkaYvtyWGejmUtcwGSmtZlfMcUqrIK4jvejIQ84T4zw,2533
334
- novelWriter-2.5rc1.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
335
- novelWriter-2.5rc1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
336
- novelWriter-2.5rc1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
337
- novelWriter-2.5rc1.dist-info/RECORD,,
334
+ novelWriter-2.5.2.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
335
+ novelWriter-2.5.2.dist-info/METADATA,sha256=76vgcoOL-Qfwlxjkg274DhfbxHgJN_AjHJnNN26Tb5Y,2532
336
+ novelWriter-2.5.2.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
337
+ novelWriter-2.5.2.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
338
+ novelWriter-2.5.2.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
339
+ novelWriter-2.5.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.0)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
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.5rc1"
51
- __hexversion__ = "0x020500c1"
52
- __date__ = "2024-06-22"
50
+ __version__ = "2.5.2"
51
+ __hexversion__ = "0x020502f0"
52
+ __date__ = "2024-09-17"
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
@@ -0,0 +1,116 @@
1
+ {
2
+ "Synopsis": "Streszczenie",
3
+ "Short Description": "Krótki opis",
4
+ "Comment": "Komentarz",
5
+ "Notes": "Notatki",
6
+ "Tag": "Znacznik",
7
+ "Point of View": "Punkt widzenia",
8
+ "Focus": "Skupienie",
9
+ "Characters": "Postacie",
10
+ "Plot": "Fabuła",
11
+ "Timeline": "Oś czasu",
12
+ "Locations": "Miejsca",
13
+ "Objects": "Obiekty",
14
+ "Entities": "Podmioty",
15
+ "Custom": "Różne",
16
+ "0": "zero",
17
+ "1": "pierwszy",
18
+ "2": "drugi",
19
+ "3": "trzeci",
20
+ "4": "czwarty",
21
+ "5": "piąty",
22
+ "6": "szósty",
23
+ "7": "siódmy",
24
+ "8": "ósmy",
25
+ "9": "dziewiąty",
26
+ "10": "dziesiąty",
27
+ "11": "jedenasty",
28
+ "12": "dwunasty",
29
+ "13": "trzynasty",
30
+ "14": "czternasty",
31
+ "15": "piętnasty",
32
+ "16": "szesnasty",
33
+ "17": "siedemnasty",
34
+ "18": "osiemnasty",
35
+ "19": "dziewiętnasty",
36
+ "20": "dwudziesty",
37
+ "21": "dwudziesty pierwszy",
38
+ "22": "dwudziesty drugi",
39
+ "23": "dwudziesty Trzeci",
40
+ "24": "dwudziesty czwarty",
41
+ "25": "dwudziesty piąty",
42
+ "26": "dwudziesty szósty",
43
+ "27": "dwudziesty siódmy",
44
+ "28": "dwudziesty ósmy",
45
+ "29": "dwudziesty dziewiąty",
46
+ "30": "trzydziesty",
47
+ "31": "trzydziesty pierwszy",
48
+ "32": "trzydziesty drugi",
49
+ "33": "trzydziesty trzeci",
50
+ "34": "trzydziesty czwarty",
51
+ "35": "trzydziesty piąty",
52
+ "36": "trzydziesty szósty",
53
+ "37": "trzydziesty siódmy",
54
+ "38": "trzydziesty ósmy",
55
+ "39": "trzydziesty dziewiaty",
56
+ "40": "czterdziesty",
57
+ "41": "czterdziesty pierwszy",
58
+ "42": "czterdziesty drugi",
59
+ "43": "czterdziesty Trzeci",
60
+ "44": "czterdziesty czwarty",
61
+ "45": "czterdziesty piąty",
62
+ "46": "czterdziesty szósty",
63
+ "47": "czterdziesty siódmy",
64
+ "48": "czterdziesty ósmy",
65
+ "49": "czterdziesty dziewiąty",
66
+ "50": "pięćdziesiąty",
67
+ "51": "pięćdziesiąty pierwszy",
68
+ "52": "pięćdziesiąty drugi",
69
+ "53": "pięćdziesiąty trzeci",
70
+ "54": "pięćdziesiąty czwarty",
71
+ "55": "pięćdziesiąty piąty",
72
+ "56": "pięćdziesiąty szósty",
73
+ "57": "pięćdziesiąty siódmy",
74
+ "58": "pięćdziesiąty ósmy",
75
+ "59": "pięćdziesiąty dziewiąty",
76
+ "60": "sześćdziesiąty",
77
+ "61": "sześćdziesiąty pierwszy",
78
+ "62": "sześćdziesiąty drugi",
79
+ "63": "sześćdziesiąty trzeci",
80
+ "64": "sześćdziesiąty czwarty",
81
+ "65": "sześćdziesiąty piąty",
82
+ "66": "sześćdziesiąty szósty",
83
+ "67": "sześćdziesiąty siódmy",
84
+ "68": "sześćdziesiąty ósmy",
85
+ "69": "sześćdziesiąty dziewiąty",
86
+ "70": "siedemdziesiąty",
87
+ "71": "siedemdziesiąty pierwszy",
88
+ "72": "siedemdziesiąty drugi",
89
+ "73": "siedemdziesiąty trzeci",
90
+ "74": "siedemdziesiąty czwarty",
91
+ "75": "siedemdziesiąty piąty",
92
+ "76": "siedemdziesiąty szósty",
93
+ "77": "siedemdziesiąty siódmy",
94
+ "78": "siedemdziesiąty ósmy",
95
+ "79": "siedemdziesiąty dziewiąty",
96
+ "80": "osiemdziesiąty",
97
+ "81": "osiemdziesiąty pierwszy",
98
+ "82": "osiemdziesiąty drugi",
99
+ "83": "osiemdziesiąty trzeci",
100
+ "84": "osiemdziesiąty czwarty",
101
+ "85": "osiemdziesiąty piąty",
102
+ "86": "osiemdziesiąty szósty",
103
+ "87": "osiemdziesiąty siódmy",
104
+ "88": "osiemdziesiąty ósmy",
105
+ "89": "osiemdziesiąty dziewiąty",
106
+ "90": "dziewięćdziesiąty",
107
+ "91": "dziewięćdziesiąty pierwszy",
108
+ "92": "dziewięćdziesiąty drugi",
109
+ "93": "dziewięćdziesiąty trzeci",
110
+ "94": "dziewięćdziesiąty czwarty",
111
+ "95": "dziewięćdziesiąty piąty",
112
+ "96": "dziewięćdziesiąty szósty",
113
+ "97": "dziewięćdziesiąty siódmy",
114
+ "98": "dziewięćdziesiąty ósmy",
115
+ "99": "dziewięćdziesiąty dziewiąty"
116
+ }
Binary file
Binary file
@@ -1,84 +1,92 @@
1
- <!DOCTYPE html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
1
  <html>
3
2
  <body>
4
3
 
5
4
  <h3>Main Developer</h3>
6
- <p>Veronica Berglyd Olsen (<a href="https://github.com/vkbo">@vkbo</a>)</p>
5
+
6
+ <p>Veronica Berglyd Olsen</p>
7
7
 
8
8
  <h3>Contributors</h3>
9
9
 
10
- <p>
11
- &nbsp;&bull;&nbsp;<b>Concept:</b> Marian Lückhof (<a href="https://github.com/Number042">@Number042</a>)<br>
12
- &nbsp;&bull;&nbsp;<b>Internationalisation:</b> Bruno Meneguello (<a href="https://github.com/bkmeneguello">@bkmeneguello</a>)<br>
13
- &nbsp;&bull;&nbsp;<b>Setup and Packaging:</b> Rachel Powers (<a href="https://github.com/Ryex">@Ryex</a>)
14
- </p>
10
+ <ul>
11
+ <li><b>Early Concept:</b> Marian Lückhof</li>
12
+ <li><b>Internationalisation:</b> Bruno Meneguello</li>
13
+ <li><b>Setup and Packaging:</b> Rachel Powers</li>
14
+ </ul>
15
+
15
16
  <p>For other contributions, see the project's
16
17
  <a href="https://github.com/vkbo/novelWriter/graphs/contributors">Contributors</a> page.</p>
17
18
 
18
19
  <h3>Artwork</h3>
19
20
 
20
- <p>The artwork on the Welcome dialog was created by <a href="https://louisdurrant.art">Louis Durrant</a>.</p>
21
+ <p>The artwork on the Welcome dialog was created by Louis Durrant.</p>
21
22
 
22
23
  <h3>Translations</h3>
23
24
 
24
25
  <p>The default language is English (UK) with English (US) as an option. These are the original
25
26
  translators for the languages currently available:</p>
26
- <p>
27
- &nbsp;&bull;&nbsp;<b>Dutch:</b> Martijn van der Kleijn (<a href="https://github.com/mvdkleijn">@mvdkleijn</a>)<br>
28
- &nbsp;&bull;&nbsp;<b>French:</b> Jan Lüdke (<a href="https://github.com/jyhelle">@jyhelle</a>)<br>
29
- &nbsp;&bull;&nbsp;<b>German:</b> Myian (<a href="https://github.com/heymyian">@heymyian</a>)<br>
30
- &nbsp;&bull;&nbsp;<b>Italian:</b> Riccardo Mangili<br>
31
- &nbsp;&bull;&nbsp;<b>Japanese:</b> hebekeg (<a href="https://github.com/hebekeg">@hebekeg</a>)<br>
32
- &nbsp;&bull;&nbsp;<b>Latin American Spanish:</b> Tommy Marplatt (<a href="https://github.com/tmarplatt">@tmarplatt</a>)<br>
33
- &nbsp;&bull;&nbsp;<b>Norwegian:</b> Veronica Berglyd Olsen (<a href="https://github.com/vkbo">@vkbo</a>)<br>
34
- &nbsp;&bull;&nbsp;<b>Portuguese:</b> Bruno Meneguello (<a href="https://github.com/bkmeneguello">@bkmeneguello</a>)<br>
35
- &nbsp;&bull;&nbsp;<b>Simplified Chinese:</b> Qianzhi Long (<a href="https://github.com/longqzh">@longqzh</a>)
36
- </p>
27
+
28
+ <ul>
29
+ <li><b>Dutch:</b> Martijn van der Kleijn (mvdkleijn)</li>
30
+ <li><b>French:</b> Jan Lüdke (jyhelle)</li>
31
+ <li><b>German:</b> Myian (HeyMyian)</li>
32
+ <li><b>Italian:</b> Riccardo Mangili</li>
33
+ <li><b>Japanese:</b> hebekeg</li>
34
+ <li><b>Latin American Spanish:</b> Tommy Marplatt (tmarplatt)</li>
35
+ <li><b>Norwegian:</b> Veronica Berglyd Olsen (vkbo)</li>
36
+ <li><b>Polish:</b> Anna Maria Polak (Nauthiz)</li>
37
+ <li><b>Portuguese:</b> Bruno Meneguello (bkmeneguello)</li>
38
+ <li><b>Simplified Chinese:</b> Qianzhi Long (longqzh)</li>
39
+ </ul>
37
40
 
38
41
  <p>Additional larger translation contributions:</p>
39
- <p>
40
- &nbsp;&bull;&nbsp;<b>French:</b> Albert Aribaud (<a href="https://github.com/aaribaud">@aaribaud</a>)
41
- </p>
42
+
43
+ <ul>
44
+ <li><b>French:</b> Albert Aribaud (aaribaud)</li>
45
+ <li><b>Portuguese:</b> Oli Maia (olimaia)</li>
46
+ </ul>
42
47
 
43
48
  <p>Translations are managed on <a href="https://crowdin.com/project/novelwriter">Crowdin</a>, and
44
- more contributions are listed on the project's <a href="https://crowdin.com/project/novelwriter/members">Members</a> page.</p>
49
+ more contributions are listed on the project's Members page.</p>
45
50
 
46
51
  <h3>Libraries</h3>
47
52
 
48
53
  <p>The following libraries are dependencies of novelWriter:</p>
49
- <p>
50
- &nbsp;&bull;&nbsp;<a href="https://www.qt.io">Qt5</a> by Qt Company<br>
51
- &nbsp;&bull;&nbsp;<a href="https://www.riverbankcomputing.com/software/pyqt">PyQt5</a> by Riverbank Computing<br>
52
- &nbsp;&bull;&nbsp;<a href="https://abiword.github.io/enchant">Enchant</a> by Dom Lachowicz<br>
53
- &nbsp;&bull;&nbsp;<a href="https://pyenchant.github.io/pyenchant">PyEnchant</a> by Dimitri Merejkowsky
54
- </p>
54
+
55
+ <ul>
56
+ <li><b>Qt5</b> by Qt Company</li>
57
+ <li><b>PyQt5</b> by Riverbank Computing</li>
58
+ <li><b>Enchant</b> by Dom Lachowicz</li>
59
+ <li><b>PyEnchant</b> by Dimitri Merejkowsky</li>
60
+ </ul>
55
61
 
56
62
  <h3>Assets</h3>
57
63
 
58
64
  <p>Some of the assets bundled with novelWriter were adapted from the following sources:</p>
59
- <p>
60
- &nbsp;&bull;&nbsp;<a href="https://github.com/stephenhutchings/typicons.font">Typicons</a> icons by Stephen Hutchings (CC BY-SA 4.0)<br>
61
- &nbsp;&bull;&nbsp;<a href="https://github.com/chriskempson/base16">Tomorrow</a> syntax themes by Chris Kempson (MIT License)<br>
62
- &nbsp;&bull;&nbsp;<a href="https://github.com/sdras/night-owl-vscode-theme">Owl</a> syntax themes by Sarah Drasner (MIT License)<br>
63
- &nbsp;&bull;&nbsp;<a href="https://github.com/altercation/solarized">Solarized</a> themes by Ethan Schoonover (MIT License)<br>
64
- &nbsp;&bull;&nbsp;<a href="https://github.com/alemvigh">Cyberpunk Night</a> theme by Anders Lemvigh (CC BY-SA 4.0)<br>
65
- &nbsp;&bull;&nbsp;<a href="https://draculatheme.com">Dracula</a> theme by Zeno Rocha (MIT License)<br>
66
- &nbsp;&bull;&nbsp;<a href="https://github.com/loilo/vscode-snazzy-light">Snazzy Light</a> theme by Florian Reuschel (MIT License)
67
- </p>
65
+
66
+ <ul>
67
+ <li><b>Typicons</b> icons by Stephen Hutchings (CC BY-SA 4.0)</li>
68
+ <li><b>Tomorrow</b> syntax themes by Chris Kempson (MIT License)</li>
69
+ <li><b>Owl</b> syntax themes by Sarah Drasner (MIT License)</li>
70
+ <li><b>Solarized</b> themes by Ethan Schoonover (MIT License)</li>
71
+ <li><b>Cyberpunk Night</b> theme by Anders Lemvigh (CC BY-SA 4.0)</li>
72
+ <li><b>Dracula</b> theme by Zeno Rocha (MIT License)</li>
73
+ <li><b>Snazzy Light</b> theme by Florian Reuschel (MIT License)</li>
74
+ </ul>
68
75
 
69
76
  <h3>Fonts</h3>
70
77
 
71
78
  <p>The font used for the main novelWriter logo, mimetype and text banners is Pridi. Other fonts are
72
79
  used on buttons and icons.</p>
73
- <p>
74
- &nbsp;&bull;&nbsp;Pridi by Cadson Demak (Open Font License, Version 1.1)<br>
75
- &nbsp;&bull;&nbsp;Source Sans Pro by Paul D. Hunt (SIL Open Font License)
76
- </p>
80
+
81
+ <ul>
82
+ <li><b>Pridi</b> by Cadson Demak (Open Font License, Version 1.1)</li>
83
+ <li><b>Source Sans Pro</b> by Paul D. Hunt (SIL Open Font License)</li>
84
+ </ul>
77
85
 
78
86
  <h3>Special Mentions</h3>
79
87
 
80
- <p>Additional thanks to <a href="https://github.com/johnblommers">@johnblommers</a> who was an early user and who has provided a lot
81
- of very useful feedback over the years.</p>
88
+ <p>Additional thanks to John Blommers who was an early user and who has provided a lot of very
89
+ useful feedback over the years.</p>
82
90
 
83
91
  </body>
84
92
  </html>
novelwriter/common.py CHANGED
@@ -279,6 +279,16 @@ def simplified(text: str) -> str:
279
279
  return " ".join(str(text).strip().split())
280
280
 
281
281
 
282
+ def compact(text: str) -> str:
283
+ """Compact a string by removing spaces."""
284
+ return "".join(str(text).split())
285
+
286
+
287
+ def uniqueCompact(text: str) -> str:
288
+ """Return a unique, compact and sorted string."""
289
+ return "".join(sorted(set(compact(text))))
290
+
291
+
282
292
  def elide(text: str, length: int) -> str:
283
293
  """Elide a piece of text to a maximum length."""
284
294
  if len(text) > (cut := max(4, length)):
@@ -254,13 +254,23 @@ class NWProject:
254
254
  status = self._storage.initProjectStorage(projPath, clearLock)
255
255
  if status != NWStorageOpen.READY:
256
256
  if status == NWStorageOpen.UNKOWN:
257
- SHARED.error(self.tr("Not a known project file format."))
257
+ SHARED.error(
258
+ self.tr("Not a known project file format."),
259
+ info=self.tr("Path: {0}").format(str(projPath))
260
+ )
258
261
  elif status == NWStorageOpen.NOT_FOUND:
259
- SHARED.error(self.tr("Project file not found."))
262
+ SHARED.error(
263
+ self.tr("Project file not found."),
264
+ info=self.tr("Path: {0}").format(str(projPath))
265
+ )
266
+ elif status == NWStorageOpen.FAILED:
267
+ SHARED.error(
268
+ self.tr("Failed to open project."),
269
+ info=self.tr("Path: {0}").format(str(projPath)),
270
+ exc=self._storage.exc
271
+ )
260
272
  elif status == NWStorageOpen.LOCKED:
261
273
  self._state = NWProjectState.LOCKED
262
- elif status == NWStorageOpen.FAILED:
263
- SHARED.error(self.tr("Failed to open project."), exc=self._storage.exc)
264
274
  return False
265
275
 
266
276
  # Read Project XML
@@ -346,6 +356,7 @@ class NWProject:
346
356
  self.setProjectChanged(False)
347
357
  self._valid = True
348
358
  self._state = NWProjectState.READY
359
+ self._storage.lockSession() # Lock only after a successful open. See issue #1977.
349
360
 
350
361
  SHARED.newStatusMessage(self.tr("Opened Project: {0}").format(self._data.name))
351
362
 
@@ -121,7 +121,7 @@ class NWStatus:
121
121
  return key
122
122
 
123
123
  def update(self, update: list[tuple[str | None, StatusEntry]]) -> None:
124
- """Update the list of statuses, and from removed list."""
124
+ """Update the list of statuses."""
125
125
  self._store.clear()
126
126
  for key, entry in update:
127
127
  self._store[self._checkKey(key)] = entry
@@ -130,6 +130,9 @@ class NWStatus:
130
130
  if self._default not in self._store:
131
131
  self._default = next(iter(self._store)) if self._store else None
132
132
 
133
+ # Emit the change signal
134
+ SHARED.projectSingalProxy({"event": "statusLabels", "kind": self._prefix})
135
+
133
136
  return
134
137
 
135
138
  def check(self, value: str) -> str:
@@ -235,7 +235,6 @@ class NWStorage:
235
235
  if child.is_dir() and child.name.startswith("data_"):
236
236
  legacy.legacyDataFolder(basePath, child)
237
237
 
238
- self._writeLockFile()
239
238
  self._ready = True
240
239
 
241
240
  return NWStorageOpen.READY
@@ -249,6 +248,12 @@ class NWStorage:
249
248
  return True
250
249
  return True
251
250
 
251
+ def lockSession(self) -> None:
252
+ """Lock the session when the project is successfully opened."""
253
+ if self._ready:
254
+ self._writeLockFile()
255
+ return
256
+
252
257
  def closeSession(self) -> None:
253
258
  """Run tasks related to closing the session."""
254
259
  self._clearLockFile()