novelWriter 2.6b1__py3-none-any.whl → 2.6b2__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 (68) hide show
  1. {novelWriter-2.6b1.dist-info → novelWriter-2.6b2.dist-info}/METADATA +3 -3
  2. {novelWriter-2.6b1.dist-info → novelWriter-2.6b2.dist-info}/RECORD +68 -52
  3. {novelWriter-2.6b1.dist-info → novelWriter-2.6b2.dist-info}/WHEEL +1 -1
  4. novelwriter/__init__.py +49 -10
  5. novelwriter/assets/i18n/nw_de_DE.qm +0 -0
  6. novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
  7. novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
  8. novelwriter/assets/i18n/project_de_DE.json +2 -2
  9. novelwriter/assets/i18n/project_ru_RU.json +11 -0
  10. novelwriter/assets/icons/typicons_dark/icons.conf +7 -0
  11. novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +6 -0
  12. novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +6 -0
  13. novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +6 -0
  14. novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +6 -0
  15. novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +6 -0
  16. novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +6 -0
  17. novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +5 -0
  18. novelwriter/assets/icons/typicons_light/icons.conf +7 -0
  19. novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +6 -0
  20. novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +6 -0
  21. novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +6 -0
  22. novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +6 -0
  23. novelwriter/assets/icons/typicons_light/mixed_size-height.svg +6 -0
  24. novelwriter/assets/icons/typicons_light/mixed_size-width.svg +6 -0
  25. novelwriter/assets/icons/typicons_light/nw_toolbar.svg +5 -0
  26. novelwriter/assets/manual.pdf +0 -0
  27. novelwriter/assets/sample.zip +0 -0
  28. novelwriter/assets/text/credits_en.htm +1 -0
  29. novelwriter/common.py +37 -2
  30. novelwriter/config.py +15 -12
  31. novelwriter/constants.py +24 -9
  32. novelwriter/core/coretools.py +111 -125
  33. novelwriter/core/docbuild.py +3 -2
  34. novelwriter/core/index.py +9 -19
  35. novelwriter/core/item.py +39 -6
  36. novelwriter/core/itemmodel.py +518 -0
  37. novelwriter/core/project.py +67 -89
  38. novelwriter/core/status.py +7 -5
  39. novelwriter/core/tree.py +268 -287
  40. novelwriter/dialogs/docmerge.py +7 -17
  41. novelwriter/dialogs/preferences.py +3 -3
  42. novelwriter/dialogs/projectsettings.py +2 -2
  43. novelwriter/enum.py +7 -0
  44. novelwriter/extensions/configlayout.py +6 -4
  45. novelwriter/formats/todocx.py +34 -38
  46. novelwriter/formats/tohtml.py +14 -15
  47. novelwriter/formats/tokenizer.py +21 -17
  48. novelwriter/formats/toodt.py +53 -124
  49. novelwriter/formats/toqdoc.py +92 -44
  50. novelwriter/gui/doceditor.py +230 -219
  51. novelwriter/gui/docviewer.py +38 -9
  52. novelwriter/gui/docviewerpanel.py +14 -22
  53. novelwriter/gui/itemdetails.py +17 -24
  54. novelwriter/gui/mainmenu.py +13 -8
  55. novelwriter/gui/noveltree.py +12 -12
  56. novelwriter/gui/outline.py +10 -11
  57. novelwriter/gui/projtree.py +548 -1202
  58. novelwriter/gui/search.py +9 -10
  59. novelwriter/gui/theme.py +7 -3
  60. novelwriter/guimain.py +59 -43
  61. novelwriter/shared.py +52 -23
  62. novelwriter/text/patterns.py +17 -5
  63. novelwriter/tools/manusbuild.py +13 -11
  64. novelwriter/tools/manussettings.py +42 -52
  65. novelwriter/types.py +7 -1
  66. {novelWriter-2.6b1.dist-info → novelWriter-2.6b2.dist-info}/LICENSE.md +0 -0
  67. {novelWriter-2.6b1.dist-info → novelWriter-2.6b2.dist-info}/entry_points.txt +0 -0
  68. {novelWriter-2.6b1.dist-info → novelWriter-2.6b2.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: novelWriter
3
- Version: 2.6b1
3
+ Version: 2.6b2
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
@@ -24,8 +24,8 @@ Classifier: Topic :: Text Editors
24
24
  Requires-Python: >=3.9
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE.md
27
- Requires-Dist: pyqt5 >=5.15
28
- Requires-Dist: pyenchant >=3.0.0
27
+ Requires-Dist: pyqt5>=5.15
28
+ Requires-Dist: pyenchant>=3.0.0
29
29
 
30
30
  <img src="https://raw.githubusercontent.com/vkbo/novelWriter/main/setup/novelwriter_text.png">
31
31
 
@@ -1,15 +1,15 @@
1
- novelwriter/__init__.py,sha256=V5sVfjFKEzWnXaXjc8cFLgQK-084cQc9qfz_a0hoceo,7552
2
- novelwriter/common.py,sha256=cONkyYFIt4YMTkMaZR7CWlTR0BvU_U7ObBjM1tfpJO0,20012
3
- novelwriter/config.py,sha256=nGRx3CGa3wmqLQ60A6xv3w6tBwfSclZPyI4a14BzhY8,39396
4
- novelwriter/constants.py,sha256=_hKNHfkVSOK7Oo-9RyRLXxVqh1Pv1h0qU_g6NbiAxRQ,25494
5
- novelwriter/enum.py,sha256=nbH8gSn7onAMCuWSZJLvUIzwqmx_EovCtmJK_r7ynys,3618
1
+ novelwriter/__init__.py,sha256=KV3vGtSPCtlZ7kEWopW8OkdOG0Yrs5nRSF3y-vl8CmQ,8818
2
+ novelwriter/common.py,sha256=23287aY7viedw94m9X_01DaTaXfcOGwv_Bm_3H7zkzY,21726
3
+ novelwriter/config.py,sha256=0Z_30Y8ZEt3QZHO-h7ZEDkKdd6RcXthrEId5vuOaAck,39537
4
+ novelwriter/constants.py,sha256=71YtZ8z25iTRiaUy-pCpONeNtjvxipHmGLVzSm9TTb4,26024
5
+ novelwriter/enum.py,sha256=KX_51vOG-M3ytDsiMuMvoVzDhGlh2qRgjBUV_6ipt1A,3688
6
6
  novelwriter/error.py,sha256=iIx1OzyXTT7Ngk2mXW_5c0YqVdFBD0NIkUFgAXNNBlM,6813
7
- novelwriter/guimain.py,sha256=ep-RcerUivTj-SMkNxALKcXkNlPa538SbOhSkg2EtHE,49220
8
- novelwriter/shared.py,sha256=VJe-CuGy-WWYBeMumpg7KzuOAHxAZLMQIds_3ZPY6vU,16202
9
- novelwriter/types.py,sha256=60gJAuZSISbssBy6YrNIg8BlPOGoyH4IIxS99Dh8ZOg,4889
10
- novelwriter/assets/manual.pdf,sha256=jNIxkqqNArtDHkWnlJ0_TlPnbJFVLhUkHN0Xr1G_ph0,2734203
11
- novelwriter/assets/sample.zip,sha256=veIizPN-WbN6wEmowrXWraE39uup-DU2T_LmveVyTIE,28032
12
- novelwriter/assets/i18n/nw_de_DE.qm,sha256=__e0mtl0hfBX61eICSrJhR4mY0r7W9IkI5fYCwvLrYw,100554
7
+ novelwriter/guimain.py,sha256=3zZqXkxdqThqvyv8qFTkbPC8om5ARqvZzFct-O1GIqE,49681
8
+ novelwriter/shared.py,sha256=Sb9yri3rJX72-kTFCoSA2Lyjzg5RSS13DQDecQzY974,17486
9
+ novelwriter/types.py,sha256=A71R3BwJty71aJl5TvxQ27RctWy3ETQq-yp314pA66Y,5073
10
+ novelwriter/assets/manual.pdf,sha256=fZR_w_bJoeqP_JlctGpZmT1-SmDbvKbhFMNR4AaWAng,2734082
11
+ novelwriter/assets/sample.zip,sha256=eQ_ZRDq5tEXtlibdo-DA6NQXSirfIpBRTch_evMZJog,28032
12
+ novelwriter/assets/i18n/nw_de_DE.qm,sha256=tyew6MnnKP9s5zEkwO_MiLJ2EH2sOO21BPaDnP5ebRU,100540
13
13
  novelwriter/assets/i18n/nw_en_US.qm,sha256=Mueo40jL6hBXcV0Vxac-Jd-GAsLASSqEV_7W96sFkZ8,93304
14
14
  novelwriter/assets/i18n/nw_es_419.qm,sha256=eHiRXnf86BPH5MGvJuo8bR_nBaf-HULE-nRW76o9-yU,103131
15
15
  novelwriter/assets/i18n/nw_fr_FR.qm,sha256=mB2TCRNjttTFoC34iGbri5OVt2ygCNtxPS5g48CA-HA,103616
@@ -18,9 +18,10 @@ novelwriter/assets/i18n/nw_ja_JP.qm,sha256=ILDwq_8kHCiorjZabSbUYer9xB9q7hf-NQyAl
18
18
  novelwriter/assets/i18n/nw_nb_NO.qm,sha256=g2raFt2Lw5RcE0IJM1_f7GJsqt8G_uSv7m6sD6zFe_0,95946
19
19
  novelwriter/assets/i18n/nw_nl_NL.qm,sha256=SnEtdqHaSb8xWA4-EpnWxXD_uK8BeBs44I32AwlST3M,99906
20
20
  novelwriter/assets/i18n/nw_pl_PL.qm,sha256=Em13jYHYnTbLZp_JaodgZntmcpxBrvbitOZhM8ZQXig,98702
21
- novelwriter/assets/i18n/nw_pt_BR.qm,sha256=EXqtpkEPafPipTd0rCBN6cQ5SlqVyeMPwyMfgpTKjMs,101680
21
+ novelwriter/assets/i18n/nw_pt_BR.qm,sha256=zGC7PbMD6NlbNYmZ2IiV8B9xxdTE7yBpaFhSeaBQSzU,101706
22
+ novelwriter/assets/i18n/nw_ru_RU.qm,sha256=DOaPZyREPxMrOuLLs1Sboj43QA6HfK6okU8WJGue5wE,98115
22
23
  novelwriter/assets/i18n/nw_zh_CN.qm,sha256=poSDKRXapJ8zHBmiRdA85KcIN1nm6gnowDMlpoJwAKE,69647
23
- novelwriter/assets/i18n/project_de_DE.json,sha256=85ud9rxRHyXm85QDmW_LKcUE8h0L1Bvukaf5Tjt-wpg,2818
24
+ novelwriter/assets/i18n/project_de_DE.json,sha256=fuEYohM2xm0mLXmibbU0TISr0BCZb2yOiBLCUmKhDJQ,2810
24
25
  novelwriter/assets/i18n/project_en_GB.json,sha256=CvBOO8kaW0k7NlwvxFi62Br9HYKJKQLDk1nQfvXOj48,2537
25
26
  novelwriter/assets/i18n/project_en_US.json,sha256=EcQAVEiQgRL3qobuzkPTfOWIxAc3Om-tA7nXUFFXEdI,2483
26
27
  novelwriter/assets/i18n/project_es_419.json,sha256=Z6CAhc0hzekUZFDM-0ykRRsckJG4c2AETy4Xa_f2T7s,2730
@@ -32,7 +33,7 @@ novelwriter/assets/i18n/project_nl_NL.json,sha256=qUEEjLMRtvt9VuNmjb_qOVCXqUCENH
32
33
  novelwriter/assets/i18n/project_nn_NO.json,sha256=7ZfmtFWHcDMiLVqdOEDHQWHbpoC_bv5ESmf_-CoYiks,2250
33
34
  novelwriter/assets/i18n/project_pl_PL.json,sha256=msXu3rNhJ19ytVespoXQ95nZ-mFis5rlLeCPK4A3zS8,3461
34
35
  novelwriter/assets/i18n/project_pt_BR.json,sha256=FDxIeSlf3v8AcrWfgwk7UOMRDmb2hWdDoabsBq5rkL8,2763
35
- novelwriter/assets/i18n/project_ru_RU.json,sha256=F4QkD6VVDCtGdil7uoXCmuczvUpe9tv-1L-3Eyc8sKE,3699
36
+ novelwriter/assets/i18n/project_ru_RU.json,sha256=Lq8msxzjhkFHXPJAmEEyjoFOUV28CLJXmayY3h3jiAo,4075
36
37
  novelwriter/assets/i18n/project_zh_CN.json,sha256=cfl0TsnbISYUvygOw015y0x0REDG97xR0yjyJ85Jm34,2322
37
38
  novelwriter/assets/icons/none.svg,sha256=NRN9vMzohg7Ner71GwPthrCG0uA81TpY8UmKb8-L-pM,251
38
39
  novelwriter/assets/icons/novelwriter.ico,sha256=OJRIeeUcmS7Di51NA3uF5_Ov4V8T47gQ9qWv6C7qDeA,171059
@@ -40,7 +41,7 @@ novelwriter/assets/icons/novelwriter.svg,sha256=Ad_SgOdXSDJtFR3DLCx6Afme15I78r38
40
41
  novelwriter/assets/icons/x-novelwriter-project.ico,sha256=MXdZSYi3j95aIsT5bZo6CkhxmS75cThP9O_38UR7sjg,170697
41
42
  novelwriter/assets/icons/x-novelwriter-project.svg,sha256=VHf1aClkA91tZVYb3LFk9bi_Dw25QBVSjUJAjSD-YX4,5143
42
43
  novelwriter/assets/icons/typicons_dark/README.md,sha256=6ZxJq-19PNrMdeuVeVg84aLjxhr9oF7dLwuMFVGQyq0,1065
43
- novelwriter/assets/icons/typicons_dark/icons.conf,sha256=hKOFfIU_vhgoqCzkl9tovzDCHOHUdTAGeRrVXzXvHq0,4525
44
+ novelwriter/assets/icons/typicons_dark/icons.conf,sha256=FDqhLubF2BeVDpjIeysmhu5ceUXvTw9Q5slUwGbIH7w,4799
44
45
  novelwriter/assets/icons/typicons_dark/mixed_copy.svg,sha256=lUcY81wxepOd1XaPZb47oRmrsX3ZIHCLOEUBDPQyYoU,633
45
46
  novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg,sha256=POP_Cs3bkkKAmrS_fTgjj90eyNK0bipNGgOhDDlXKu0,1650
46
47
  novelwriter/assets/icons/typicons_dark/mixed_document-new.svg,sha256=EIVU3_ecC0d6rpCHXBfKoA_mWJyilqe7iA6XLQb9oRw,1849
@@ -53,7 +54,13 @@ novelwriter/assets/icons/typicons_dark/mixed_import.svg,sha256=XiitW007_GjKNMzby
53
54
  novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg,sha256=sjBBHcHWBwf6P3UIcLThccrDqaGLHUgV-ov6v6WXsAw,1208
54
55
  novelwriter/assets/icons/typicons_dark/mixed_input-none.svg,sha256=1uSgoXznt31ynAj3MHC-vVdDuaszmtEKbfofepNs7g4,1058
55
56
  novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg,sha256=Ml28wWspg9oipeuBbEOQnS2t0K67A4CO49p6nBKl8EI,1272
57
+ novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg,sha256=nPTb6-YjsVN0W0Yysh6KgC4mONOa9B-jmgdeAVMTxh4,713
58
+ novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg,sha256=Bz-iUWO19TBhCD_IVUtoKohq3wmP6wzSEnJ-6EV-nXc,711
59
+ novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg,sha256=RQSwJZoTQDeJuIoEcNtBzZOFYe5hu6N_LG9G934xg0k,711
60
+ novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg,sha256=eJOM0VEI0pFZWNfqKcFGl0jAxDpfohNoroR7gOWzbXw,712
56
61
  novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg,sha256=h2tBf_BthV5HnR9GB861PDMpIsc4OzzccuiKaUgBRAE,2163
62
+ novelwriter/assets/icons/typicons_dark/mixed_size-height.svg,sha256=bfHbAnXj7l5m-xPvTmzwng-D1ZLUsyjPu7e-H5xoWXQ,921
63
+ novelwriter/assets/icons/typicons_dark/mixed_size-width.svg,sha256=ouRcLqZKhRxoTwHDf53JzkmXDqDggZJeM2xcHpaAidU,919
57
64
  novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg,sha256=ssrqNUVY1vz4LtYE5pdINmP6qI5IZHFbokfYPzG-CTM,225
58
65
  novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg,sha256=nY2JYxPpGTsKCgp8pM0BdscFk6OoESNDVj53m4PMkM0,222
59
66
  novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg,sha256=NkZKLECgrrhPF9oI3OuZeSyuMiSN93T-qUGg2n99c_0,225
@@ -81,6 +88,7 @@ novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg,sha256=uO12-KZ3Nx4GEL2mI
81
88
  novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg,sha256=dOhhKxlsdWuQ7tq8HkBcShjNOUBpyEKgUP1RoFDlPLs,1550
82
89
  novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg,sha256=0TpY0nIinD4dwgwh0Nyfs0C4rJDcc2JsgxnXSE0flco,1549
83
90
  novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg,sha256=Z0ooKzRV_g298UX22uuUxZPC21Z9DN-1y4sY3vVIaZE,1121
91
+ novelwriter/assets/icons/typicons_dark/nw_toolbar.svg,sha256=gWxZ0epbAPaMP4Pi0B-1OmiAw56Rr8g8ilITkKDo1G8,389
84
92
  novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg,sha256=PsEm_GCebnkMvtVm1OUbVU0hvA2nL8bWlrlyrAWh0tE,519
85
93
  novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg,sha256=Io2wWbs2Z0z5GHzDkmf3AkNZZqyfSC0ilWVDvGv5Q5U,538
86
94
  novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg,sha256=m4w3ZUHy3R2aTtvLKZpmd6FPijjkaG6A5jhiqfTp9mg,1029
@@ -141,7 +149,7 @@ novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg,sha256=IvVXmxlkrTy
141
149
  novelwriter/assets/icons/typicons_dark/typ_user.svg,sha256=00gZEDr59B1A7A4o0w5VjCJOHnQHANsgXBhnB_VTMU4,733
142
150
  novelwriter/assets/icons/typicons_dark/typ_warning-full.svg,sha256=zqqV82C37dWH_yHoSuPo-BLsErg0sl8_VlB6fzXL4VE,970
143
151
  novelwriter/assets/icons/typicons_light/README.md,sha256=nyGvWLJ8cusLYP8YsjX_l213NkDE_GHrwctZ-I_JQUg,1066
144
- novelwriter/assets/icons/typicons_light/icons.conf,sha256=H9kBuYsmOFzSqZ7TZ1WjCQXV2SYtMXSaQ5jzr2lrvQ8,4528
152
+ novelwriter/assets/icons/typicons_light/icons.conf,sha256=ib9tQ1R0baMWBT7-8n73S5M4behYWG-uJmU3iIvD3PI,4802
145
153
  novelwriter/assets/icons/typicons_light/mixed_copy.svg,sha256=ojZVpxuFzlJFGEav5vg8Kr4SgDxffu0awEe3De5iB6U,636
146
154
  novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg,sha256=kXNwPbeKR3eupIrqtDQrNGq5sL8vdExLfPMrMX2sEsw,1650
147
155
  novelwriter/assets/icons/typicons_light/mixed_document-new.svg,sha256=u0YYfp6hTUEYLsrPleUqYocaG2hl62w-B85INvkm6S4,1825
@@ -154,7 +162,13 @@ novelwriter/assets/icons/typicons_light/mixed_import.svg,sha256=lad5N1wOjDrTLxEz
154
162
  novelwriter/assets/icons/typicons_light/mixed_input-checked.svg,sha256=uevUoQv7D-6g1RgE0gG2ZWek3118qIAcgkqg7zxK8Zs,1208
155
163
  novelwriter/assets/icons/typicons_light/mixed_input-none.svg,sha256=V6uPJ1f85DYXpuuC3n4-lV1U8zfyXYMbOHYBy9-uiQs,1055
156
164
  novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg,sha256=uKyeneabnW80b04DpK2k0Y7-uyoC-R3HLse19aSkVww,1269
165
+ novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg,sha256=aWFc7bwBS3ucj6R6s18hF8DO3Xu7qInFu4sxP-ufOdY,707
166
+ novelwriter/assets/icons/typicons_light/mixed_margin-left.svg,sha256=L-usVSQF9c05bgCibtYBuRvmoRJsL35JPp9XJ4aS_v4,705
167
+ novelwriter/assets/icons/typicons_light/mixed_margin-right.svg,sha256=wvcxiNqxDNShnRkXcTDcGx-4jVaDCHvnbxKkEsm5Nig,705
168
+ novelwriter/assets/icons/typicons_light/mixed_margin-top.svg,sha256=gfrkJLV_7SLH6NJaqbgycXnFwE9sL4DOPAgXpjeNFzQ,706
157
169
  novelwriter/assets/icons/typicons_light/mixed_search-replace.svg,sha256=eGKRJPxZhtwX9qQZ-kw3UmfLBdZqovqn7GVR2g4drnQ,2169
170
+ novelwriter/assets/icons/typicons_light/mixed_size-height.svg,sha256=z24yLe0SRlKJDA7g3HRbFSFTB-qfpbFBs4JX5wgL0TY,921
171
+ novelwriter/assets/icons/typicons_light/mixed_size-width.svg,sha256=HhZuLItCJlD6QU5hLioBpQwQBdfnRxAgSNIC17sDI_k,922
158
172
  novelwriter/assets/icons/typicons_light/nw_deco-h0.svg,sha256=ssrqNUVY1vz4LtYE5pdINmP6qI5IZHFbokfYPzG-CTM,225
159
173
  novelwriter/assets/icons/typicons_light/nw_deco-h1.svg,sha256=nuzuJ9h9Lb1HpdOq6NfRKzSGlUVo53fC4TnHHpdkOu0,225
160
174
  novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg,sha256=dkAEvmLO4DkRDe_rfRB-0L7yM7mEGj24XW1gFf3B-BA,225
@@ -182,6 +196,7 @@ novelwriter/assets/icons/typicons_light/nw_tb-strike.svg,sha256=HtAYlTga42JVpoUJ
182
196
  novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg,sha256=j8qncFQqiC5vZfFELENtX9COMcrI7NnyED17ki7tC08,1551
183
197
  novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg,sha256=-B-iVCPsoCaz9ZiVkHN6em2BJOI65_ssjFqZM75wxZ0,1550
184
198
  novelwriter/assets/icons/typicons_light/nw_tb-underline.svg,sha256=rxSFWY2lNpSuF2jbUk_jyfoHk_B5d2bLncaCY-2LT7w,1141
199
+ novelwriter/assets/icons/typicons_light/nw_toolbar.svg,sha256=6zQlA4M31aKNHxOo4wnbJ5tpFJk-58bYAYgAhzorJ9c,395
185
200
  novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg,sha256=FZFt51KLkvqrP0nM_bnCjKkELcLT7KMWB059gvSMKk4,523
186
201
  novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg,sha256=vDYZrsNe2Afo8-MqS9HV_gsz6aFraYZUyJeAdOXaE4Y,541
187
202
  novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg,sha256=bz93DwuiB_2Baf-oG5SsMdWGccYogyNqR2Yq3OQ4bDY,1032
@@ -262,7 +277,7 @@ novelwriter/assets/syntax/tomorrow_night.conf,sha256=mWPneIV_6tszLEK4-Eo-kcJmUbr
262
277
  novelwriter/assets/syntax/tomorrow_night_blue.conf,sha256=L42gcekFfNpCCB45m9Lhzmz8Y6Lvbpik3AADi_1Aao8,1549
263
278
  novelwriter/assets/syntax/tomorrow_night_bright.conf,sha256=h8_775Ed8hl2XhfCoxAY2kT43vi-UvG8UHik1aI4eRw,1554
264
279
  novelwriter/assets/syntax/tomorrow_night_eighties.conf,sha256=stO_xH5RzMN0jaZeYr53LVXbpqSmIXALBFGVLlJBDLA,1557
265
- novelwriter/assets/text/credits_en.htm,sha256=jeEMRXuD-ZpGgRPtS3oZQ4HdIe6pwSnB3ZifvYiZLjU,2904
280
+ novelwriter/assets/text/credits_en.htm,sha256=wZgQGDQgIvd_2aT6oaJB88jOUjhtWYbn9tA6IfoGq3k,2958
266
281
  novelwriter/assets/text/lipsum.txt,sha256=sGA6AC_p4jrUifxLxy3cSODeRwkpBNXDPGgX6YRTm2s,62937
267
282
  novelwriter/assets/themes/cyberpunk_night.conf,sha256=FvG_YVfEnMwJV1XUDEdpi9qoHQ5sdyVEaR_Y3WfWNA8,923
268
283
  novelwriter/assets/themes/default.conf,sha256=K0LZ64lODpCtUg3pISTAP4UKvEYMvPkmIYN9RDEaWwk,72
@@ -272,29 +287,30 @@ novelwriter/assets/themes/dracula.conf,sha256=pUvu7FS1nRPj3PyU3NZMR0WSb5sIa0oLpS
272
287
  novelwriter/assets/themes/solarized_dark.conf,sha256=7dDjs8aiFuAjl--hqMJQEExrfCgAapiPY82CL6aAo-I,916
273
288
  novelwriter/assets/themes/solarized_light.conf,sha256=psCPVWcjAKB5y8H_E_h5zYUifxh5YpdFdBzxFofIHa0,918
274
289
  novelwriter/core/buildsettings.py,sha256=YAx1P-Vop4UssOjckon0IYLSgpTDVz5kYQFjjt0uIb4,24092
275
- novelwriter/core/coretools.py,sha256=H-6OUsKEfLyaHASzVxStN-WUiAgDQu8teiaioqwI7vE,21212
276
- novelwriter/core/docbuild.py,sha256=3nBvYXLB5CImrJIvllHt3rMaHOkIL4QNUhGD7j28WOg,13704
290
+ novelwriter/core/coretools.py,sha256=8X2IVr3MD-KhokSgYnjuoZoq3xgLzGL-GVNr0Tk4bp4,21150
291
+ novelwriter/core/docbuild.py,sha256=vpLHjK4QSfOvOg9sFm3Ho7fiSutCtMA8Wgm93yVE7Ck,13753
277
292
  novelwriter/core/document.py,sha256=T8FlxyEMlR3t2HNE92InseWUMylWFTMnr2fP-Ge5LQc,12130
278
- novelwriter/core/index.py,sha256=eSV3-8seQ2NRPbojP1miDQvdQuohhTlmLgBjmdV50tc,48870
279
- novelwriter/core/item.py,sha256=bkruFkLlvUgyrH92BESFWAH0XFdTdwRYqsy8HIwYwAM,17633
293
+ novelwriter/core/index.py,sha256=KOPYGv0aQJ7cmLkh-2QjdfhkHZl-X4QbzihAXcpKkbA,48585
294
+ novelwriter/core/item.py,sha256=zPI7HdDehVpKflJkzIDH-UQtbKqbRPADH2EDZdJYtK8,18794
295
+ novelwriter/core/itemmodel.py,sha256=7QcwrC1lAdIsJGWkd8NJGw68njRurky8QPiBpj3zbdo,18000
280
296
  novelwriter/core/options.py,sha256=HmN2-yOj5IkwMLzEOLM0IyCA4wNMNv3Nf53EBgtiPkE,7457
281
- novelwriter/core/project.py,sha256=tdD6GrwicCttvlM2jt0Tx8A9VpfFi5g4sTsM2h497R4,22066
297
+ novelwriter/core/project.py,sha256=xn3pFyCtgzzGhJ39PJ5zZ33qETokYfz--3OJTZ_sU90,21042
282
298
  novelwriter/core/projectdata.py,sha256=bt-LDNJsM2K4VwTcyZU_V2KOUZJFRKrNXNIwbU1v3Eo,9799
283
299
  novelwriter/core/projectxml.py,sha256=dbgm2ryPCOa1BFsFay-6vEK2itE8TWYRUiwCBpPp59g,22013
284
300
  novelwriter/core/sessions.py,sha256=V9eBXaUMcXTZjYXR5dgi6E14COIlcLIkNwS6pDrn75U,4405
285
301
  novelwriter/core/spellcheck.py,sha256=RBaqQaQtxi1e20zi7Jn3VUzHvfY3mGZh4Z7SY19csTc,7151
286
- novelwriter/core/status.py,sha256=FW20GK6_gxsYCiD7ZDg_gGIgp6yw3y1PS5mBN5HlARo,11592
302
+ novelwriter/core/status.py,sha256=5Dt6OSfKvN0knK576l-6Gb7sRuJ1Rz3EMsEu_kEFt_E,11607
287
303
  novelwriter/core/storage.py,sha256=mNM9EMW0VRMwEkmTKnzotPVdJk4tJDDUNAHNH9yG5mw,20926
288
- novelwriter/core/tree.py,sha256=mmOB7kN0tjWda_AdT1WuZyFrewuc6uRAlqCfX6opwek,18681
304
+ novelwriter/core/tree.py,sha256=xevkLomy5PwmarhIg5_Fe8frv9zJPeykp9bgfFcN-XE,18716
289
305
  novelwriter/dialogs/about.py,sha256=0iBYkifACc5vZj4KwG0G2Dll_Wp4acAHUfNTto74MFU,4755
290
- novelwriter/dialogs/docmerge.py,sha256=HtJvmu56CGb_G27XGRgF3kl0jPR_14SBVsOKv_UyVX8,6286
306
+ novelwriter/dialogs/docmerge.py,sha256=jvNVp22vG8oovPCMAG3wTeVeHbmaFVd_cPWWEaQbYzU,6095
291
307
  novelwriter/dialogs/docsplit.py,sha256=nPb7U68vtZ5yuJtUIr-2yTWCfADCtK4T1h7LgL0Hx8c,9281
292
308
  novelwriter/dialogs/editlabel.py,sha256=cs8ztrK1Gi3lEZozvs978dNAR6rnlV8cWr9dZArD51I,2963
293
- novelwriter/dialogs/preferences.py,sha256=ss5b4X0Ol96ntWVbyKTf5p9vl1iaw9rIAMlX-wqsMqM,38737
294
- novelwriter/dialogs/projectsettings.py,sha256=Hr_0bXTGJUS6VAD6jK-jAp9kJ93-CFEcQwfauScWIQE,27539
309
+ novelwriter/dialogs/preferences.py,sha256=6qaBULeyn-2gcHHZqDzCWyBUIYuuo9aQUgcfuswg018,38721
310
+ novelwriter/dialogs/projectsettings.py,sha256=dD2h366Px1xoHTViLbdh8SGYWdAGjm6d3hmTQYreBzY,27529
295
311
  novelwriter/dialogs/quotes.py,sha256=JCgoz9I8HepxYYVBXOzQac6aFpzNMF4CRdw4CnAnuNM,4727
296
312
  novelwriter/dialogs/wordlist.py,sha256=yuQebLRuasVk2QUm2zWGn7ZzuWM4lFGyXz0egQPyILw,8511
297
- novelwriter/extensions/configlayout.py,sha256=-dAAkA7B5HiuxaJWGXgBNvqNW-a4fS2buE1jc_kDQk0,10719
313
+ novelwriter/extensions/configlayout.py,sha256=pd3ayWEFGW1EDieEOtLszxaxdIjfb2HgXlme_u90x_s,10803
298
314
  novelwriter/extensions/eventfilters.py,sha256=mTU_sMQPOEocRfvLcwQyXUpkm314tH32WsID61ss1CI,2522
299
315
  novelwriter/extensions/modified.py,sha256=Skr0ke2NYH6YCuu-L98mNCg0NLlXmy5tfSruV4td-ns,6015
300
316
  novelwriter/extensions/novelselector.py,sha256=etVtoDkHGJIP4ab__vStJQCREKYt5sWLfK1vyuO3hLI,3794
@@ -305,40 +321,40 @@ novelwriter/extensions/switch.py,sha256=4kXJ3EHEhaivj1D69iBi46hkkPBGAt-Rt5EjVK3V
305
321
  novelwriter/extensions/switchbox.py,sha256=5tCiFWkT9WF9xh2c__BnNAJHFLw2nRso3fJZfwzDqRE,4198
306
322
  novelwriter/extensions/versioninfo.py,sha256=R2_U6B678be0WNxbnhUntpxR5PnZVGf6eeyENp-S-Xo,5035
307
323
  novelwriter/formats/shared.py,sha256=aXmOpXIOvpA8cTI2hV3OFMEmTEs6JYUd3aAUGcniipI,4580
308
- novelwriter/formats/todocx.py,sha256=2a22VHA59f7Lcr4onpSRgsYD5KOhECLlytFNEb_miZQ,40157
309
- novelwriter/formats/tohtml.py,sha256=m-EL0Blu1sY9Z2YGlZJdSVPP6sszemiLxhuY2sPguYU,17219
310
- novelwriter/formats/tokenizer.py,sha256=9dN-PDcyNd2roEvslB9_yRJtH2xuwtq1eXXt9hNhwEo,48219
324
+ novelwriter/formats/todocx.py,sha256=J6G4D_vQHunDmgyUbL4sfOo2tn5g42seTpdHo9ADVFU,40254
325
+ novelwriter/formats/tohtml.py,sha256=jHrkm6NSOu7u0Eomj2clumUDhLviJaKZdJOp1yNPWic,17054
326
+ novelwriter/formats/tokenizer.py,sha256=tqrZnmEGSJvMOIA-BOBq77ZQLgLO2oBLbVBUqc8VZ2o,48419
311
327
  novelwriter/formats/tomarkdown.py,sha256=Y1zSkdfFiMzdrEoYAvd5a48_XrCKLT35CiAplS2lY20,6891
312
- novelwriter/formats/toodt.py,sha256=oYy55jrWxilze-1dGQTrI9-647_q6d00Rdn1dYSPkx4,61157
313
- novelwriter/formats/toqdoc.py,sha256=O-iY9-mnwz9kNv4NU9NELya6XxqvSPkE9jMOsfUnvIE,16031
328
+ novelwriter/formats/toodt.py,sha256=Wbhj0zMng-NvP8zZIgTNfLfalby9UdXQD7wbPw57ynM,58369
329
+ novelwriter/formats/toqdoc.py,sha256=BE7FE88Rw68JZgEXWWvtJzVparD5Sj2k3T_ZB6eeHYM,17885
314
330
  novelwriter/formats/toraw.py,sha256=ySpdePg3_qAZGrDcNPYy1CYOp9EsERo1yIx5S4nfdhk,2817
315
- novelwriter/gui/doceditor.py,sha256=fx_L1EqnB2eafcXjqTkJrM_fHVdGBlLFGERe8BL0MG8,115098
331
+ novelwriter/gui/doceditor.py,sha256=SzosIwqwyivbIokM3fftwBVIGdLPXwR1_jx8kSIB0fY,116461
316
332
  novelwriter/gui/dochighlight.py,sha256=es-UCYry-ks--tfscaqzN7_xn5Xvm-wGiBJVEj3Q4D4,19655
317
- novelwriter/gui/docviewer.py,sha256=4rzmEA6piNjHUXrmApT0b102qkQt_8UlUz7RH8fjpqM,33282
318
- novelwriter/gui/docviewerpanel.py,sha256=eZ0aV1m3z8ynMpUy3LCoecdokxouqL47tGmlocfNo4g,20037
333
+ novelwriter/gui/docviewer.py,sha256=wbNsEljJDPNlL8eppPA3XdeLD8VZIGxhcf8iLy_0fVQ,34491
334
+ novelwriter/gui/docviewerpanel.py,sha256=tLs2iTpidFHSdxAQWXCzZhZqjsLdNGX9uaULdSW7leo,19701
319
335
  novelwriter/gui/editordocument.py,sha256=pCTp6fZT05BhTRwKlw60rQwsv1bVTIlV3_HiztamPeY,4698
320
- novelwriter/gui/itemdetails.py,sha256=lr_5IEEz0U7dMBgi8GqRV47IsCTNg2sCdMxls8hSuJE,9851
321
- novelwriter/gui/mainmenu.py,sha256=d-v36BSm5xQFVeteqC9ZXl1z4I5MK22XoMLTcxsZtL4,41495
322
- novelwriter/gui/noveltree.py,sha256=CXz1mCO3OFZfeJ3NmZoN6OE2fhuGGSdfEI6UfA5auLY,27131
323
- novelwriter/gui/outline.py,sha256=hhN5GNIowCTTG-OREadL4zBkP22WE0CTnIiHAUkS7P0,38432
324
- novelwriter/gui/projtree.py,sha256=32XS_JhOUC2O4YSjrb34-g4_gAY8jhUx01etuhgQ_bA,78289
325
- novelwriter/gui/search.py,sha256=HnS0_vOg15f3woXeZ8MS_ZAblx9aFIuN7BSa195tY1M,13262
336
+ novelwriter/gui/itemdetails.py,sha256=SKPRvDqrEURgNr0kr4PX24YXh9ZNSlkVOGXfuoW3nuY,9619
337
+ novelwriter/gui/mainmenu.py,sha256=VzRKgZOvxMlO7rrKii4eJQd_t8Gr7T43EtGWAN0ZIvA,41604
338
+ novelwriter/gui/noveltree.py,sha256=bUzqa26NVCapbgV3ofJex7kHsz0hajyCA336j61a8IY,27111
339
+ novelwriter/gui/outline.py,sha256=llAbX3xsdDtYZkgDrSC4cbzAv6HDMjNW14dOKvUUzF0,38469
340
+ novelwriter/gui/projtree.py,sha256=ch3thUQ-xe3PACjEixmWK_cieMiIps2D7pXhnRhpt_E,53027
341
+ novelwriter/gui/search.py,sha256=PURKBzXAQdyq5q2PnJ8t26cdHtweYHnTsCfAMEQRXgw,13108
326
342
  novelwriter/gui/sidebar.py,sha256=Yl86aZSVXDlbo6xXkolr8LlnoNKImKf8CrrlI3o7c9I,6261
327
343
  novelwriter/gui/statusbar.py,sha256=-rF6bIJXGKFRswVKWE1c5In5x3sX4iXMfp0AGxZxt0c,9053
328
- novelwriter/gui/theme.py,sha256=M4XM6-DCxPHOzLEMke19-Z79_qiE6AZb5TuKuxCdXyM,31990
344
+ novelwriter/gui/theme.py,sha256=7LtGE7IfLR_qJfbgKilzy_5rn1kC_V2nF-ga_ohYDjY,32224
329
345
  novelwriter/text/counting.py,sha256=b88S7V8xWOgkq7dfuCeciX0qpxu94k0G071VqP6VNvE,4382
330
- novelwriter/text/patterns.py,sha256=W_Hft6U4vv0dz5rsTGBf1rZZg6uvFzEsTfGBaKOvl_o,7206
346
+ novelwriter/text/patterns.py,sha256=5BQaep5KUx0KuK4AC9uZiJm5tglHZGv4KyqsJ9nPq_Y,7662
331
347
  novelwriter/tools/dictionaries.py,sha256=92GNCSEOK1EI7t2DiayT8p7nzKW7LwxJJz98F6kn3Vg,9243
332
348
  novelwriter/tools/lipsum.py,sha256=NcmoxWzrbEybh_w1FzxuxHmeTr8N03OrxjxsPWEbae4,4794
333
- novelwriter/tools/manusbuild.py,sha256=ClJw3zdAerfyFKFpKuwm0TgzHdOSSugqasV7gHQm_i0,14079
349
+ novelwriter/tools/manusbuild.py,sha256=c-sjOZzMRBbDbzmoKXVPYydw0Wbx2olf-gE9CUYVVSw,14082
334
350
  novelwriter/tools/manuscript.py,sha256=i9w23boR7H2vZNFI6hzATmhtWLfw3MMWDcsu_cNkrF4,40052
335
- novelwriter/tools/manussettings.py,sha256=sw7ipbEt5gYG8Bm7qwrdDRpT96xId_-XbduvnmS8WCA,60959
351
+ novelwriter/tools/manussettings.py,sha256=DiLF1oYSe3jurjfK1Pr-P2NvVSy7t1eifKcdiLJPVY0,60806
336
352
  novelwriter/tools/noveldetails.py,sha256=xNpTf5-hFu-K_flPhMLug6tNboKvDWV7OEetpHx6Lsc,18481
337
353
  novelwriter/tools/welcome.py,sha256=DsXNeudXe_PXsMv4R8zJ38rGQ60iqguZQ-g5lB8oJu8,27993
338
354
  novelwriter/tools/writingstats.py,sha256=456kR-EniRE5jNJSTE8ba3A1MrvavqF88Kt2k3OiFTM,22767
339
- novelWriter-2.6b1.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
340
- novelWriter-2.6b1.dist-info/METADATA,sha256=gQlm_A2KI6X8sUV5-JtBfgvP0gwEI2WctQ2XWXwcIdI,2583
341
- novelWriter-2.6b1.dist-info/WHEEL,sha256=a7TGlA-5DaHMRrarXjVbQagU3Man_dCnGIWMJr5kRWo,91
342
- novelWriter-2.6b1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
343
- novelWriter-2.6b1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
344
- novelWriter-2.6b1.dist-info/RECORD,,
355
+ novelWriter-2.6b2.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
356
+ novelWriter-2.6b2.dist-info/METADATA,sha256=VRA78A2SNN39HWX2UoF9gEAXyGZkbmtBabljWQWxQ-Y,2581
357
+ novelWriter-2.6b2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
358
+ novelWriter-2.6b2.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
359
+ novelWriter-2.6b2.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
360
+ novelWriter-2.6b2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.4.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
novelwriter/__init__.py CHANGED
@@ -3,7 +3,7 @@ novelWriter – Init File
3
3
  =======================
4
4
 
5
5
  File History:
6
- Created: 2018-09-22 [0.0.1]
6
+ Created: 2018-09-22 [0.0.1] main
7
7
 
8
8
  This file is a part of novelWriter
9
9
  Copyright 2018–2024, Veronica Berglyd Olsen
@@ -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.6b1"
51
- __hexversion__ = "0x020600b1"
52
- __date__ = "2024-11-12"
50
+ __version__ = "2.6b2"
51
+ __hexversion__ = "0x020600b2"
52
+ __date__ = "2024-12-23"
53
53
  __status__ = "Stable"
54
54
  __domain__ = "novelwriter.io"
55
55
 
@@ -60,10 +60,26 @@ logger = logging.getLogger(__name__)
60
60
  # Main Program
61
61
  ##
62
62
 
63
- # Global config and data singletons
63
+ # Globals Singletons
64
64
  CONFIG = Config()
65
65
  SHARED = SharedData()
66
66
 
67
+ # ANSI Colours
68
+ C_RED = "\033[91m"
69
+ C_GREEN = "\033[92m"
70
+ C_YELLOW = "\033[93m"
71
+ C_BLUE = "\033[94m"
72
+ C_WHITE = "\033[97m"
73
+ C_END = "\033[0m"
74
+
75
+ # Log Formats
76
+ L_TIME = "[{asctime:}]"
77
+ L_FILE = "{filename:>18}"
78
+ L_LINE = "{lineno:<4d}"
79
+ L_LVLP = "{levelname:8}"
80
+ L_LVLC = "{levelname:17}"
81
+ L_TEXT = "{message:}"
82
+
67
83
 
68
84
  def main(sysArgs: list | None = None) -> GuiMain | None:
69
85
  """Parse command line, set up logging, and launch main GUI."""
@@ -77,6 +93,7 @@ def main(sysArgs: list | None = None) -> GuiMain | None:
77
93
  "version",
78
94
  "info",
79
95
  "debug",
96
+ "color",
80
97
  "style=",
81
98
  "config=",
82
99
  "data=",
@@ -98,6 +115,7 @@ def main(sysArgs: list | None = None) -> GuiMain | None:
98
115
  " -v, --version Print program version and exit.\n"
99
116
  " --info Print additional runtime information.\n"
100
117
  " --debug Print debug output. Includes --info.\n"
118
+ " --color Add ANSI colors to log output.\n"
101
119
  " --meminfo Show memory usage information in the status bar.\n"
102
120
  " --style= Sets Qt5 style flag. Defaults to 'Fusion'.\n"
103
121
  " --config= Alternative config file.\n"
@@ -106,12 +124,12 @@ def main(sysArgs: list | None = None) -> GuiMain | None:
106
124
 
107
125
  # Defaults
108
126
  logLevel = logging.WARN
109
- logFormat = "{levelname:8} {message:}"
127
+ fmtFlags = 0b00
110
128
  confPath = None
111
129
  dataPath = None
112
130
  testMode = False
113
- qtStyle = "Fusion"
114
- cmdOpen = None
131
+ qtStyle = "Fusion"
132
+ cmdOpen = None
115
133
 
116
134
  # Parse Options
117
135
  try:
@@ -135,8 +153,10 @@ def main(sysArgs: list | None = None) -> GuiMain | None:
135
153
  logLevel = logging.INFO
136
154
  elif inOpt == "--debug":
137
155
  CONFIG.isDebug = True
156
+ fmtFlags = fmtFlags | 0b10
138
157
  logLevel = logging.DEBUG
139
- logFormat = "[{asctime:}] {filename:>18}:{lineno:<4d} {levelname:8} {message:}"
158
+ elif inOpt == "--color":
159
+ fmtFlags = fmtFlags | 0b01
140
160
  elif inOpt == "--style":
141
161
  qtStyle = inArg
142
162
  elif inOpt == "--config":
@@ -148,13 +168,32 @@ def main(sysArgs: list | None = None) -> GuiMain | None:
148
168
  elif inOpt == "--meminfo":
149
169
  CONFIG.memInfo = True
150
170
 
171
+ if fmtFlags & 0b01:
172
+ # This will overwrite the default level names, and also ensure that
173
+ # they can be converted back to integer levels
174
+ logging.addLevelName(logging.DEBUG, f"{C_BLUE}DEBUG{C_END}")
175
+ logging.addLevelName(logging.INFO, f"{C_GREEN}INFO{C_END}")
176
+ logging.addLevelName(logging.WARNING, f"{C_YELLOW}WARNING{C_END}")
177
+ logging.addLevelName(logging.ERROR, f"{C_RED}ERROR{C_END}")
178
+ logging.addLevelName(logging.CRITICAL, f"{C_RED}CRITICAL{C_END}")
179
+
180
+ # Determine Log Format
181
+ if fmtFlags == 0b00:
182
+ logFmt = f"{L_LVLP} {L_TEXT}"
183
+ elif fmtFlags == 0b01:
184
+ logFmt = f"{L_LVLC} {L_TEXT}"
185
+ elif fmtFlags == 0b10:
186
+ logFmt = f"{L_TIME} {L_FILE}:{L_LINE} {L_LVLP} {L_TEXT}"
187
+ elif fmtFlags == 0b11:
188
+ logFmt = f"{L_TIME} {C_BLUE}{L_FILE}{C_END}:{C_WHITE}{L_LINE}{C_END} {L_LVLC} {L_TEXT}"
189
+
151
190
  # Setup Logging
152
191
  pkgLogger = logging.getLogger(__package__)
153
192
  pkgLogger.setLevel(logLevel)
154
193
  if len(pkgLogger.handlers) == 0:
155
194
  # Make sure we only create one logger (mostly an issue with tests)
156
195
  cHandle = logging.StreamHandler()
157
- cHandle.setFormatter(logging.Formatter(fmt=logFormat, style="{"))
196
+ cHandle.setFormatter(logging.Formatter(fmt=logFmt, style="{"))
158
197
  pkgLogger.addHandler(cHandle)
159
198
 
160
199
  logger.info("Starting novelWriter %s (%s) %s", __version__, __hexversion__, __date__)
Binary file
Binary file
Binary file
@@ -5,9 +5,9 @@
5
5
  "Notes": "Notizen",
6
6
  "Tag": "Schlagwort",
7
7
  "Point of View": "Perspektive",
8
- "Focus": "Mittelpunkt",
8
+ "Focus": "Fokus",
9
9
  "Characters": "Charaktere",
10
- "Plot": "Handlungen",
10
+ "Plot": "Handlung",
11
11
  "Timeline": "Zeitleiste",
12
12
  "Locations": "Schauplätze",
13
13
  "Objects": "Objekte",
@@ -1,7 +1,18 @@
1
1
  {
2
2
  "Synopsis": "Сводка",
3
+ "Short Description": "Краткое описание",
3
4
  "Comment": "Комментарий",
4
5
  "Notes": "Заметки",
6
+ "Tag": "Тэг",
7
+ "Point of View": "Точка зрения",
8
+ "Focus": "Фокус",
9
+ "Characters": "Персонажей",
10
+ "Plot": "Сюжет",
11
+ "Timeline": "Хронология",
12
+ "Locations": "Локации",
13
+ "Objects": "Объекты",
14
+ "Entities": "Сущности",
15
+ "Custom": "Другое",
5
16
  "0": "Ноль",
6
17
  "1": "Один",
7
18
  "2": "Два",
@@ -64,6 +64,10 @@ font = nw_font.svg
64
64
  forward = typ_chevron-right.svg
65
65
  import = mixed_import.svg
66
66
  list = typ_th-list.svg
67
+ margin_bottom = mixed_margin-bottom.svg
68
+ margin_left = mixed_margin-left.svg
69
+ margin_right = mixed_margin-right.svg
70
+ margin_top = mixed_margin-top.svg
67
71
  maximise = typ_arrow-maximise.svg
68
72
  menu = typ_th-dot-menu.svg
69
73
  minimise = typ_arrow-minimise.svg
@@ -94,6 +98,8 @@ search_regex = nw_search-regex.svg
94
98
  search_replace = mixed_search-replace.svg
95
99
  search_word = nw_search-word.svg
96
100
  settings = typ_cog.svg
101
+ size_height = mixed_size-height.svg
102
+ size_width = mixed_size-width.svg
97
103
  star = typ_star.svg
98
104
  status_idle = typ_media-pause-grey.svg
99
105
  status_lang = typ_globe-grey.svg
@@ -102,6 +108,7 @@ status_stats = typ_chart-bar-grey.svg
102
108
  status_time = typ_stopwatch-grey.svg
103
109
  sticky-off = typ_pin-outline.svg
104
110
  sticky-on = typ_pin.svg
111
+ toolbar = nw_toolbar.svg
105
112
  unchecked = mixed_input-unchecked.svg
106
113
  unfold-hide = typ_unfold-hidden.svg
107
114
  unfold-show = typ_unfold-visible.svg
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#e6e6e6" fill-opacity=".14902" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="2" y="18" width="20" height="4" rx="1" ry="1" fill="#848484" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m18.414 8.5959c0.78104 0.79361 0.78104 2.0837 0 2.8773l-6.4141 6.5268-6.4141-6.5268c-0.391-0.3968-0.58601-0.91769-0.58601-1.4386 0-0.52092 0.195-1.0418 0.58601-1.4386 0.78104-0.79464 2.047-0.79464 2.8281 0l3.5861 3.6475 3.5861-3.6475c0.78104-0.79464 2.047-0.79464 2.8281 0z" fill="#69c" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#e6e6e6" fill-opacity=".14902" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="2" y="2" width="4" height="20" rx="1" ry="1" fill="#848484" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m15.404 18.5c-0.79361 0.78104-2.0837 0.78104-2.8773 0l-6.5268-6.4141 6.5268-6.4141c0.3968-0.391 0.91769-0.58601 1.4386-0.58601 0.52092 0 1.0418 0.195 1.4386 0.58601 0.79464 0.78104 0.79464 2.047 0 2.8281l-3.6475 3.5861 3.6475 3.5861c0.79464 0.78104 0.79464 2.047 0 2.8281z" fill="#69c" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#e6e6e6" fill-opacity=".14902" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="18" y="2" width="4" height="20" rx="1" ry="1" fill="#848484" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m8.5959 18.5c0.79361 0.78104 2.0837 0.78104 2.8773 0l6.5268-6.4141-6.5268-6.4141c-0.3968-0.391-0.91769-0.58601-1.4386-0.58601-0.52092 0-1.0418 0.195-1.4386 0.58601-0.79464 0.78104-0.79464 2.047 0 2.8281l3.6475 3.5861-3.6475 3.5861c-0.79464 0.78104-0.79464 2.047 0 2.8281z" fill="#69c" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#e6e6e6" fill-opacity=".14902" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="2" y="2" width="20" height="4" rx="1" ry="1" fill="#848484" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m18.414 15.404c0.78104-0.79361 0.78104-2.0837 0-2.8773l-6.4141-6.5268-6.4141 6.5268c-0.391 0.3968-0.58601 0.91769-0.58601 1.4386 0 0.52092 0.195 1.0418 0.58601 1.4386 0.78104 0.79464 2.047 0.79464 2.8281 0l3.5861-3.6475 3.5861 3.6475c0.78104 0.79464 2.047 0.79464 2.8281 0z" fill="#69c" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#e6e6e6" fill-opacity=".14902" stroke-linecap="round" stroke-width="2"/>
4
+ <path d="m18.414 10.404c0.78104-0.79361 0.78104-2.0837 0-2.8773l-6.4141-6.5268-6.4141 6.5268c-0.391 0.3968-0.58601 0.91769-0.58601 1.4386 0 0.52092 0.195 1.0418 0.58601 1.4386 0.78104 0.79464 2.047 0.79464 2.8281 0l3.5861-3.6475 3.5861 3.6475c0.78104 0.79464 2.047 0.79464 2.8281 0z" fill="#69c" stroke-width="1.0087"/>
5
+ <path d="m18.414 13.596c0.78104 0.79361 0.78104 2.0837 0 2.8773l-6.4141 6.5268-6.4141-6.5268c-0.391-0.3968-0.58601-0.91769-0.58601-1.4386 0-0.52092 0.195-1.0418 0.58601-1.4386 0.78104-0.79464 2.047-0.79464 2.8281 0l3.5861 3.6475 3.5861-3.6475c0.78104-0.79464 2.047-0.79464 2.8281 0z" fill="#69c" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#e6e6e6" fill-opacity=".15" stroke-linecap="round" stroke-width="2"/>
4
+ <path d="m13.596 18.414c0.79361 0.78104 2.0837 0.78104 2.8773 0l6.5268-6.4141-6.5268-6.4141c-0.3968-0.391-0.91769-0.58601-1.4386-0.58601-0.52092 0-1.0418 0.195-1.4386 0.58601-0.79464 0.78104-0.79464 2.047 0 2.8281l3.6475 3.5861-3.6475 3.5861c-0.79464 0.78104-0.79464 2.047 0 2.8281z" fill="#69c" stroke-width="1.0087"/>
5
+ <path d="m10.404 18.414c-0.79361 0.78104-2.0837 0.78104-2.8773 0l-6.5268-6.4141 6.5268-6.4141c0.3968-0.391 0.91769-0.58601 1.4386-0.58601 0.52092 0 1.0418 0.195 1.4386 0.58601 0.79464 0.78104 0.79464 2.047 0 2.8281l-3.6475 3.5861 3.6475 3.5861c0.79464 0.78104 0.79464 2.047 0 2.8281z" fill="#69c" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="8" y="2" width="8" height="8" rx="1" ry="1" fill="none" stroke="#69c" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="8" y="14" width="8" height="8" rx="1" ry="1" fill="none" stroke="#69c" stroke-linecap="round" stroke-width="2"/>
5
+ </svg>
@@ -64,6 +64,10 @@ font = nw_font.svg
64
64
  forward = typ_chevron-right.svg
65
65
  import = mixed_import.svg
66
66
  list = typ_th-list.svg
67
+ margin_bottom = mixed_margin-bottom.svg
68
+ margin_left = mixed_margin-left.svg
69
+ margin_right = mixed_margin-right.svg
70
+ margin_top = mixed_margin-top.svg
67
71
  maximise = typ_arrow-maximise.svg
68
72
  menu = typ_th-dot-menu.svg
69
73
  minimise = typ_arrow-minimise.svg
@@ -94,6 +98,8 @@ search_regex = nw_search-regex.svg
94
98
  search_replace = mixed_search-replace.svg
95
99
  search_word = nw_search-word.svg
96
100
  settings = typ_cog.svg
101
+ size_height = mixed_size-height.svg
102
+ size_width = mixed_size-width.svg
97
103
  star = typ_star.svg
98
104
  status_idle = typ_media-pause-grey.svg
99
105
  status_lang = typ_globe-grey.svg
@@ -102,6 +108,7 @@ status_stats = typ_chart-bar-grey.svg
102
108
  status_time = typ_stopwatch-grey.svg
103
109
  sticky-off = typ_pin-outline.svg
104
110
  sticky-on = typ_pin.svg
111
+ toolbar = nw_toolbar.svg
105
112
  unchecked = mixed_input-unchecked.svg
106
113
  unfold-hide = typ_unfold-hidden.svg
107
114
  unfold-show = typ_unfold-visible.svg
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#333" fill-opacity=".15" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="2" y="18" width="20" height="4" rx="1" ry="1" fill="#333" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m18.414 8.5959c0.78104 0.79361 0.78104 2.0837 0 2.8773l-6.4141 6.5268-6.4141-6.5268c-0.391-0.3968-0.58601-0.91769-0.58601-1.4386 0-0.52092 0.195-1.0418 0.58601-1.4386 0.78104-0.79464 2.047-0.79464 2.8281 0l3.5861 3.6475 3.5861-3.6475c0.78104-0.79464 2.047-0.79464 2.8281 0z" fill="#4271ae" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#333" fill-opacity=".15" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="2" y="2" width="4" height="20" rx="1" ry="1" fill="#333" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m15.404 18.5c-0.79361 0.78104-2.0837 0.78104-2.8773 0l-6.5268-6.4141 6.5268-6.4141c0.3968-0.391 0.91769-0.58601 1.4386-0.58601 0.52092 0 1.0418 0.195 1.4386 0.58601 0.79464 0.78104 0.79464 2.047 0 2.8281l-3.6475 3.5861 3.6475 3.5861c0.79464 0.78104 0.79464 2.047 0 2.8281z" fill="#4271ae" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#333" fill-opacity=".15" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="18" y="2" width="4" height="20" rx="1" ry="1" fill="#333" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m8.5959 18.5c0.79361 0.78104 2.0837 0.78104 2.8773 0l6.5268-6.4141-6.5268-6.4141c-0.3968-0.391-0.91769-0.58601-1.4386-0.58601-0.52092 0-1.0418 0.195-1.4386 0.58601-0.79464 0.78104-0.79464 2.047 0 2.8281l3.6475 3.5861-3.6475 3.5861c-0.79464 0.78104-0.79464 2.047 0 2.8281z" fill="#4271ae" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#333" fill-opacity=".15" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="2" y="2" width="20" height="4" rx="1" ry="1" fill="#333" stroke-linecap="round" stroke-width="2"/>
5
+ <path d="m18.414 15.404c0.78104-0.79361 0.78104-2.0837 0-2.8773l-6.4141-6.5268-6.4141 6.5268c-0.391 0.3968-0.58601 0.91769-0.58601 1.4386 0 0.52092 0.195 1.0418 0.58601 1.4386 0.78104 0.79464 2.047 0.79464 2.8281 0l3.5861-3.6475 3.5861 3.6475c0.78104 0.79464 2.047 0.79464 2.8281 0z" fill="#4271ae" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#333" fill-opacity=".15" stroke-linecap="round" stroke-width="2"/>
4
+ <path d="m18.414 10.404c0.78104-0.79361 0.78104-2.0837 0-2.8773l-6.4141-6.5268-6.4141 6.5268c-0.391 0.3968-0.58601 0.91769-0.58601 1.4386 0 0.52092 0.195 1.0418 0.58601 1.4386 0.78104 0.79464 2.047 0.79464 2.8281 0l3.5861-3.6475 3.5861 3.6475c0.78104 0.79464 2.047 0.79464 2.8281 0z" fill="#4271ae" stroke-width="1.0087"/>
5
+ <path d="m18.414 13.596c0.78104 0.79361 0.78104 2.0837 0 2.8773l-6.4141 6.5268-6.4141-6.5268c-0.391-0.3968-0.58601-0.91769-0.58601-1.4386 0-0.52092 0.195-1.0418 0.58601-1.4386 0.78104-0.79464 2.047-0.79464 2.8281 0l3.5861 3.6475 3.5861-3.6475c0.78104-0.79464 2.047-0.79464 2.8281 0z" fill="#4271ae" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="2" y="2" width="20" height="20" rx="1" ry="1" fill="#333" fill-opacity=".15" stroke-linecap="round" stroke-width="2"/>
4
+ <path d="m13.596 18.414c0.79361 0.78104 2.0837 0.78104 2.8773 0l6.5268-6.4141-6.5268-6.4141c-0.3968-0.391-0.91769-0.58601-1.4386-0.58601-0.52092 0-1.0418 0.195-1.4386 0.58601-0.79464 0.78104-0.79464 2.047 0 2.8281l3.6475 3.5861-3.6475 3.5861c-0.79464 0.78104-0.79464 2.047 0 2.8281z" fill="#4271ae" stroke-width="1.0087"/>
5
+ <path d="m10.404 18.414c-0.79361 0.78104-2.0837 0.78104-2.8773 0l-6.5268-6.4141 6.5268-6.4141c0.3968-0.391 0.91769-0.58601 1.4386-0.58601 0.52092 0 1.0418 0.195 1.4386 0.58601 0.79464 0.78104 0.79464 2.047 0 2.8281l-3.6475 3.5861 3.6475 3.5861c0.79464 0.78104 0.79464 2.047 0 2.8281z" fill="#4271ae" stroke-width="1.0087"/>
6
+ </svg>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24" height="24" version="1.2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
3
+ <rect x="8" y="2" width="8" height="8" rx="1" ry="1" fill="none" stroke="#4271ae" stroke-linecap="round" stroke-width="2"/>
4
+ <rect x="8" y="14" width="8" height="8" rx="1" ry="1" fill="none" stroke="#4271ae" stroke-linecap="round" stroke-width="2"/>
5
+ </svg>
Binary file
Binary file