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.
- {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/METADATA +1 -1
- {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/RECORD +57 -56
- novelwriter/__init__.py +3 -3
- novelwriter/assets/i18n/nw_de_DE.qm +0 -0
- novelwriter/assets/i18n/nw_en_US.qm +0 -0
- novelwriter/assets/i18n/nw_es_419.qm +0 -0
- novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
- novelwriter/assets/i18n/nw_it_IT.qm +0 -0
- novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
- novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
- novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
- novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
- novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
- novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
- novelwriter/assets/i18n/project_de_DE.json +2 -0
- novelwriter/assets/i18n/project_en_US.json +2 -0
- novelwriter/assets/i18n/project_es_419.json +2 -0
- novelwriter/assets/i18n/project_fr_FR.json +3 -1
- novelwriter/assets/i18n/project_it_IT.json +2 -0
- novelwriter/assets/i18n/project_ja_JP.json +2 -0
- novelwriter/assets/i18n/project_nb_NO.json +2 -0
- novelwriter/assets/i18n/project_nl_NL.json +2 -0
- novelwriter/assets/i18n/project_pl_PL.json +2 -0
- novelwriter/assets/i18n/project_pt_BR.json +2 -0
- novelwriter/assets/i18n/project_zh_CN.json +2 -0
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/manual_fr_FR.pdf +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/config.py +41 -19
- novelwriter/constants.py +4 -0
- novelwriter/core/buildsettings.py +7 -0
- novelwriter/core/project.py +2 -6
- novelwriter/dialogs/preferences.py +14 -5
- novelwriter/enum.py +0 -7
- novelwriter/extensions/novelselector.py +3 -2
- novelwriter/extensions/statusled.py +5 -6
- novelwriter/formats/shared.py +12 -11
- novelwriter/formats/todocx.py +1 -1
- novelwriter/formats/tohtml.py +30 -27
- novelwriter/formats/tokenizer.py +14 -8
- novelwriter/formats/tomarkdown.py +3 -2
- novelwriter/formats/toodt.py +1 -1
- novelwriter/formats/toqdoc.py +2 -0
- novelwriter/gui/doceditor.py +35 -19
- novelwriter/gui/docviewer.py +1 -1
- novelwriter/gui/itemdetails.py +1 -0
- novelwriter/gui/projtree.py +15 -18
- novelwriter/gui/statusbar.py +6 -7
- novelwriter/guimain.py +1 -1
- novelwriter/tools/dictionaries.py +2 -2
- novelwriter/tools/manussettings.py +8 -8
- novelwriter/tools/welcome.py +1 -1
- {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/LICENSE.md +0 -0
- {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/WHEEL +0 -0
- {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.6rc1.dist-info → novelWriter-2.6.1.dist-info}/top_level.txt +0 -0
@@ -1,40 +1,41 @@
|
|
1
|
-
novelwriter/__init__.py,sha256=
|
1
|
+
novelwriter/__init__.py,sha256=1gWN_28OfaF8oIwaLD64wwNjVFSCB4AjJM2dMR7Kha0,8843
|
2
2
|
novelwriter/common.py,sha256=i5kxxzOOg0W60uZ8w1HhwlgEUYKqv60F1JTlu4KEjrY,21751
|
3
|
-
novelwriter/config.py,sha256=
|
4
|
-
novelwriter/constants.py,sha256=
|
5
|
-
novelwriter/enum.py,sha256=
|
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=
|
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=
|
11
|
-
novelwriter/assets/
|
12
|
-
novelwriter/assets/
|
13
|
-
novelwriter/assets/i18n/
|
14
|
-
novelwriter/assets/i18n/
|
15
|
-
novelwriter/assets/i18n/
|
16
|
-
novelwriter/assets/i18n/
|
17
|
-
novelwriter/assets/i18n/
|
18
|
-
novelwriter/assets/i18n/
|
19
|
-
novelwriter/assets/i18n/
|
20
|
-
novelwriter/assets/i18n/
|
21
|
-
novelwriter/assets/i18n/
|
22
|
-
novelwriter/assets/i18n/
|
23
|
-
novelwriter/assets/i18n/
|
24
|
-
novelwriter/assets/i18n/
|
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=
|
27
|
-
novelwriter/assets/i18n/project_es_419.json,sha256=
|
28
|
-
novelwriter/assets/i18n/project_fr_FR.json,sha256=
|
29
|
-
novelwriter/assets/i18n/project_it_IT.json,sha256=
|
30
|
-
novelwriter/assets/i18n/project_ja_JP.json,sha256=
|
31
|
-
novelwriter/assets/i18n/project_nb_NO.json,sha256=
|
32
|
-
novelwriter/assets/i18n/project_nl_NL.json,sha256=
|
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=
|
35
|
-
novelwriter/assets/i18n/project_pt_BR.json,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
324
|
-
novelwriter/formats/todocx.py,sha256=
|
325
|
-
novelwriter/formats/tohtml.py,sha256=
|
326
|
-
novelwriter/formats/tokenizer.py,sha256=
|
327
|
-
novelwriter/formats/tomarkdown.py,sha256=
|
328
|
-
novelwriter/formats/toodt.py,sha256=
|
329
|
-
novelwriter/formats/toqdoc.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
354
|
+
novelwriter/tools/welcome.py,sha256=kE8HWfgvvncwEQnfXPoFipNzugpe2JemcVJr2kNiHIc,28020
|
354
355
|
novelwriter/tools/writingstats.py,sha256=tuIkHkkiAPJv4zUBIFyh6_mVHRK-beYSc_zBUKG8MnM,22792
|
355
|
-
novelWriter-2.
|
356
|
-
novelWriter-2.
|
357
|
-
novelWriter-2.
|
358
|
-
novelWriter-2.
|
359
|
-
novelWriter-2.
|
360
|
-
novelWriter-2.
|
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.
|
51
|
-
__hexversion__ = "
|
52
|
-
__date__ = "2025-
|
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
|
-
"
|
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": "二",
|
novelwriter/assets/manual.pdf
CHANGED
Binary file
|
Binary file
|
novelwriter/assets/sample.zip
CHANGED
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
|
-
|
105
|
-
self.
|
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 = "
|
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
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
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,
|
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
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
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"),
|
novelwriter/core/project.py
CHANGED
@@ -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)
|