novelWriter 2.6.1__py3-none-any.whl → 2.6.3__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 (32) hide show
  1. {novelWriter-2.6.1.dist-info → novelWriter-2.6.3.dist-info}/METADATA +1 -1
  2. {novelWriter-2.6.1.dist-info → novelWriter-2.6.3.dist-info}/RECORD +32 -30
  3. novelwriter/__init__.py +3 -3
  4. novelwriter/assets/i18n/nw_cs_CZ.qm +0 -0
  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_ru_RU.qm +0 -0
  16. novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
  17. novelwriter/assets/i18n/project_cs_CZ.json +118 -0
  18. novelwriter/assets/manual.pdf +0 -0
  19. novelwriter/assets/sample.zip +0 -0
  20. novelwriter/assets/text/credits_en.htm +1 -0
  21. novelwriter/constants.py +25 -20
  22. novelwriter/core/itemmodel.py +4 -2
  23. novelwriter/dialogs/docsplit.py +49 -45
  24. novelwriter/gui/itemdetails.py +4 -4
  25. novelwriter/gui/mainmenu.py +2 -2
  26. novelwriter/gui/outline.py +4 -4
  27. novelwriter/gui/projtree.py +1 -0
  28. novelwriter/tools/manuscript.py +12 -12
  29. {novelWriter-2.6.1.dist-info → novelWriter-2.6.3.dist-info}/LICENSE.md +0 -0
  30. {novelWriter-2.6.1.dist-info → novelWriter-2.6.3.dist-info}/WHEEL +0 -0
  31. {novelWriter-2.6.1.dist-info → novelWriter-2.6.3.dist-info}/entry_points.txt +0 -0
  32. {novelWriter-2.6.1.dist-info → novelWriter-2.6.3.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: novelWriter
3
- Version: 2.6.1
3
+ Version: 2.6.3
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,27 +1,29 @@
1
- novelwriter/__init__.py,sha256=1gWN_28OfaF8oIwaLD64wwNjVFSCB4AjJM2dMR7Kha0,8843
1
+ novelwriter/__init__.py,sha256=B1YB_y84qIPE4qtQiSAUgMcT5Ly0Mgq5xcOkpR0NjfI,8843
2
2
  novelwriter/common.py,sha256=i5kxxzOOg0W60uZ8w1HhwlgEUYKqv60F1JTlu4KEjrY,21751
3
3
  novelwriter/config.py,sha256=1pQwU0QsGJ5qAvxZ_iL2vwjTMajjsAuXdTP0IRK1X30,41108
4
- novelwriter/constants.py,sha256=QVRHVUPE8JlJ4hUSYoVF2qsJtZoB0wvQmvIqQr4eZCU,26086
4
+ novelwriter/constants.py,sha256=hakaZkZsJOQkYyvgqUwxLuYPM5Oy7_buPHrFkXX6w4s,26300
5
5
  novelwriter/enum.py,sha256=bZFqyYVR76B-P1pod1zaYSG2pS8DBQdBP9oqxWJoiFg,3635
6
6
  novelwriter/error.py,sha256=Pq4ogfb4GlqTBC698o9bJ537Ce5kXzyNw2JZxMGmZJM,6849
7
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=uqL-ml8_KJ5j1w9aXNujbrO_fuyiUl_YUDsJczfqBtA,2687778
10
+ novelwriter/assets/manual.pdf,sha256=p8LVvcj46b5VDRdnIHwh_DZT9mgQEAZhYnnTXZLdc8Q,2687800
11
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
12
+ novelwriter/assets/sample.zip,sha256=ogCIh5H4VhUgEpHHpBuCTHzcIAZV-Y6sVcH7MlJ_Vxo,28035
13
+ novelwriter/assets/i18n/nw_cs_CZ.qm,sha256=wqS376aERqXduw3lc7FFhcWapwcn9NYdTICkZYoDI1w,97499
14
+ novelwriter/assets/i18n/nw_de_DE.qm,sha256=xKyyeNEd02EquAF7KSiHr4GUccfagD74O_gipoQK1Io,102467
15
+ novelwriter/assets/i18n/nw_en_US.qm,sha256=fRG9Tg0a9IwsinP1wU162P_Y7mNl-grTKKx3TzKndSI,95213
16
+ novelwriter/assets/i18n/nw_es_419.qm,sha256=enE-iIGb_7DypKUXj9o4vddauaR6NO5KO9aAoh9GsEI,105334
17
+ novelwriter/assets/i18n/nw_fr_FR.qm,sha256=nIuseguPyp-BW-2QaxZTgTEAq82epUZyAsCpm3Vl0Wg,105307
18
+ novelwriter/assets/i18n/nw_it_IT.qm,sha256=eQKNQVvvwO_ja95sSXvZMkAv2TCxBIDYsMcT3k3KeC4,105449
19
+ novelwriter/assets/i18n/nw_ja_JP.qm,sha256=fMTV1RI_GhpStiX8RlkCIsyawz6tfcSfrFzuHzS-zpU,78818
20
+ novelwriter/assets/i18n/nw_nb_NO.qm,sha256=HIwt18aTorGzdk0j98XJtr652Hd3mCPZi8Ee771-vZw,97781
21
+ novelwriter/assets/i18n/nw_nl_NL.qm,sha256=igF8xjFTb4BBnyFThnLCqmk_KQLP3KcDWdUvjfwdBD8,96665
22
+ novelwriter/assets/i18n/nw_pl_PL.qm,sha256=etp4w60penSQTTsUavoWFcz1G8vtrV4RPAHTWloCrEg,100719
23
+ novelwriter/assets/i18n/nw_pt_BR.qm,sha256=LKeE4hvMlGRk0VIhuIuOkWcOy0SRf0fgQRbhuLQ0dgk,103757
24
+ novelwriter/assets/i18n/nw_ru_RU.qm,sha256=T44JdPKRuI27Az7ZjVznT-O4pR941-iVlV6agR-ydcI,94800
25
+ novelwriter/assets/i18n/nw_zh_CN.qm,sha256=_MbLHUgM3jBnDBU_fsB3vQlAw8YeWQKpidgJ5p-jiIo,70468
26
+ novelwriter/assets/i18n/project_cs_CZ.json,sha256=0A71su1wmPrGD1DD3FruFqnoWQqo4XaggWp5NJKT9lc,2861
25
27
  novelwriter/assets/i18n/project_de_DE.json,sha256=-9-FF2zYD9ulez9dXAKLbFWsbEX2KLXKE1cJS8csx1g,2866
26
28
  novelwriter/assets/i18n/project_en_GB.json,sha256=CvBOO8kaW0k7NlwvxFi62Br9HYKJKQLDk1nQfvXOj48,2537
27
29
  novelwriter/assets/i18n/project_en_US.json,sha256=CvBOO8kaW0k7NlwvxFi62Br9HYKJKQLDk1nQfvXOj48,2537
@@ -278,7 +280,7 @@ novelwriter/assets/syntax/tomorrow_night.conf,sha256=mWPneIV_6tszLEK4-Eo-kcJmUbr
278
280
  novelwriter/assets/syntax/tomorrow_night_blue.conf,sha256=L42gcekFfNpCCB45m9Lhzmz8Y6Lvbpik3AADi_1Aao8,1549
279
281
  novelwriter/assets/syntax/tomorrow_night_bright.conf,sha256=h8_775Ed8hl2XhfCoxAY2kT43vi-UvG8UHik1aI4eRw,1554
280
282
  novelwriter/assets/syntax/tomorrow_night_eighties.conf,sha256=stO_xH5RzMN0jaZeYr53LVXbpqSmIXALBFGVLlJBDLA,1557
281
- novelwriter/assets/text/credits_en.htm,sha256=wZgQGDQgIvd_2aT6oaJB88jOUjhtWYbn9tA6IfoGq3k,2958
283
+ novelwriter/assets/text/credits_en.htm,sha256=jh1TlfkUgo_9xueX7wa9sDHfP9K2cqUBNbWO4a-8Y78,3006
282
284
  novelwriter/assets/text/lipsum.txt,sha256=sGA6AC_p4jrUifxLxy3cSODeRwkpBNXDPGgX6YRTm2s,62937
283
285
  novelwriter/assets/themes/cyberpunk_night.conf,sha256=FvG_YVfEnMwJV1XUDEdpi9qoHQ5sdyVEaR_Y3WfWNA8,923
284
286
  novelwriter/assets/themes/default.conf,sha256=K0LZ64lODpCtUg3pISTAP4UKvEYMvPkmIYN9RDEaWwk,72
@@ -293,7 +295,7 @@ novelwriter/core/docbuild.py,sha256=svK66k4-x203zMYp6P5T5TMKPJDQRLuRAsDUfauIRBs,
293
295
  novelwriter/core/document.py,sha256=t52H5RrKu3Un-55Lhdd6cu_MN2-__bdXIJZDWzl72TM,12155
294
296
  novelwriter/core/index.py,sha256=_hbKqnisf-5-WUYtju5EqpPKhfo2gsaiT28ZGXfalgc,48610
295
297
  novelwriter/core/item.py,sha256=hPhR5vtn-FfEgx8OSJ7IbuYCqZOQ2kiPf_SDxbkUBFw,18819
296
- novelwriter/core/itemmodel.py,sha256=1W7A-uLI1g2sOe7gietKiV15McF6rMY1VMVJ4L0PpAc,18025
298
+ novelwriter/core/itemmodel.py,sha256=HR80mcnxyjVW3k1f4XMaE09hBU7Fswk13OTHPQiyIls,18145
297
299
  novelwriter/core/options.py,sha256=wJ3PJrtwbLPCs-WEvMLTWTOdlX-bn8oaUBZqYNZLY5w,7482
298
300
  novelwriter/core/project.py,sha256=XNj5WltjIpUzGrPNZqJChte7lyVajYvf5JkqnZgA4kI,20941
299
301
  novelwriter/core/projectdata.py,sha256=EPgvvC8U8qAL3UMZSSuUNiMc9kifULJaexQ3N09Wj4A,10006
@@ -305,7 +307,7 @@ novelwriter/core/storage.py,sha256=ndB0PigeoRrQn3tUSjwbDc9FySEYOugeIARFUMld-AY,2
305
307
  novelwriter/core/tree.py,sha256=awKPagDBkX9negFwiSlydMj-RsowUJaJlGwzBctoGW0,18741
306
308
  novelwriter/dialogs/about.py,sha256=TPdkAPpPsAx7zhCbfBrSn-GhXfz-xG1OSJIePdI-E1k,4780
307
309
  novelwriter/dialogs/docmerge.py,sha256=8Xu_kan7u9LI2__HCnEsDZjLcfn5XP-tFjWvE8VXrDs,6120
308
- novelwriter/dialogs/docsplit.py,sha256=nt5L_SuB7QlfDYgBecd57bir5RVIcbpptCMdIBg4-Fs,9306
310
+ novelwriter/dialogs/docsplit.py,sha256=McPERzcZ4gZhkaT4S8VRuCMABXTlq1Jq2WB2rf9w6jA,9349
309
311
  novelwriter/dialogs/editlabel.py,sha256=3x34vjqkdIvS1EdR6D1DHJgVcR_Ny-BkhMR6PKtnUOc,2988
310
312
  novelwriter/dialogs/preferences.py,sha256=CQdanGVIfZu6-u2Is9oewXWYbkhTpHTERwvfEqH2ixo,39131
311
313
  novelwriter/dialogs/projectsettings.py,sha256=uTTDKL5oZhj-DdCfxCOgvN8ZkoDg1Ds7j1wrYMHssHo,29949
@@ -334,11 +336,11 @@ novelwriter/gui/dochighlight.py,sha256=z6WcQfkHzSlXg4-DALtJUHl_8wnikP-YT0iIZmnCV
334
336
  novelwriter/gui/docviewer.py,sha256=SJ38_Zn6CMmSRdVF3EPztTQe907yWSqQr5B-0Mg6iVo,34518
335
337
  novelwriter/gui/docviewerpanel.py,sha256=3MXehPMyf__mpNaKPNow1I-9CUme_8cpXd-cOCAxWls,19726
336
338
  novelwriter/gui/editordocument.py,sha256=opqrQc_GMNa9InQBAWW_WugSHVO_5cievX7DuF1Cbm4,4723
337
- novelwriter/gui/itemdetails.py,sha256=HQ2E1p9EiDsuNTgULEV__AzqW1DJ6qjB5DWILtlkeyg,9678
338
- novelwriter/gui/mainmenu.py,sha256=VKMgE8_jxRM8973ycArOpGMaTwHy-7ju2TIzm2-Zqqo,41629
339
+ novelwriter/gui/itemdetails.py,sha256=Wl8_VAFoeYvgTHCBI4vI5-1JioVlN6xA2GDLgwEx7OU,9687
340
+ novelwriter/gui/mainmenu.py,sha256=v3KvkPsqQiHhwQoiJ_SH9FuU9qpPfHK9PeNviz34DY4,41638
339
341
  novelwriter/gui/noveltree.py,sha256=-XKR_zBGjbO44hEknhZt64NeW00LIC_31LQURgjsv_U,27136
340
- novelwriter/gui/outline.py,sha256=e1U_KakgnJX044nmP5NsXzbrSVd-G_t0tJ_531zMXZI,38446
341
- novelwriter/gui/projtree.py,sha256=ffXSwCIZotT28n6zIvN7UhwA5az1dgWh9Mff6gc4h2Y,53062
342
+ novelwriter/gui/outline.py,sha256=v0rrn5o5BUsuvxBZOvICTPAP6YUhD0eFS3msvNfYuaI,38455
343
+ novelwriter/gui/projtree.py,sha256=g-OoMsoAOOLHiftztDSI5H4J9C-5TBRGks9KQWpuKnM,53120
342
344
  novelwriter/gui/search.py,sha256=xP5M4iEA-6Hulgk2JwNqg8_myWi2KT8Yk9ufw4H3gh0,12844
343
345
  novelwriter/gui/sidebar.py,sha256=oPlbPu7jlE5J1P5Jn9X5YtvLgInzPz2Jr7AC98Z2S4k,6286
344
346
  novelwriter/gui/statusbar.py,sha256=0XdsejOoPUCXxe_AN0f2w_4Duufa7wlUSRZg-EEeoYw,9487
@@ -348,14 +350,14 @@ novelwriter/text/patterns.py,sha256=T2BpUcVvXXFIadIdOqOYF1eih4LFBiRAZ7CtRuO85c8,
348
350
  novelwriter/tools/dictionaries.py,sha256=EhBGOvAW9AJnA29_GYan5XcRfciL6tSq7ZB-mmF8Ums,9250
349
351
  novelwriter/tools/lipsum.py,sha256=NZdCJ5TNwKdfwYqtRXtQ5pDbtVFbQzxiGoNPctpCHDk,4819
350
352
  novelwriter/tools/manusbuild.py,sha256=fUAGp7uaPY2rFUXRaGyE8Fce49z4-xkz1i8GAV2fXlI,14107
351
- novelwriter/tools/manuscript.py,sha256=ib5FKpcQR_A6jBWuTfQCHpx32ySvE4YFtz56a8pLAxE,40053
353
+ novelwriter/tools/manuscript.py,sha256=LC8w3pQLC9iL01_GcfLok5_Ul0wvxh13dhpF15_B5Eo,40053
352
354
  novelwriter/tools/manussettings.py,sha256=jn8E6SroiuwHv5NINvRgYgaW85ji2li2bZW2NSobvTI,60883
353
355
  novelwriter/tools/noveldetails.py,sha256=k17ZH21M7yfLNEhY_qD-GREia5CxanN9dbVWt1selkk,18506
354
356
  novelwriter/tools/welcome.py,sha256=kE8HWfgvvncwEQnfXPoFipNzugpe2JemcVJr2kNiHIc,28020
355
357
  novelwriter/tools/writingstats.py,sha256=tuIkHkkiAPJv4zUBIFyh6_mVHRK-beYSc_zBUKG8MnM,22792
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,,
358
+ novelWriter-2.6.3.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
359
+ novelWriter-2.6.3.dist-info/METADATA,sha256=Hh36yolhBWLShycU9Mg8H47K4Zv4cSll5xKxOOTxV-U,2581
360
+ novelWriter-2.6.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
361
+ novelWriter-2.6.3.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
362
+ novelWriter-2.6.3.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
363
+ novelWriter-2.6.3.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.6.1"
51
- __hexversion__ = "0x020601f0"
52
- __date__ = "2025-02-02"
50
+ __version__ = "2.6.3"
51
+ __hexversion__ = "0x020603f0"
52
+ __date__ = "2025-02-16"
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
Binary file
@@ -0,0 +1,118 @@
1
+ {
2
+ "Synopsis": "Synopse",
3
+ "Short Description": "Krátký popis",
4
+ "Footnotes": "Poznámky pod čarou",
5
+ "Comment": "Komentář",
6
+ "Notes": "Poznámka",
7
+ "Tag": "Štítek",
8
+ "Point of View": "Úhel pohledu",
9
+ "Focus": "Zaměření",
10
+ "Characters": "Postavy",
11
+ "Plot": "Zápletka",
12
+ "Timeline": "Časová osa",
13
+ "Locations": "Lokality",
14
+ "Objects": "Objekty",
15
+ "Entities": "Subjekty",
16
+ "Custom": "Vlastní",
17
+ "New Page": "Nová stránka",
18
+ "0": "Nula",
19
+ "1": "Jedna",
20
+ "2": "Dva",
21
+ "3": "Tři",
22
+ "4": "Čtyři",
23
+ "5": "Pět",
24
+ "6": "Šest",
25
+ "7": "Sedm",
26
+ "8": "Osm",
27
+ "9": "Devět",
28
+ "10": "Deset",
29
+ "11": "Jedenáct",
30
+ "12": "Dvanáct",
31
+ "13": "Třináct",
32
+ "14": "Čtrnáct",
33
+ "15": "Patnáct",
34
+ "16": "Šestnáct",
35
+ "17": "Sedmnáct",
36
+ "18": "Osmnáct",
37
+ "19": "Devatenáct",
38
+ "20": "Dvacet",
39
+ "21": "Dvacet jedna",
40
+ "22": "Dvacet dva",
41
+ "23": "Dvacet tři",
42
+ "24": "Dvacet čtyři",
43
+ "25": "Dvacet pět",
44
+ "26": "Dvacet šest",
45
+ "27": "Dvacet sedm",
46
+ "28": "Dvacet osm",
47
+ "29": "Dvacet devět",
48
+ "30": "Třicet",
49
+ "31": "Třicet jedna",
50
+ "32": "Třicet dva",
51
+ "33": "Třicet tři",
52
+ "34": "Třicet čtyři",
53
+ "35": "Třicet pět",
54
+ "36": "Třicet šest",
55
+ "37": "Třicet sedm",
56
+ "38": "Třicet osm",
57
+ "39": "Třicet devět",
58
+ "40": "Čtyřicet",
59
+ "41": "Čtyřicet jedna",
60
+ "42": "Čtyřicet dva",
61
+ "43": "Čtyřicet tři",
62
+ "44": "Čtyřicet čtyři",
63
+ "45": "Čtyřicet pět",
64
+ "46": "Čtyřicet šest",
65
+ "47": "Čtyřicet sedm",
66
+ "48": "Deset osm",
67
+ "49": "Čtyřicet devět",
68
+ "50": "Padesát",
69
+ "51": "Padesát jedna",
70
+ "52": "Padesát dva",
71
+ "53": "Padesát tři",
72
+ "54": "Padesát čtyři",
73
+ "55": "Padesát pět",
74
+ "56": "Padesát šest",
75
+ "57": "Padesát sedm",
76
+ "58": "Padesát osm",
77
+ "59": "Padesát devět",
78
+ "60": "Šedesát",
79
+ "61": "Šedesát jedna",
80
+ "62": "Šedesát dva",
81
+ "63": "Šedesát tři",
82
+ "64": "Šedesát čtyři",
83
+ "65": "Šedesát pět",
84
+ "66": "Šedesát šest",
85
+ "67": "Šedesát sedm",
86
+ "68": "Šedesát osm",
87
+ "69": "Šedesát devět",
88
+ "70": "Sedmdesát",
89
+ "71": "Sedmdesát jedna",
90
+ "72": "Sedmdesát dva",
91
+ "73": "Sedmdesát tři",
92
+ "74": "Sedmdesát čtyři",
93
+ "75": "Sedmdesát pět",
94
+ "76": "Sedmdesát šest",
95
+ "77": "Sedmdesát sedm",
96
+ "78": "Sedmnáct osm",
97
+ "79": "Sedmdesát devět",
98
+ "80": "Osmdesát",
99
+ "81": "Osmdesát jedna",
100
+ "82": "Osmdesát dva",
101
+ "83": "Osmdesát tři",
102
+ "84": "Osmdesát čtyři",
103
+ "85": "Osmdesát pět",
104
+ "86": "Osmdesát šest",
105
+ "87": "Osmdesát sedm",
106
+ "88": "Osmdesát osum",
107
+ "89": "Osmdesát devět",
108
+ "90": "Devadesát",
109
+ "91": "Devadesát jedna",
110
+ "92": "Devadesát dva",
111
+ "93": "Devadesát tři",
112
+ "94": "Devadesát čtyři",
113
+ "95": "Devadesát pět",
114
+ "96": "Devadesát šest",
115
+ "97": "Devadesát sedm",
116
+ "98": "Devadesát osm",
117
+ "99": "Devadesát devět"
118
+ }
Binary file
Binary file
@@ -26,6 +26,7 @@
26
26
  translators for the languages currently available:</p>
27
27
 
28
28
  <ul>
29
+ <li><b>Czech:</b> Tomáš Zmek (perteus)</li>
29
30
  <li><b>Dutch:</b> Martijn van der Kleijn (mvdkleijn)</li>
30
31
  <li><b>French:</b> Jan Lüdke (jyhelle)</li>
31
32
  <li><b>German:</b> Myian (HeyMyian)</li>
novelwriter/constants.py CHANGED
@@ -35,6 +35,11 @@ def trConst(text: str) -> str:
35
35
  return QCoreApplication.translate("Constant", text)
36
36
 
37
37
 
38
+ def trStats(text: str) -> str:
39
+ """Wrapper function for locally translating stats constants."""
40
+ return QCoreApplication.translate("Stats", text)
41
+
42
+
38
43
  class nwConst:
39
44
 
40
45
  # Date and Time Formats
@@ -370,32 +375,32 @@ class nwLabels:
370
375
  nwBuildFmt.J_NWD: ".json",
371
376
  }
372
377
  SHAPES_PLAIN = {
373
- nwStatusShape.SQUARE: QT_TRANSLATE_NOOP("Shape", "Square"),
374
- nwStatusShape.TRIANGLE: QT_TRANSLATE_NOOP("Shape", "Triangle"),
375
- nwStatusShape.NABLA: QT_TRANSLATE_NOOP("Shape", "Nabla"),
376
- nwStatusShape.DIAMOND: QT_TRANSLATE_NOOP("Shape", "Diamond"),
377
- nwStatusShape.PENTAGON: QT_TRANSLATE_NOOP("Shape", "Pentagon"),
378
- nwStatusShape.HEXAGON: QT_TRANSLATE_NOOP("Shape", "Hexagon"),
379
- nwStatusShape.STAR: QT_TRANSLATE_NOOP("Shape", "Star"),
380
- nwStatusShape.PACMAN: QT_TRANSLATE_NOOP("Shape", "Pacman"),
378
+ nwStatusShape.SQUARE: QT_TRANSLATE_NOOP("Constant", "Square"),
379
+ nwStatusShape.TRIANGLE: QT_TRANSLATE_NOOP("Constant", "Triangle"),
380
+ nwStatusShape.NABLA: QT_TRANSLATE_NOOP("Constant", "Nabla"),
381
+ nwStatusShape.DIAMOND: QT_TRANSLATE_NOOP("Constant", "Diamond"),
382
+ nwStatusShape.PENTAGON: QT_TRANSLATE_NOOP("Constant", "Pentagon"),
383
+ nwStatusShape.HEXAGON: QT_TRANSLATE_NOOP("Constant", "Hexagon"),
384
+ nwStatusShape.STAR: QT_TRANSLATE_NOOP("Constant", "Star"),
385
+ nwStatusShape.PACMAN: QT_TRANSLATE_NOOP("Constant", "Pacman"),
381
386
  }
382
387
  SHAPES_CIRCLE = {
383
- nwStatusShape.CIRCLE_Q: QT_TRANSLATE_NOOP("Shape", "1/4 Circle"),
384
- nwStatusShape.CIRCLE_H: QT_TRANSLATE_NOOP("Shape", "Half Circle"),
385
- nwStatusShape.CIRCLE_T: QT_TRANSLATE_NOOP("Shape", "3/4 Circle"),
386
- nwStatusShape.CIRCLE: QT_TRANSLATE_NOOP("Shape", "Full Circle"),
388
+ nwStatusShape.CIRCLE_Q: QT_TRANSLATE_NOOP("Constant", "1/4 Circle"),
389
+ nwStatusShape.CIRCLE_H: QT_TRANSLATE_NOOP("Constant", "Half Circle"),
390
+ nwStatusShape.CIRCLE_T: QT_TRANSLATE_NOOP("Constant", "3/4 Circle"),
391
+ nwStatusShape.CIRCLE: QT_TRANSLATE_NOOP("Constant", "Full Circle"),
387
392
  }
388
393
  SHAPES_BARS = {
389
- nwStatusShape.BARS_1: QT_TRANSLATE_NOOP("Shape", "1 Bar"),
390
- nwStatusShape.BARS_2: QT_TRANSLATE_NOOP("Shape", "2 Bars"),
391
- nwStatusShape.BARS_3: QT_TRANSLATE_NOOP("Shape", "3 Bars"),
392
- nwStatusShape.BARS_4: QT_TRANSLATE_NOOP("Shape", "4 Bars"),
394
+ nwStatusShape.BARS_1: QT_TRANSLATE_NOOP("Constant", "1 Bar"),
395
+ nwStatusShape.BARS_2: QT_TRANSLATE_NOOP("Constant", "2 Bars"),
396
+ nwStatusShape.BARS_3: QT_TRANSLATE_NOOP("Constant", "3 Bars"),
397
+ nwStatusShape.BARS_4: QT_TRANSLATE_NOOP("Constant", "4 Bars"),
393
398
  }
394
399
  SHAPES_BLOCKS = {
395
- nwStatusShape.BLOCK_1: QT_TRANSLATE_NOOP("Shape", "1 Block"),
396
- nwStatusShape.BLOCK_2: QT_TRANSLATE_NOOP("Shape", "2 Blocks"),
397
- nwStatusShape.BLOCK_3: QT_TRANSLATE_NOOP("Shape", "3 Blocks"),
398
- nwStatusShape.BLOCK_4: QT_TRANSLATE_NOOP("Shape", "4 Blocks"),
400
+ nwStatusShape.BLOCK_1: QT_TRANSLATE_NOOP("Constant", "1 Block"),
401
+ nwStatusShape.BLOCK_2: QT_TRANSLATE_NOOP("Constant", "2 Blocks"),
402
+ nwStatusShape.BLOCK_3: QT_TRANSLATE_NOOP("Constant", "3 Blocks"),
403
+ nwStatusShape.BLOCK_4: QT_TRANSLATE_NOOP("Constant", "4 Blocks"),
399
404
  }
400
405
  FILE_FILTERS = {
401
406
  "*.txt": QT_TRANSLATE_NOOP("Constant", "Text files"),
@@ -328,7 +328,7 @@ class ProjectModel(QAbstractItemModel):
328
328
 
329
329
  def parent(self, index: QModelIndex) -> QModelIndex:
330
330
  """Get the parent model index of another index."""
331
- if index.isValid() and (parent := index.internalPointer().parent()):
331
+ if index.isValid() and (node := index.internalPointer()) and (parent := node.parent()):
332
332
  return self.createIndex(parent.row(), 0, parent)
333
333
  return QModelIndex()
334
334
 
@@ -379,7 +379,9 @@ class ProjectModel(QAbstractItemModel):
379
379
  row: int, column: int, parent: QModelIndex
380
380
  ) -> bool:
381
381
  """Check if mime data can be dropped on the current location."""
382
- return data.hasFormat(nwConst.MIME_HANDLE) and action == Qt.DropAction.MoveAction
382
+ if parent.isValid() and parent.internalPointer() is not self._root:
383
+ return data.hasFormat(nwConst.MIME_HANDLE) and action == Qt.DropAction.MoveAction
384
+ return False
383
385
 
384
386
  def dropMimeData(
385
387
  self, data: QMimeData, action: Qt.DropAction,
@@ -71,10 +71,10 @@ class GuiDocSplit(NDialog):
71
71
  vSp = CONFIG.pxInt(8)
72
72
  bSp = CONFIG.pxInt(12)
73
73
 
74
- pOptions = SHARED.project.options
75
- spLevel = pOptions.getInt("GuiDocSplit", "spLevel", 3)
76
- intoFolder = pOptions.getBool("GuiDocSplit", "intoFolder", True)
77
- docHierarchy = pOptions.getBool("GuiDocSplit", "docHierarchy", True)
74
+ options = SHARED.project.options
75
+ spLevel = options.getInt("GuiDocSplit", "spLevel", 3)
76
+ intoFolder = options.getBool("GuiDocSplit", "intoFolder", True)
77
+ docHierarchy = options.getBool("GuiDocSplit", "docHierarchy", True)
78
78
 
79
79
  # Heading Selection
80
80
  self.listBox = QListWidget(self)
@@ -171,10 +171,10 @@ class GuiDocSplit(NDialog):
171
171
  self._data["moveToTrash"] = moveToTrash
172
172
 
173
173
  logger.debug("Saving State: GuiDocSplit")
174
- pOptions = SHARED.project.options
175
- pOptions.setValue("GuiDocSplit", "spLevel", spLevel)
176
- pOptions.setValue("GuiDocSplit", "intoFolder", intoFolder)
177
- pOptions.setValue("GuiDocSplit", "docHierarchy", docHierarchy)
174
+ options = SHARED.project.options
175
+ options.setValue("GuiDocSplit", "spLevel", spLevel)
176
+ options.setValue("GuiDocSplit", "intoFolder", intoFolder)
177
+ options.setValue("GuiDocSplit", "docHierarchy", docHierarchy)
178
178
 
179
179
  return self._data, self._text
180
180
 
@@ -218,42 +218,46 @@ class GuiDocSplit(NDialog):
218
218
  if not self._text:
219
219
  self._text = SHARED.project.storage.getDocumentText(sHandle).splitlines()
220
220
 
221
- for lineNo, aLine in enumerate(self._text):
222
-
223
- onLine = -1
224
- hLevel = 0
225
- hLabel = aLine.strip()
226
- if aLine.startswith("# ") and spLevel >= 1:
227
- onLine = lineNo
228
- hLevel = 1
229
- hLabel = aLine[2:].strip()
230
- elif aLine.startswith("## ") and spLevel >= 2:
231
- onLine = lineNo
232
- hLevel = 2
233
- hLabel = aLine[3:].strip()
234
- elif aLine.startswith("### ") and spLevel >= 3:
235
- onLine = lineNo
236
- hLevel = 3
237
- hLabel = aLine[4:].strip()
238
- elif aLine.startswith("#### ") and spLevel >= 4:
239
- onLine = lineNo
240
- hLevel = 4
241
- hLabel = aLine[5:].strip()
242
- elif aLine.startswith("#! ") and spLevel >= 1:
243
- onLine = lineNo
244
- hLevel = 1
245
- hLabel = aLine[3:].strip()
246
- elif aLine.startswith("##! ") and spLevel >= 2:
247
- onLine = lineNo
248
- hLevel = 2
249
- hLabel = aLine[4:].strip()
250
-
251
- if onLine >= 0 and hLevel > 0:
252
- newItem = QListWidgetItem()
253
- newItem.setText(aLine.strip())
254
- newItem.setData(self.LINE_ROLE, onLine)
255
- newItem.setData(self.LEVEL_ROLE, hLevel)
256
- newItem.setData(self.LABEL_ROLE, hLabel)
257
- self.listBox.addItem(newItem)
221
+ for i, line in enumerate(self._text):
222
+
223
+ pos = -1
224
+ level = 0
225
+ label = line.strip()
226
+ if line.startswith("# ") and spLevel >= 1:
227
+ pos = i
228
+ level = 1
229
+ label = line[2:].strip()
230
+ elif line.startswith("## ") and spLevel >= 2:
231
+ pos = i
232
+ level = 2
233
+ label = line[3:].strip()
234
+ elif line.startswith("### ") and spLevel >= 3:
235
+ pos = i
236
+ level = 3
237
+ label = line[4:].strip()
238
+ elif line.startswith("#### ") and spLevel >= 4:
239
+ pos = i
240
+ level = 4
241
+ label = line[5:].strip()
242
+ elif line.startswith("#! ") and spLevel >= 1:
243
+ pos = i
244
+ level = 1
245
+ label = line[3:].strip()
246
+ elif line.startswith("##! ") and spLevel >= 2:
247
+ pos = i
248
+ level = 2
249
+ label = line[4:].strip()
250
+ elif line.startswith("###! ") and spLevel >= 3:
251
+ pos = i
252
+ level = 3
253
+ label = line[5:].strip()
254
+
255
+ if pos >= 0 and level > 0:
256
+ trItem = QListWidgetItem()
257
+ trItem.setText(line.strip())
258
+ trItem.setData(self.LINE_ROLE, pos)
259
+ trItem.setData(self.LEVEL_ROLE, level)
260
+ trItem.setData(self.LABEL_ROLE, label)
261
+ self.listBox.addItem(trItem)
258
262
 
259
263
  return
@@ -32,7 +32,7 @@ from PyQt5.QtWidgets import QGridLayout, QLabel, QWidget
32
32
 
33
33
  from novelwriter import CONFIG, SHARED
34
34
  from novelwriter.common import elide
35
- from novelwriter.constants import nwLabels, nwStats, trConst
35
+ from novelwriter.constants import nwLabels, nwStats, trConst, trStats
36
36
  from novelwriter.enum import nwChange
37
37
  from novelwriter.types import (
38
38
  QtAlignLeft, QtAlignLeftBase, QtAlignRight, QtAlignRightBase,
@@ -65,9 +65,9 @@ class GuiItemDetails(QWidget):
65
65
  fntValue = self.font()
66
66
  fntValue.setPointSizeF(0.9*fPt)
67
67
 
68
- trStats1 = trConst(nwLabels.STATS_NAME[nwStats.CHARS])
69
- trStats2 = trConst(nwLabels.STATS_NAME[nwStats.WORDS])
70
- trStats3 = trConst(nwLabels.STATS_NAME[nwStats.PARAGRAPHS])
68
+ trStats1 = trStats(nwLabels.STATS_NAME[nwStats.CHARS])
69
+ trStats2 = trStats(nwLabels.STATS_NAME[nwStats.WORDS])
70
+ trStats3 = trStats(nwLabels.STATS_NAME[nwStats.PARAGRAPHS])
71
71
 
72
72
  # Label
73
73
  self.labelName = QLabel(self.tr("Label"), self)
@@ -35,7 +35,7 @@ from novelwriter import CONFIG, SHARED
35
35
  from novelwriter.common import openExternalPath, qtLambda
36
36
  from novelwriter.constants import (
37
37
  nwConst, nwKeyWords, nwLabels, nwShortcode, nwStats, nwStyles, nwUnicode,
38
- trConst
38
+ trConst, trStats
39
39
  )
40
40
  from novelwriter.enum import nwDocAction, nwDocInsert, nwFocus, nwView
41
41
  from novelwriter.extensions.eventfilters import StatusTipFilter
@@ -601,7 +601,7 @@ class GuiMainMenu(QMenuBar):
601
601
  self.mInsField = self.insMenu.addMenu(self.tr("Word/Character Count"))
602
602
  for field in nwStats.ALL_FIELDS:
603
603
  value = nwShortcode.FIELD_VALUE.format(field)
604
- action = self.mInsField.addAction(trConst(nwLabels.STATS_NAME[field]))
604
+ action = self.mInsField.addAction(trStats(nwLabels.STATS_NAME[field]))
605
605
  action.triggered.connect(qtLambda(self.requestDocInsertText.emit, value))
606
606
 
607
607
  # Insert > Breaks and Vertical Space
@@ -42,7 +42,7 @@ from PyQt5.QtWidgets import (
42
42
 
43
43
  from novelwriter import CONFIG, SHARED
44
44
  from novelwriter.common import checkInt, formatFileFilter
45
- from novelwriter.constants import nwKeyWords, nwLabels, nwStats, nwStyles, trConst
45
+ from novelwriter.constants import nwKeyWords, nwLabels, nwStats, nwStyles, trConst, trStats
46
46
  from novelwriter.enum import nwChange, nwDocMode, nwItemClass, nwItemLayout, nwItemType, nwOutline
47
47
  from novelwriter.error import logException
48
48
  from novelwriter.extensions.configlayout import NColourLabel
@@ -815,9 +815,9 @@ class GuiOutlineDetails(QScrollArea):
815
815
 
816
816
  bFont = SHARED.theme.guiFontB
817
817
 
818
- trStats1 = trConst(nwLabels.STATS_NAME[nwStats.CHARS])
819
- trStats2 = trConst(nwLabels.STATS_NAME[nwStats.WORDS])
820
- trStats3 = trConst(nwLabels.STATS_NAME[nwStats.PARAGRAPHS])
818
+ trStats1 = trStats(nwLabels.STATS_NAME[nwStats.CHARS])
819
+ trStats2 = trStats(nwLabels.STATS_NAME[nwStats.WORDS])
820
+ trStats3 = trStats(nwLabels.STATS_NAME[nwStats.PARAGRAPHS])
821
821
 
822
822
  # Details Area
823
823
  self.titleLabel = QLabel(self.tr("Title"), self)
@@ -177,6 +177,7 @@ class GuiProjectView(QWidget):
177
177
  self.projTree.addAction(trash)
178
178
  rename.triggered.connect(self.renameTreeItem)
179
179
  delete.triggered.connect(self.projTree.processDeleteRequest)
180
+ trash.triggered.connect(self.projTree.emptyTrash)
180
181
  return
181
182
 
182
183
  ##
@@ -43,7 +43,7 @@ from PyQt5.QtWidgets import (
43
43
 
44
44
  from novelwriter import CONFIG, SHARED
45
45
  from novelwriter.common import fuzzyTime
46
- from novelwriter.constants import nwLabels, nwStats, trConst
46
+ from novelwriter.constants import nwLabels, nwStats, trStats
47
47
  from novelwriter.core.buildsettings import BuildCollection, BuildSettings
48
48
  from novelwriter.core.docbuild import NWBuildDocument
49
49
  from novelwriter.extensions.modified import NIconToggleButton, NIconToolButton, NToolDialog
@@ -1037,17 +1037,17 @@ class _StatsWidget(QWidget):
1037
1037
  hPx = CONFIG.pxInt(12)
1038
1038
  vPx = CONFIG.pxInt(4)
1039
1039
 
1040
- trAllChars = trConst(nwLabels.STATS_NAME[nwStats.CHARS])
1041
- trTextChars = trConst(nwLabels.STATS_NAME[nwStats.CHARS_TEXT])
1042
- trTitleChars = trConst(nwLabels.STATS_NAME[nwStats.CHARS_TITLE])
1043
- trParagraphCount = trConst(nwLabels.STATS_NAME[nwStats.PARAGRAPHS])
1044
- trTitleCount = trConst(nwLabels.STATS_NAME[nwStats.TITLES])
1045
- trAllWordChars = trConst(nwLabels.STATS_NAME[nwStats.WCHARS_ALL])
1046
- trTextWordChars = trConst(nwLabels.STATS_NAME[nwStats.WCHARS_TEXT])
1047
- trTitleWordChars = trConst(nwLabels.STATS_NAME[nwStats.WCHARS_TITLE])
1048
- trAllWords = trConst(nwLabels.STATS_NAME[nwStats.WORDS])
1049
- trTextWords = trConst(nwLabels.STATS_NAME[nwStats.WORDS_TEXT])
1050
- trTitleWords = trConst(nwLabels.STATS_NAME[nwStats.WORDS_TITLE])
1040
+ trAllChars = trStats(nwLabels.STATS_NAME[nwStats.CHARS])
1041
+ trTextChars = trStats(nwLabels.STATS_NAME[nwStats.CHARS_TEXT])
1042
+ trTitleChars = trStats(nwLabels.STATS_NAME[nwStats.CHARS_TITLE])
1043
+ trParagraphCount = trStats(nwLabels.STATS_NAME[nwStats.PARAGRAPHS])
1044
+ trTitleCount = trStats(nwLabels.STATS_NAME[nwStats.TITLES])
1045
+ trAllWordChars = trStats(nwLabels.STATS_NAME[nwStats.WCHARS_ALL])
1046
+ trTextWordChars = trStats(nwLabels.STATS_NAME[nwStats.WCHARS_TEXT])
1047
+ trTitleWordChars = trStats(nwLabels.STATS_NAME[nwStats.WCHARS_TITLE])
1048
+ trAllWords = trStats(nwLabels.STATS_NAME[nwStats.WORDS])
1049
+ trTextWords = trStats(nwLabels.STATS_NAME[nwStats.WORDS_TEXT])
1050
+ trTitleWords = trStats(nwLabels.STATS_NAME[nwStats.WORDS_TITLE])
1051
1051
 
1052
1052
  # Minimal Form
1053
1053
  self.minWordCount = QLabel(self)