novelWriter 2.4b1__py3-none-any.whl → 2.4rc1__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 (72) hide show
  1. {novelWriter-2.4b1.dist-info → novelWriter-2.4rc1.dist-info}/METADATA +5 -6
  2. {novelWriter-2.4b1.dist-info → novelWriter-2.4rc1.dist-info}/RECORD +62 -66
  3. novelwriter/__init__.py +5 -5
  4. novelwriter/assets/icons/none.svg +4 -0
  5. novelwriter/assets/icons/typicons_dark/icons.conf +2 -2
  6. novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +4 -0
  7. novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +4 -0
  8. novelwriter/assets/icons/typicons_light/icons.conf +2 -2
  9. novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +4 -0
  10. novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +4 -0
  11. novelwriter/assets/manual.pdf +0 -0
  12. novelwriter/assets/sample.zip +0 -0
  13. novelwriter/common.py +6 -1
  14. novelwriter/config.py +8 -4
  15. novelwriter/core/coretools.py +21 -22
  16. novelwriter/core/status.py +3 -2
  17. novelwriter/core/toodt.py +332 -355
  18. novelwriter/dialogs/about.py +9 -11
  19. novelwriter/dialogs/docmerge.py +17 -14
  20. novelwriter/dialogs/docsplit.py +14 -12
  21. novelwriter/dialogs/editlabel.py +5 -4
  22. novelwriter/dialogs/preferences.py +28 -33
  23. novelwriter/dialogs/projectsettings.py +29 -26
  24. novelwriter/dialogs/quotes.py +10 -9
  25. novelwriter/dialogs/wordlist.py +15 -12
  26. novelwriter/error.py +13 -11
  27. novelwriter/extensions/circularprogress.py +12 -8
  28. novelwriter/extensions/configlayout.py +1 -3
  29. novelwriter/extensions/modified.py +33 -2
  30. novelwriter/extensions/pagedsidebar.py +16 -14
  31. novelwriter/extensions/simpleprogress.py +3 -1
  32. novelwriter/extensions/statusled.py +3 -1
  33. novelwriter/extensions/switch.py +10 -9
  34. novelwriter/extensions/switchbox.py +14 -13
  35. novelwriter/gui/doceditor.py +182 -225
  36. novelwriter/gui/dochighlight.py +4 -4
  37. novelwriter/gui/docviewer.py +53 -57
  38. novelwriter/gui/docviewerpanel.py +16 -13
  39. novelwriter/gui/editordocument.py +4 -4
  40. novelwriter/gui/itemdetails.py +45 -48
  41. novelwriter/gui/noveltree.py +22 -20
  42. novelwriter/gui/outline.py +87 -88
  43. novelwriter/gui/projtree.py +31 -29
  44. novelwriter/gui/search.py +75 -29
  45. novelwriter/gui/sidebar.py +24 -28
  46. novelwriter/gui/statusbar.py +14 -14
  47. novelwriter/gui/theme.py +47 -35
  48. novelwriter/guimain.py +35 -31
  49. novelwriter/shared.py +5 -5
  50. novelwriter/tools/dictionaries.py +13 -12
  51. novelwriter/tools/lipsum.py +20 -17
  52. novelwriter/tools/manusbuild.py +35 -27
  53. novelwriter/tools/manuscript.py +68 -73
  54. novelwriter/tools/manussettings.py +68 -73
  55. novelwriter/tools/noveldetails.py +20 -18
  56. novelwriter/tools/welcome.py +47 -43
  57. novelwriter/tools/writingstats.py +61 -55
  58. novelwriter/types.py +90 -0
  59. novelwriter/assets/icons/typicons_dark/typ_arrow-down.svg +0 -4
  60. novelwriter/assets/icons/typicons_dark/typ_arrow-right.svg +0 -4
  61. novelwriter/assets/icons/typicons_light/typ_arrow-down.svg +0 -4
  62. novelwriter/assets/icons/typicons_light/typ_arrow-right.svg +0 -4
  63. novelwriter/core/__init__.py +0 -3
  64. novelwriter/dialogs/__init__.py +0 -3
  65. novelwriter/extensions/__init__.py +0 -3
  66. novelwriter/gui/__init__.py +0 -3
  67. novelwriter/text/__init__.py +0 -3
  68. novelwriter/tools/__init__.py +0 -3
  69. {novelWriter-2.4b1.dist-info → novelWriter-2.4rc1.dist-info}/LICENSE.md +0 -0
  70. {novelWriter-2.4b1.dist-info → novelWriter-2.4rc1.dist-info}/WHEEL +0 -0
  71. {novelWriter-2.4b1.dist-info → novelWriter-2.4rc1.dist-info}/entry_points.txt +0 -0
  72. {novelWriter-2.4b1.dist-info → novelWriter-2.4rc1.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: novelWriter
3
- Version: 2.4b1
3
+ Version: 2.4rc1
4
4
  Summary: A markdown-like text editor for planning and writing novels
5
- Home-page: https://novelwriter.io
6
- Author: Veronica Berglyd Olsen
7
- Author-email: code@vkbo.net
5
+ Author-email: Veronica Berglyd Olsen <code@vkbo.net>
8
6
  License: GNU General Public License v3
9
- Project-URL: Bug Tracker, https://github.com/vkbo/novelWriter/issues
7
+ Project-URL: Homepage, https://novelwriter.io
10
8
  Project-URL: Documentation, https://docs.novelwriter.io
11
- Project-URL: Source Code, https://github.com/vkbo/novelWriter
9
+ Project-URL: Repository, https://github.com/vkbo/novelWriter
10
+ Project-URL: Issues, https://github.com/vkbo/novelWriter/issues
12
11
  Classifier: Programming Language :: Python :: 3 :: Only
13
12
  Classifier: Programming Language :: Python :: 3.8
14
13
  Classifier: Programming Language :: Python :: 3.9
@@ -1,13 +1,14 @@
1
- novelwriter/__init__.py,sha256=NHPln8CwazK8WOh7hOQjQvxvbIxG2xOQKymp1eK_5ZQ,7594
2
- novelwriter/common.py,sha256=4Dm9wp6ZEi4OI7zXXM83yoeBd-EJ3wJKgOHS56I5gBQ,17157
3
- novelwriter/config.py,sha256=yx0kChXoAiwmnbYW9KCx2lIPUogiJYkr8-nJTQ-ctD0,35635
1
+ novelwriter/__init__.py,sha256=gPJGUpR72TL3DUdELpLxpobESk-1BSaPJAkBc3NhSAY,7593
2
+ novelwriter/common.py,sha256=mLy2OhEF2Ad9I-NQcPkNsJ6yqN6AOtB0ThhIdEnIY5I,17376
3
+ novelwriter/config.py,sha256=HCZF0wE2iI4oOB-Trd9lB4VefgzHhvh0rUbOyUJukLU,35740
4
4
  novelwriter/constants.py,sha256=UIxiF-23cB_gmRfxbQPYmObn8Ib-ygm46uOIG329RLY,19818
5
5
  novelwriter/enum.py,sha256=MP-nz3vDRp4bWxXitqjdLWO2_RvrDAlRxngiMON9mb8,3305
6
- novelwriter/error.py,sha256=jKIAB6pxWnin4CSaX0DCRUMeZRtwnieIuV5fsW6MW50,7136
7
- novelwriter/guimain.py,sha256=9DWr_y6lrck1BK6hCW4hct1C3ypZJU4sxfXobYjGLb4,53059
8
- novelwriter/shared.py,sha256=VVfqS4xOV4PiP4P8UIHvoEb572M2XxaeYnL3a_d8Xbc,14280
9
- novelwriter/assets/manual.pdf,sha256=moN_pQwrBrEzZTEDSbJlWxqAgxYP-p1oCvUm4mYO3R8,2605110
10
- novelwriter/assets/sample.zip,sha256=Bg8odwm4nQtfzKUiGPBysvjkuhFNatzGza9CvTsD08I,27360
6
+ novelwriter/error.py,sha256=6NLRdTtqylbKJyrGes9yHOwpa24N7A2VFgnaJ6o0YnM,7263
7
+ novelwriter/guimain.py,sha256=aBPAeGNqCeFhXRXgm96sm_8M_JK_v3ghUI1BM5wj0Do,53461
8
+ novelwriter/shared.py,sha256=OS83rH3zFar0sEPTXAdq13LKNGDKNOaYhf1VZ513wGg,14278
9
+ novelwriter/types.py,sha256=6aP2hZraPEolYqBgj5R_5bah3NgelASBfKol6yYOi4g,3316
10
+ novelwriter/assets/manual.pdf,sha256=zhm9pfvpEc9rDPQzE7KW1kU9n6IMlxLK1Pc9m1Ul_18,2605816
11
+ novelwriter/assets/sample.zip,sha256=TTC6YpYhFs8wdJ9FNd8IFrZAc_o4It7UjT5luciEA6k,27361
11
12
  novelwriter/assets/i18n/nw_de_DE.qm,sha256=oUV9VMrFuS14SLfe49xe53_o4KfnBUqdwSF5m6AXQb8,95974
12
13
  novelwriter/assets/i18n/nw_en_US.qm,sha256=rCB443fatkLrRxsd3hVSn6VoX19SpNqR0zv4O1_wm1c,88824
13
14
  novelwriter/assets/i18n/nw_es_419.qm,sha256=-4pEroJn4WDR3LeTO4XEvMKOxNrR4-ve-qKgq8FPWn8,98227
@@ -31,12 +32,13 @@ novelwriter/assets/i18n/project_nn_NO.json,sha256=7ZfmtFWHcDMiLVqdOEDHQWHbpoC_bv
31
32
  novelwriter/assets/i18n/project_pt_BR.json,sha256=oZ7jdSF1h-kuGhKYZOWbuwVCRgakgs9HzeMSiLPnTns,2763
32
33
  novelwriter/assets/i18n/project_ru_RU.json,sha256=F4QkD6VVDCtGdil7uoXCmuczvUpe9tv-1L-3Eyc8sKE,3699
33
34
  novelwriter/assets/i18n/project_zh_CN.json,sha256=cfl0TsnbISYUvygOw015y0x0REDG97xR0yjyJ85Jm34,2322
35
+ novelwriter/assets/icons/none.svg,sha256=NRN9vMzohg7Ner71GwPthrCG0uA81TpY8UmKb8-L-pM,251
34
36
  novelwriter/assets/icons/novelwriter.ico,sha256=OJRIeeUcmS7Di51NA3uF5_Ov4V8T47gQ9qWv6C7qDeA,171059
35
37
  novelwriter/assets/icons/novelwriter.svg,sha256=Ad_SgOdXSDJtFR3DLCx6Afme15I78r38_YxCfO9F2z4,8511
36
38
  novelwriter/assets/icons/x-novelwriter-project.ico,sha256=MXdZSYi3j95aIsT5bZo6CkhxmS75cThP9O_38UR7sjg,170697
37
39
  novelwriter/assets/icons/x-novelwriter-project.svg,sha256=VHf1aClkA91tZVYb3LFk9bi_Dw25QBVSjUJAjSD-YX4,5143
38
40
  novelwriter/assets/icons/typicons_dark/README.md,sha256=6ZxJq-19PNrMdeuVeVg84aLjxhr9oF7dLwuMFVGQyq0,1065
39
- novelwriter/assets/icons/typicons_dark/icons.conf,sha256=CMl1UP6q7CDyGDBsIDQnh2LLOhwXhpJGcfi39isJiPs,4425
41
+ novelwriter/assets/icons/typicons_dark/icons.conf,sha256=b-OYPcmJe1CBXRa62AFm75XIWev4cfeFarJF5mGgpiY,4431
40
42
  novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg,sha256=POP_Cs3bkkKAmrS_fTgjj90eyNK0bipNGgOhDDlXKu0,1650
41
43
  novelwriter/assets/icons/typicons_dark/mixed_document-new.svg,sha256=EIVU3_ecC0d6rpCHXBfKoA_mWJyilqe7iA6XLQb9oRw,1849
42
44
  novelwriter/assets/icons/typicons_dark/mixed_document-note.svg,sha256=OaPRbvkA7h4GA4mnFXJRORv80h2nAsJTmlIR8Msrwt8,1650
@@ -75,12 +77,10 @@ novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg,sha256=dOhhKxlsdWuQ7t
75
77
  novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg,sha256=0TpY0nIinD4dwgwh0Nyfs0C4rJDcc2JsgxnXSE0flco,1549
76
78
  novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg,sha256=Z0ooKzRV_g298UX22uuUxZPC21Z9DN-1y4sY3vVIaZE,1121
77
79
  novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg,sha256=PsEm_GCebnkMvtVm1OUbVU0hvA2nL8bWlrlyrAWh0tE,519
78
- novelwriter/assets/icons/typicons_dark/typ_arrow-down.svg,sha256=NlOj7VaHnlfBwU8M63eVzdepIbvtVbuPCgQ1Rwdu67Q,511
79
80
  novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg,sha256=Io2wWbs2Z0z5GHzDkmf3AkNZZqyfSC0ilWVDvGv5Q5U,538
80
81
  novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg,sha256=m4w3ZUHy3R2aTtvLKZpmd6FPijjkaG6A5jhiqfTp9mg,1029
81
82
  novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg,sha256=4XVXvgIN00s6UfHmL3jXSTu5cRjeTKH_WtbS1ZRcCuM,1135
82
83
  novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg,sha256=RNhpFR1pmej9rKW-kvxHZa8zFFK3nVfdyP5NksUDDqM,1217
83
- novelwriter/assets/icons/typicons_dark/typ_arrow-right.svg,sha256=rUATnt0QnEMegajflkfRWlT3Tcqu0Y7FVpdmZU6Seb0,510
84
84
  novelwriter/assets/icons/typicons_dark/typ_book-grey.svg,sha256=Nl-pghkCn8BG28Cga1vyVtLMDNgMDjL15Tc4s4DVz7k,807
85
85
  novelwriter/assets/icons/typicons_dark/typ_book.svg,sha256=MaUaVtd_hXt6yGGj2C1UUZGqhkEUzDWL5wmByT4UE7U,1490
86
86
  novelwriter/assets/icons/typicons_dark/typ_bookmark.svg,sha256=I2KqO-t22-kA4ELUYnkKLge3HHcQSH3Lw02PsWRsiq0,909
@@ -131,10 +131,12 @@ novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg,sha256=zx4iK9nlfDFaY
131
131
  novelwriter/assets/icons/typicons_dark/typ_th-list.svg,sha256=0qsmBzD9ySWA9G3cuB_BAetuzx4qxaNvQ6TcL8c0d4A,846
132
132
  novelwriter/assets/icons/typicons_dark/typ_times.svg,sha256=kcd-4tz9DmCMikIaSohdt4EzutDYUsTVBr8w2vqn1SE,703
133
133
  novelwriter/assets/icons/typicons_dark/typ_trash.svg,sha256=XjO0SRcnPDrg9Qe8zR5W1k20liKKRop4O2liv2KILQY,2456
134
+ novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg,sha256=V_yKCUxFOmm7LpadefaSgmi1MTKIzD5GgIS8inPtUJo,516
135
+ novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg,sha256=IvVXmxlkrTyNwl0NG_HCpaqv29_9EopjQvpH56ZInZk,517
134
136
  novelwriter/assets/icons/typicons_dark/typ_user.svg,sha256=00gZEDr59B1A7A4o0w5VjCJOHnQHANsgXBhnB_VTMU4,733
135
137
  novelwriter/assets/icons/typicons_dark/typ_warning-full.svg,sha256=zqqV82C37dWH_yHoSuPo-BLsErg0sl8_VlB6fzXL4VE,970
136
138
  novelwriter/assets/icons/typicons_light/README.md,sha256=nyGvWLJ8cusLYP8YsjX_l213NkDE_GHrwctZ-I_JQUg,1066
137
- novelwriter/assets/icons/typicons_light/icons.conf,sha256=CJMM9T4s_x02Drirlf49b3UCTvKA_W30uEm4JWo6r2w,4428
139
+ novelwriter/assets/icons/typicons_light/icons.conf,sha256=rG7V9Vc0Jx0T7YUD2PpGA_Dg-i6zPPBK-mH-PmUnFCA,4434
138
140
  novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg,sha256=kXNwPbeKR3eupIrqtDQrNGq5sL8vdExLfPMrMX2sEsw,1650
139
141
  novelwriter/assets/icons/typicons_light/mixed_document-new.svg,sha256=u0YYfp6hTUEYLsrPleUqYocaG2hl62w-B85INvkm6S4,1825
140
142
  novelwriter/assets/icons/typicons_light/mixed_document-note.svg,sha256=XpKQ2Fj7J3I3BT9mAQkjk_A4eP7uy94vPeDBA62fOYI,1650
@@ -173,12 +175,10 @@ novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg,sha256=j8qncFQqiC5vZ
173
175
  novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg,sha256=-B-iVCPsoCaz9ZiVkHN6em2BJOI65_ssjFqZM75wxZ0,1550
174
176
  novelwriter/assets/icons/typicons_light/nw_tb-underline.svg,sha256=rxSFWY2lNpSuF2jbUk_jyfoHk_B5d2bLncaCY-2LT7w,1141
175
177
  novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg,sha256=FZFt51KLkvqrP0nM_bnCjKkELcLT7KMWB059gvSMKk4,523
176
- novelwriter/assets/icons/typicons_light/typ_arrow-down.svg,sha256=o4yUzSExKLMwb1bL5gBCtUhruzFLQQY0bTwwFcYgllI,518
177
178
  novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg,sha256=vDYZrsNe2Afo8-MqS9HV_gsz6aFraYZUyJeAdOXaE4Y,541
178
179
  novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg,sha256=bz93DwuiB_2Baf-oG5SsMdWGccYogyNqR2Yq3OQ4bDY,1032
179
180
  novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg,sha256=PcnZfvRheewpelAsfj_OF09a0JmB0PPuU_3Yn4buztc,1138
180
181
  novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg,sha256=HV86TeWDyw24qRllBsIpxn1bT2Oj74hrHJuSKfyLx_0,1224
181
- novelwriter/assets/icons/typicons_light/typ_arrow-right.svg,sha256=Z7FD8rKc96Q34oW7by4TjLZMizlD78V8NVTYgvRauW0,517
182
182
  novelwriter/assets/icons/typicons_light/typ_book-grey.svg,sha256=T4pOeWLJxx-Z-gNPTCiIZzryHQ7efwbRcdMcL8pil-g,814
183
183
  novelwriter/assets/icons/typicons_light/typ_book.svg,sha256=vRlJHH06q1982IZHCx56ouOezyVw31SJ2uogs2xUj2k,1490
184
184
  novelwriter/assets/icons/typicons_light/typ_bookmark.svg,sha256=q3I2j4AsNN12OGwr2zvtFXPVmnLAMoPuKw69wW4SnrM,912
@@ -229,6 +229,8 @@ novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg,sha256=XKAdaWypd1hg
229
229
  novelwriter/assets/icons/typicons_light/typ_th-list.svg,sha256=fq8gazMyrkUC8qzpmSFz8QufTEDd5X6qNBb09to-j5g,849
230
230
  novelwriter/assets/icons/typicons_light/typ_times.svg,sha256=Z48b7czxZUTrmDZxX2NWMGIFyvqsYe7GTvSPV4T4oPs,703
231
231
  novelwriter/assets/icons/typicons_light/typ_trash.svg,sha256=THerHUXB4l6qjcnIdFCzA7eZxOVhcODDQMtYeDj-z5s,2453
232
+ novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg,sha256=hPxAI0WjRnalqYlHn1NNKpA9JbE5t7sR1DbIOj6MnkM,523
233
+ novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg,sha256=eD-_42AnjRRhQ1EIRAFEkJKguVVzDBltbJQR4Wnq8Zk,523
232
234
  novelwriter/assets/icons/typicons_light/typ_user.svg,sha256=q4a-kdXIABSyYlk2BEGPuxnyaM4vTpvLwQNv5-rQ6mQ,736
233
235
  novelwriter/assets/icons/typicons_light/typ_warning-full.svg,sha256=5pCnfBPckrRDznMAOGj2-zmMxUSQi4nK4i07jAVkc_c,970
234
236
  novelwriter/assets/images/novelwriter-text-dark.svg,sha256=gbbDiXd92OV5c6qGREDkAnTnEApxYPbqyrbUHB8mtiM,5976
@@ -258,9 +260,8 @@ novelwriter/assets/themes/default_dark.conf,sha256=L6xHLbgVb4E4SkQRSgCV7yEoxH9Rx
258
260
  novelwriter/assets/themes/default_light.conf,sha256=o_FJRMidFo-DJYK8bB-jdelcD5qg7MwW4J8lL9nlZUY,928
259
261
  novelwriter/assets/themes/solarized_dark.conf,sha256=HIP9icMtRljUmMH7PmU0IrcLGUSXVDaG97070Hc0UVM,852
260
262
  novelwriter/assets/themes/solarized_light.conf,sha256=jUfaCnWXM4GAOI1eUioj_nP0RiMrnr8MEOprSg7qUU4,854
261
- novelwriter/core/__init__.py,sha256=IrBU9r8-lBnwqAD79xtpaDMortj23X-t6zQ1RIWluY4,39
262
263
  novelwriter/core/buildsettings.py,sha256=mNJ8v5Rn-lXiqtlFYQ8bzAtQ7JsibktPFiiiTXidHpQ,22385
263
- novelwriter/core/coretools.py,sha256=R1Mhg9cGJnhXFYd3kauSY95gCuRMJ9OGcMOQOdasBeo,21519
264
+ novelwriter/core/coretools.py,sha256=mNrFL7R3dAAQhe3aGT9QTha4rX4XXF5JOlmXykNCJh0,21467
264
265
  novelwriter/core/docbuild.py,sha256=vn47y9aYf7lsu-A5vmlmSjlWxI82X6at5rB-fEH0pl0,13844
265
266
  novelwriter/core/document.py,sha256=ERU3GCZ1CHkIE3bV-NQ5G8HZlH5C4bWqa-OxyPgFu4w,12154
266
267
  novelwriter/core/index.py,sha256=e-Iov2NyeeLWiWsx_UCD758UIw_6KGe1FZ-jegkRgmU,45951
@@ -271,63 +272,58 @@ novelwriter/core/projectdata.py,sha256=NYhTL6qIbJxJX98-_zZdV4LzI2-tqdWaMvGYi0Xi4
271
272
  novelwriter/core/projectxml.py,sha256=o4sn_Hzn3A-DMlHevjieWoTMaJKJW60HYOWbVfaambs,21936
272
273
  novelwriter/core/sessions.py,sha256=k13qaHO0oAyKBlMrhDogO0dFoAROBA8WNgUULGtIhIA,4431
273
274
  novelwriter/core/spellcheck.py,sha256=AfNOymVlJULF6tSz9ldAj5gyY_k1fHyKzsTivXxQJXg,7235
274
- novelwriter/core/status.py,sha256=CTqsGhTo-TVvX9n1_fbz0nyRFCFUrwioHJ23tu4lJoI,8717
275
+ novelwriter/core/status.py,sha256=TNeEapa-MLJexXPosoHs0UmHgZrK63vQEOegYOD8uuE,8769
275
276
  novelwriter/core/storage.py,sha256=eJgGL0cvfeQHhGYjc6FiojJ-dnGU-IQJ6FOWa8hFzJQ,20880
276
277
  novelwriter/core/tohtml.py,sha256=zybIc2qMAQhmWBNVVtcHRijmvqDK_DHidgAYwKUGQP0,17236
277
278
  novelwriter/core/tokenizer.py,sha256=XHjsZVlBt-S5jNyN-i7FrkYenwxFT3-NBNjB-qmazIA,40974
278
279
  novelwriter/core/tomd.py,sha256=xk5r3oyHkz6LOouiPaQLGVJWp6bT0HLe3upr4JmWjG4,7386
279
- novelwriter/core/toodt.py,sha256=olx9ogsSrFh1LOndVpI_DK_5E0Bgzd9VFrC2RzNL--k,58700
280
+ novelwriter/core/toodt.py,sha256=_kTNpeLVIeJYpIwH6ludMF1cNlIGv8fZN0sLAAJP_DM,58628
280
281
  novelwriter/core/tree.py,sha256=bwLJHhNkd2DOKoE-rIwfWwWgaYBlw9xZ8BaQeC0LUJw,18701
281
- novelwriter/dialogs/__init__.py,sha256=8a0BuN7-dtzkgPhkwX2KNq8gG2rqpyCAwI-U06KhU5Y,42
282
- novelwriter/dialogs/about.py,sha256=9ApVMNAo0x9OXBAb_N6kV7NUERIU-niXjBrd9XIQPbk,4980
283
- novelwriter/dialogs/docmerge.py,sha256=MbXjyr_ho_NiJPZEnlZjwWiH_8McxOOAFlGJs0DbmDQ,5960
284
- novelwriter/dialogs/docsplit.py,sha256=wGnIpvzx0GzePsLC9KJwuqsH9k8PvX2kf4vATHKEaFA,9053
285
- novelwriter/dialogs/editlabel.py,sha256=LdnWaSExZcdOZv52ks2PjKBzuzHX2XXOTZ9u-SW_brs,2903
286
- novelwriter/dialogs/preferences.py,sha256=Up7qkjaqKHCJt4mQlTWsI4QzwAwfV03zriwt5cUcjAU,36578
287
- novelwriter/dialogs/projectsettings.py,sha256=tmiVoDp45kVAmk-kBdn8FE8NhWJMflQS9_k5k2bzlas,25712
288
- novelwriter/dialogs/quotes.py,sha256=uCxCraABVaaCaNR_s0VpSFNAztdA0ykdjKQUyDalDY8,4561
289
- novelwriter/dialogs/wordlist.py,sha256=dxdT6cZ5nmGs22Qlw3Gbvt8stftLrKWRXwuzmtPG2wQ,8520
290
- novelwriter/extensions/__init__.py,sha256=ybwq7BzrU1QYw7pd-QC9iCKoB6MIh_FysriNkkHOSMo,51
291
- novelwriter/extensions/circularprogress.py,sha256=UrqZCgnJgFVuUvUV0V-9noWKCROJWkDtaC44ijvuJPA,3747
292
- novelwriter/extensions/configlayout.py,sha256=z-Z-RGLB9NtTJGJF6WwTH4IAHbkH-0LnanmeixL0LK0,9377
282
+ novelwriter/dialogs/about.py,sha256=6FF9ssrP8G9TNWYAoZ1Z-Bd0gBrJsc8uPBVAulyDd_U,4888
283
+ novelwriter/dialogs/docmerge.py,sha256=FzOmKQnKW8p1fc_z6pvDlP2LlJQgDG_BV355oB1MKzc,6148
284
+ novelwriter/dialogs/docsplit.py,sha256=q4kt_lIqrz6-5VpBnCZOeTfvwcZMORZtjO3qrGEynPg,9140
285
+ novelwriter/dialogs/editlabel.py,sha256=715nMbwexvqaxPRp2rJThyC3Sokp70zztpCg2ZxGKPw,2964
286
+ novelwriter/dialogs/preferences.py,sha256=oKFjox-ku4uJdQ8Bm3eDlTuXUZ02Cv7Fky8DR-5CqSQ,36432
287
+ novelwriter/dialogs/projectsettings.py,sha256=-uJl9nEPJgr17IjifzxOp5IW3fdg5ZKytym3dOc-yDo,25752
288
+ novelwriter/dialogs/quotes.py,sha256=iDtkACeCnaCQOTXQtW1H75BjeOJIm0SsrP4EzLsFq0E,4647
289
+ novelwriter/dialogs/wordlist.py,sha256=LcqqIeU5-y_u1Le_FYcUKfNNABFweu9QiejnpphqgNs,8634
290
+ novelwriter/extensions/circularprogress.py,sha256=H0btKccdnvVfijU8ZudYvv4AgrvPYvx7IgznIxASBY0,3856
291
+ novelwriter/extensions/configlayout.py,sha256=xHUE_HckNwJsfPKZ3hJjAKAYhxzQFRmNCmBrIh6QtTs,9253
293
292
  novelwriter/extensions/eventfilters.py,sha256=XehDoXwsnCvI1D3uieuYu5J3kxZggdV6Teo7Z0xZw7E,2581
294
- novelwriter/extensions/modified.py,sha256=eCgKpq3epPQEPLtqk2ZXYtKgQyKPSbJ29ysgYSeLOLk,2981
293
+ novelwriter/extensions/modified.py,sha256=s8HbGumHA0mAspnYo-ADIiwOXkccL-w1ThimxywdlNc,4038
295
294
  novelwriter/extensions/novelselector.py,sha256=5ccEDvqrbvrG7khZBrOiJwxsjjRnkFX-A4ZT-lj_z_g,3821
296
- novelwriter/extensions/pagedsidebar.py,sha256=-6aIeuIVcZSbAGr_yheneyt9MEfVsCpYYFqjHdP5I-A,7234
297
- novelwriter/extensions/simpleprogress.py,sha256=kOnzYgkY1O8SB4u9MRufAHqA0hu5_2kM1A-ecw-CGvI,1793
298
- novelwriter/extensions/statusled.py,sha256=2mhx6UDoCzB9h1stluQaNT9xVWv63F7-82qFUwlhEms,2272
299
- novelwriter/extensions/switch.py,sha256=8OJ2T7CCBVQxBQqRa39t6ndoBRIKGrDaaggpUIwrA5E,4259
300
- novelwriter/extensions/switchbox.py,sha256=HFoU2Xd6C04nBsOE0HjQQy7OmQthvlHBgTETWyu0btQ,4116
295
+ novelwriter/extensions/pagedsidebar.py,sha256=X0AYo6oKM7gKr57662v-ZZWUTCVf5AbvIUCoLQai8fk,7369
296
+ novelwriter/extensions/simpleprogress.py,sha256=13SrFQ9TZTDICyXCdTHeCX0MOtpw4UbBEgxiAmSOjyQ,1836
297
+ novelwriter/extensions/statusled.py,sha256=640phDm3ZcLvM9EC_uwVPjG9LD5W3pAjtoqU4QbsZUU,2315
298
+ novelwriter/extensions/switch.py,sha256=sZBNX5Wj1qkVA6cHh04GjuWOTbejaatHgLZ5yGzXGv4,4346
299
+ novelwriter/extensions/switchbox.py,sha256=y6yuoCAZYYL7miaFlC8h5ymtuB0Xyk2AMmxAFYOYPDA,4210
301
300
  novelwriter/extensions/versioninfo.py,sha256=eUJzO6eV6SFXgp71uxr9696rjUQctGm84CA7XqxFhGc,5120
302
- novelwriter/gui/__init__.py,sha256=8afC6rASWwWCc7KS_6s2whwTpboQt_495AvyGMLLatQ,38
303
- novelwriter/gui/doceditor.py,sha256=t_tfICvV7Xf7y_4LaIMx-Ry9nEU39gTWJTNNEBASwyE,115832
304
- novelwriter/gui/dochighlight.py,sha256=vOJ4iD8xELf_X4x0rnZlCg6tR-f4H5hdrXg-kTDDbQE,16531
305
- novelwriter/gui/docviewer.py,sha256=MzkNOhr9F0sTviFaqnUbtkAgD-CMZjedMVWcPez2Gh4,33718
306
- novelwriter/gui/docviewerpanel.py,sha256=GZRfA5y486ZMv-_PDQXsrgr4PGJtpT9OO1OUB15UEiM,19975
307
- novelwriter/gui/editordocument.py,sha256=B7jHeELoCsyqsBEyD09eN_rAD3Ybm4BKiwuupAjGwWo,4100
308
- novelwriter/gui/itemdetails.py,sha256=NJUieAG_uadQIySk2Gpawgv0Rpq_XA0On8yeAwOTZJw,9789
301
+ novelwriter/gui/doceditor.py,sha256=255ABHnUOL8SSMbwFxlGwEDYPolhiZaVWni7tYNA5OQ,113649
302
+ novelwriter/gui/dochighlight.py,sha256=eWBxFm-jU8I3hu8jZg_v0r5tZf3Nsz4PxNOkbQO3r08,16579
303
+ novelwriter/gui/docviewer.py,sha256=8p_T7e_NbZ7fLrBiE1_XWeW-iHLzJ5an2hPldn4trUw,33089
304
+ novelwriter/gui/docviewerpanel.py,sha256=IcQGLN49MmVGfIPg-8IzLGKYn9DbJqfdXWG6jd_JaAI,20009
305
+ novelwriter/gui/editordocument.py,sha256=jxODONgq80Kf63lRezzbYtyEelaC-GpvgPEMKQ3m_sg,4116
306
+ novelwriter/gui/itemdetails.py,sha256=VIfWDtn9g0IRBYSDFT_AhZgluQ0d7sK5C14lENyvzHg,9774
309
307
  novelwriter/gui/mainmenu.py,sha256=63rvJgvqFtMQGDR0d_p-Z7zSTHyW6ioATlO6U_61MTg,38693
310
- novelwriter/gui/noveltree.py,sha256=1xme5LZIs0QiSysXrNvkKyMBFl3wDdhXZ6sMoPZHofs,28030
311
- novelwriter/gui/outline.py,sha256=PrMHkLs0tLUkuAkHeB5mx8Z56X2mKBC0To2xvDQRV24,42051
312
- novelwriter/gui/projtree.py,sha256=SzMIjJL3KdjsAvj-Tf5LQsOdz4As743ahZZwY-I0TJ0,77958
313
- novelwriter/gui/search.py,sha256=LiSVi6vQmUp0eDusX32Fgwg70MxkXcDJJFF2RzKGBHo,11031
314
- novelwriter/gui/sidebar.py,sha256=TwZOxDsStzzfcvJveOKGIghmeFwFJbD2ATFujrsCvbw,6325
315
- novelwriter/gui/statusbar.py,sha256=gl2sT2pmlv-QVhqkiQPHxHEholu-WBfvNJykzyOjBUo,9281
316
- novelwriter/gui/theme.py,sha256=evlctSE6_QIBm81joLSlQqbHOAGIy5CJ5q6flpjzlLA,31928
317
- novelwriter/text/__init__.py,sha256=oZj7LkFht3O2jjVKqZP3QtWNdpjG5mlXo5aOjp040fk,44
308
+ novelwriter/gui/noveltree.py,sha256=-XlISrM8y69_HgKHSWsXRSlLTyjQE9x1XG22A4D_5tg,27966
309
+ novelwriter/gui/outline.py,sha256=XuM-zG74iwPgshqXUQ4ACsPIw_Z-3KNae5iMRX4VCdU,42265
310
+ novelwriter/gui/projtree.py,sha256=euhQoitT5g49za8elmb_w5kpGqWCIZVZndiToC3qs54,77867
311
+ novelwriter/gui/search.py,sha256=KJuGMh-V3o8t4bqLvaw2wkDrZyoz0hOALQtYgjSyZAg,12980
312
+ novelwriter/gui/sidebar.py,sha256=kidGGzXQ5RNQvKuH0kFh-lwoUSlkXffBucEoL15RMd4,6258
313
+ novelwriter/gui/statusbar.py,sha256=ru-4pyg8owWkwkXGgj5GEupfq9fbIykYwGpomwzaINk,9353
314
+ novelwriter/gui/theme.py,sha256=B8HzV7yP1jyRKwYlvPj3fU-JHeZrUsrpUFZuqmtmYnk,32354
318
315
  novelwriter/text/counting.py,sha256=TTQoXgK_RThdOkDcM1B3u0X80HxFgKLgvhBgZkNLefM,4236
319
- novelwriter/tools/__init__.py,sha256=1MVOieA7WQw_xjH7d944hko81I4OM7gPAdSomN8zz3M,40
320
- novelwriter/tools/dictionaries.py,sha256=Pa9w0buzLoXDLmaCRGOGXc7Fd1qj55PVThGK5jqFMFY,9132
321
- novelwriter/tools/lipsum.py,sha256=hKp5siA5TC_KGDufTGy0j0fqSjSwPDdiNvOAuVsMImk,4784
322
- novelwriter/tools/manusbuild.py,sha256=Jg0B8MgGI_wqDtzkJvOVD2VB_ow5GotFqsEIbG03RHo,13773
323
- novelwriter/tools/manuscript.py,sha256=TdWwcNstZP_QZ3tr6HLKcTrNFp5JETcwS-RGLL-Btzw,40200
324
- novelwriter/tools/manussettings.py,sha256=znuiyVXufaXEhnfCg1KJgXRJPeqfa1PBwk7j3-bjx-0,56016
325
- novelwriter/tools/noveldetails.py,sha256=dSewn6DfniVcFKF3h50Fpyu3a7GA_oClOlJhUa2BbVM,18481
326
- novelwriter/tools/welcome.py,sha256=Moo-krPjwtQMO0jRKXlwyRQNulMgdNxZfZVLXT41thk,27960
327
- novelwriter/tools/writingstats.py,sha256=ukgQJRtIKij0bF13Z0Vo-KMkxkTjk7OzOQrjBZIbrJ8,22557
328
- novelWriter-2.4b1.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
329
- novelWriter-2.4b1.dist-info/METADATA,sha256=CIhwqC13mWfDRq1gptYmOff7HJL4C3hsrKR3sHur3jA,2582
330
- novelWriter-2.4b1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
331
- novelWriter-2.4b1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
332
- novelWriter-2.4b1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
333
- novelWriter-2.4b1.dist-info/RECORD,,
316
+ novelwriter/tools/dictionaries.py,sha256=wnlVjRVBAghRXZhN1pBgoXN5qC7Qp7inQ8EG2uyOHMk,9215
317
+ novelwriter/tools/lipsum.py,sha256=d-qdRSrXLfTkTdzi7vhjeBlWawwGwWQ9Qd_zRSwzgpQ,4901
318
+ novelwriter/tools/manusbuild.py,sha256=wo7Th5nYWmg4h7Wfg7WYrXg_qGgoN-uX41nOue1lXSU,13946
319
+ novelwriter/tools/manuscript.py,sha256=Ql4KtzefNr-2LXyNT3vVOnEneOZbXkrkjTA3NXZ08Sc,40043
320
+ novelwriter/tools/manussettings.py,sha256=4V9M2SaDuvjszYx6oXQVEHW5FmNtYAnNAo5gdSDKX3Q,55781
321
+ novelwriter/tools/noveldetails.py,sha256=KoENyz0hH3TlXfRCEJvRTZ0h7ruOgTIv85AgCl1Ur5o,18503
322
+ novelwriter/tools/welcome.py,sha256=3lysgIhIu8DCux3XhTqT2Boc4s5qx9spVvmI48lS2d8,27993
323
+ novelwriter/tools/writingstats.py,sha256=IubrbbLB_Qlnwp9B3muKkeD84xtckPvmTax7E4LnI5g,22797
324
+ novelWriter-2.4rc1.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
325
+ novelWriter-2.4rc1.dist-info/METADATA,sha256=aPPGvSD_mgrSCGxhnQ_psHjEbc6a3A5ROIlpdIhH_Ec,2583
326
+ novelWriter-2.4rc1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
327
+ novelWriter-2.4rc1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
328
+ novelWriter-2.4rc1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
329
+ novelWriter-2.4rc1.dist-info/RECORD,,
novelwriter/__init__.py CHANGED
@@ -42,9 +42,9 @@ __license__ = "GPLv3"
42
42
  __author__ = "Veronica Berglyd Olsen"
43
43
  __maintainer__ = "Veronica Berglyd Olsen"
44
44
  __email__ = "code@vkbo.net"
45
- __version__ = "2.4b1"
46
- __hexversion__ = "0x020400b1"
47
- __date__ = "2024-03-26"
45
+ __version__ = "2.4rc1"
46
+ __hexversion__ = "0x020400c1"
47
+ __date__ = "2024-04-06"
48
48
  __status__ = "Stable"
49
49
  __domain__ = "novelwriter.io"
50
50
 
@@ -187,7 +187,7 @@ def main(sysArgs: list | None = None):
187
187
  ))
188
188
  for errLine in errorData:
189
189
  logger.critical(errLine)
190
- errApp.exec_()
190
+ errApp.exec()
191
191
  sys.exit(errorCode)
192
192
 
193
193
  # Finish initialising config
@@ -237,6 +237,6 @@ def main(sysArgs: list | None = None):
237
237
  nwGUI = GuiMain()
238
238
  nwGUI.postLaunchTasks(cmdOpen)
239
239
 
240
- sys.exit(nwApp.exec_())
240
+ sys.exit(nwApp.exec())
241
241
 
242
242
  # END Function main
@@ -0,0 +1,4 @@
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
+ <path d="m0 0v4l8 8-8 8v4h4l8-8 8 8h4v-4l-8-8 8-8v-4h-4l-8 8-8-8h-4z" fill="#f00" stroke-width=".70711"/>
4
+ </svg>
@@ -100,8 +100,8 @@ status_time = typ_stopwatch-grey.svg
100
100
  sticky-off = typ_pin-outline.svg
101
101
  sticky-on = typ_pin.svg
102
102
  unchecked = mixed_input-unchecked.svg
103
- unfold-hide = typ_arrow-right.svg
104
- unfold-show = typ_arrow-down.svg
103
+ unfold-hide = typ_unfold-hidden.svg
104
+ unfold-show = typ_unfold-visible.svg
105
105
  up = typ_chevron-up.svg
106
106
  view = typ_eye.svg
107
107
  view_build = typ_export-grey.svg
@@ -0,0 +1,4 @@
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
+ <path d="m9.8767 17.723 5.8157-5.723-5.8157-5.723c-0.18462-0.18462-0.46155-0.27693-0.64616-0.27693-0.18462 0-0.46155 0.092309-0.64616 0.27693-0.18462 0.18462-0.27693 0.36924-0.27693 0.64616v10.154c0 0.27693 0.092309 0.46154 0.27693 0.64616 0.18462 0.18462 0.46155 0.27693 0.64616 0.27693 0.18462 0 0.46155-0.09231 0.64616-0.27693z" fill="#aeaeae" stroke-width=".92309"/>
4
+ </svg>
@@ -0,0 +1,4 @@
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
+ <path d="m6.277 9.8767 5.723 5.8157 5.723-5.8157c0.18462-0.18462 0.27693-0.46155 0.27693-0.64616 0-0.18462-0.092309-0.46155-0.27693-0.64616-0.18462-0.18462-0.36924-0.27693-0.64616-0.27693h-10.154c-0.27693 0-0.46155 0.092309-0.64616 0.27693-0.18462 0.18462-0.27693 0.46155-0.27693 0.64616 0 0.18462 0.092309 0.46155 0.27693 0.64616z" fill="#aeaeae" stroke-width=".92309"/>
4
+ </svg>
@@ -100,8 +100,8 @@ status_time = typ_stopwatch-grey.svg
100
100
  sticky-off = typ_pin-outline.svg
101
101
  sticky-on = typ_pin.svg
102
102
  unchecked = mixed_input-unchecked.svg
103
- unfold-hide = typ_arrow-right.svg
104
- unfold-show = typ_arrow-down.svg
103
+ unfold-hide = typ_unfold-hidden.svg
104
+ unfold-show = typ_unfold-visible.svg
105
105
  up = typ_chevron-up.svg
106
106
  view = typ_eye.svg
107
107
  view_build = typ_export-grey.svg
@@ -0,0 +1,4 @@
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
+ <path d="m9.8767 17.723 5.8157-5.723-5.8157-5.723c-0.18462-0.18462-0.46155-0.27693-0.64616-0.27693-0.18462 0-0.46155 0.092309-0.64616 0.27693-0.18462 0.18462-0.27693 0.36924-0.27693 0.64616v10.154c0 0.27693 0.092309 0.46154 0.27693 0.64616 0.18462 0.18462 0.46155 0.27693 0.64616 0.27693 0.18462 0 0.46155-0.09231 0.64616-0.27693z" fill-opacity=".78039" stroke-width="1.6923"/>
4
+ </svg>
@@ -0,0 +1,4 @@
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
+ <path d="m6.277 9.8767 5.723 5.8157 5.723-5.8157c0.18462-0.18462 0.27693-0.46155 0.27693-0.64616 0-0.18462-0.09231-0.46155-0.27693-0.64616-0.18462-0.18462-0.36924-0.27693-0.64616-0.27693h-10.154c-0.27693 0-0.46155 0.092309-0.64616 0.27693-0.18462 0.18462-0.27693 0.46155-0.27693 0.64616 0 0.18462 0.092309 0.46155 0.27693 0.64616z" fill-opacity=".78039" stroke-width="1.6923"/>
4
+ </svg>
Binary file
Binary file
novelwriter/common.py CHANGED
@@ -36,7 +36,7 @@ from configparser import ConfigParser
36
36
  from urllib.parse import urljoin
37
37
  from urllib.request import pathname2url
38
38
 
39
- from PyQt5.QtGui import QDesktopServices
39
+ from PyQt5.QtGui import QColor, QDesktopServices
40
40
  from PyQt5.QtCore import QCoreApplication, QUrl
41
41
 
42
42
  from novelwriter.enum import nwItemClass, nwItemType, nwItemLayout
@@ -382,6 +382,11 @@ def numberToRoman(value: int, toLower: bool = False) -> str:
382
382
  return roman.lower() if toLower else roman
383
383
 
384
384
 
385
+ def cssCol(col: QColor, alpha: int | None = None) -> str:
386
+ """Convert a QColor object to an rgba entry to use in CSS."""
387
+ return f"rgba({col.red()}, {col.green()}, {col.blue()}, {alpha or col.alpha()})"
388
+
389
+
385
390
  ##
386
391
  # Encoder Functions
387
392
  ##
novelwriter/config.py CHANGED
@@ -61,8 +61,12 @@ class Config:
61
61
  self.appHandle = "novelwriter"
62
62
 
63
63
  # Set Paths
64
- confRoot = Path(QStandardPaths.writableLocation(QStandardPaths.ConfigLocation))
65
- dataRoot = Path(QStandardPaths.writableLocation(QStandardPaths.AppDataLocation))
64
+ confRoot = Path(QStandardPaths.writableLocation(
65
+ QStandardPaths.StandardLocation.ConfigLocation)
66
+ )
67
+ dataRoot = Path(QStandardPaths.writableLocation(
68
+ QStandardPaths.StandardLocation.AppDataLocation)
69
+ )
66
70
 
67
71
  self._confPath = confRoot.absolute() / self.appHandle # The user config location
68
72
  self._dataPath = dataRoot.absolute() / self.appHandle # The user data location
@@ -83,7 +87,7 @@ class Config:
83
87
  # Localisation
84
88
  # Note that these paths must be strings
85
89
  self._nwLangPath = self._appPath / "assets" / "i18n"
86
- self._qtLangPath = QLibraryInfo.location(QLibraryInfo.TranslationsPath)
90
+ self._qtLangPath = QLibraryInfo.location(QLibraryInfo.LibraryLocation.TranslationsPath)
87
91
 
88
92
  hasLocale = (self._nwLangPath / f"nw_{QLocale.system().name()}.qm").exists()
89
93
  self._qLocale = QLocale.system() if hasLocale else QLocale("en_GB")
@@ -369,7 +373,7 @@ class Config:
369
373
  elif self.osDarwin and "Helvetica" in fontFam:
370
374
  self.textFont = "Helvetica"
371
375
  else:
372
- self.textFont = fontDB.systemFont(QFontDatabase.GeneralFont).family()
376
+ self.textFont = fontDB.systemFont(QFontDatabase.SystemFont.GeneralFont).family()
373
377
  else:
374
378
  self.textFont = family
375
379
  return
@@ -337,32 +337,32 @@ class DocSearch:
337
337
  """Iteratively search through documents in a project."""
338
338
  self._regEx.setPattern(self._buildPattern(search))
339
339
  logger.debug("Searching with pattern '%s'", self._regEx.pattern())
340
-
341
- num = len(search)
342
340
  storage = project.storage
343
341
  for item in project.tree:
344
342
  if item.isFileType():
345
- text = storage.getDocumentText(item.itemHandle)
346
- rxItt = self._regEx.globalMatch(text)
347
- count = 0
348
- capped = False
349
- results = []
350
- while rxItt.hasNext():
351
- rxMatch = rxItt.next()
352
- pos = rxMatch.capturedStart()
353
- num = rxMatch.capturedLength()
354
- context = text[pos:pos+100].partition("\n")[0]
355
- if context:
356
- results.append((pos, num, context))
357
- count += 1
358
- if count >= nwConst.MAX_SEARCH_RESULT:
359
- capped = True
360
- break
361
-
343
+ results, capped = self.searchText(storage.getDocumentText(item.itemHandle))
362
344
  yield item, results, capped
363
-
364
345
  return
365
346
 
347
+ def searchText(self, text: str) -> tuple[list[tuple[int, int, str]], bool]:
348
+ """Search a piece of text for RegEx matches."""
349
+ rxItt = self._regEx.globalMatch(text)
350
+ count = 0
351
+ capped = False
352
+ results = []
353
+ while rxItt.hasNext():
354
+ rxMatch = rxItt.next()
355
+ pos = rxMatch.capturedStart()
356
+ num = rxMatch.capturedLength()
357
+ context = text[pos:pos+100].partition("\n")[0]
358
+ if context:
359
+ results.append((pos, num, context))
360
+ count += 1
361
+ if count >= nwConst.MAX_SEARCH_RESULT:
362
+ capped = True
363
+ break
364
+ return results, capped
365
+
366
366
  ##
367
367
  # Internal Functions
368
368
  ##
@@ -382,8 +382,7 @@ class DocSearch:
382
382
  escaped += f"\\{c}"
383
383
  search = escaped
384
384
  if self._words:
385
- search = search if search.startswith("\\b") else f"\\b{search}"
386
- search = search if search.endswith("\\b") else f"{search}\\b"
385
+ search = f"(?:^|\\b){search}(?:$|\\b)"
387
386
  return search
388
387
 
389
388
  # END Class DocSearch
@@ -35,6 +35,7 @@ from PyQt5.QtCore import QRectF
35
35
 
36
36
  from novelwriter import CONFIG
37
37
  from novelwriter.common import minmax, simplified
38
+ from novelwriter.types import QtPaintAnitAlias, QtTransparent
38
39
 
39
40
  if TYPE_CHECKING: # pragma: no cover
40
41
  from typing import TypeGuard # Requires Python 3.10
@@ -248,10 +249,10 @@ class NWStatus:
248
249
  def _createIcon(self, red: int, green: int, blue: int) -> QIcon:
249
250
  """Generate an icon for a status label."""
250
251
  pixmap = QPixmap(self._iPX, self._iPX)
251
- pixmap.fill(QColor(0, 0, 0, 0))
252
+ pixmap.fill(QtTransparent)
252
253
 
253
254
  painter = QPainter(pixmap)
254
- painter.setRenderHint(QPainter.Antialiasing)
255
+ painter.setRenderHint(QtPaintAnitAlias)
255
256
  painter.fillPath(self._iconPath, QColor(red, green, blue))
256
257
  painter.end()
257
258