novelWriter 2.5.1__py3-none-any.whl → 2.5.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.
- {novelWriter-2.5.1.dist-info → novelWriter-2.5.3.dist-info}/METADATA +4 -3
- {novelWriter-2.5.1.dist-info → novelWriter-2.5.3.dist-info}/RECORD +21 -20
- {novelWriter-2.5.1.dist-info → novelWriter-2.5.3.dist-info}/WHEEL +1 -1
- novelwriter/__init__.py +3 -3
- novelwriter/assets/i18n/nw_de_DE.qm +0 -0
- novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
- novelwriter/assets/i18n/project_de_DE.json +2 -2
- novelwriter/assets/i18n/project_ru_RU.json +11 -0
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/assets/text/credits_en.htm +1 -0
- novelwriter/assets/themes/default_light.conf +2 -2
- novelwriter/core/tohtml.py +1 -1
- novelwriter/core/tokenizer.py +12 -6
- novelwriter/gui/docviewer.py +2 -4
- novelwriter/gui/projtree.py +7 -3
- novelwriter/tools/manuscript.py +1 -0
- {novelWriter-2.5.1.dist-info → novelWriter-2.5.3.dist-info}/LICENSE.md +0 -0
- {novelWriter-2.5.1.dist-info → novelWriter-2.5.3.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.5.1.dist-info → novelWriter-2.5.3.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: novelWriter
|
3
|
-
Version: 2.5.
|
3
|
+
Version: 2.5.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
|
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.10
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
16
17
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
17
18
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
18
19
|
Classifier: Development Status :: 5 - Production/Stable
|
@@ -23,8 +24,8 @@ Classifier: Topic :: Text Editors
|
|
23
24
|
Requires-Python: >=3.9
|
24
25
|
Description-Content-Type: text/markdown
|
25
26
|
License-File: LICENSE.md
|
26
|
-
Requires-Dist: pyqt5
|
27
|
-
Requires-Dist: pyenchant
|
27
|
+
Requires-Dist: pyqt5>=5.15
|
28
|
+
Requires-Dist: pyenchant>=3.0.0
|
28
29
|
|
29
30
|
<img src="https://raw.githubusercontent.com/vkbo/novelWriter/main/setup/novelwriter_text.png">
|
30
31
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
novelwriter/__init__.py,sha256=
|
1
|
+
novelwriter/__init__.py,sha256=Xw_5nsng19Co6cRmSNqylgg6icULBKm3u9Gm3feuWM8,7552
|
2
2
|
novelwriter/common.py,sha256=qg7jqTVqLOk4zlhKkFoLgYfBdtrBweZYkZeNn7OXX5k,18494
|
3
3
|
novelwriter/config.py,sha256=cUL4S-JOKhxEes--NxCiV84NpanvVbcbW_K5v74dS3w,39081
|
4
4
|
novelwriter/constants.py,sha256=y-UjNZxtU2lzn0Ji9lKiNU3233RmoJuK-3JWHT6GIvc,21368
|
@@ -7,9 +7,9 @@ novelwriter/error.py,sha256=iIx1OzyXTT7Ngk2mXW_5c0YqVdFBD0NIkUFgAXNNBlM,6813
|
|
7
7
|
novelwriter/guimain.py,sha256=i3qIrDKlwsaF0BgaTzldHWPOozs1wYpmvwQTVro06_c,53662
|
8
8
|
novelwriter/shared.py,sha256=LMgMXZK28LJUnRDbcTqTp4ZDVCKBt3EJYZMnIdu4R18,15906
|
9
9
|
novelwriter/types.py,sha256=tV-XFc10wsk7zH__S2dEuEfidI6_adgOetpAVbnmJmI,4691
|
10
|
-
novelwriter/assets/manual.pdf,sha256=
|
11
|
-
novelwriter/assets/sample.zip,sha256=
|
12
|
-
novelwriter/assets/i18n/nw_de_DE.qm,sha256=
|
10
|
+
novelwriter/assets/manual.pdf,sha256=BxGP5FpA2LtJCaz_DEMaLExW9FNLXalYP28fLfBKmaI,2733563
|
11
|
+
novelwriter/assets/sample.zip,sha256=IYTSbrleoKfOB4xtUWdTmMQntjDWhMOd2QSKFYGhjR0,27805
|
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=
|
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=
|
24
|
+
novelwriter/assets/i18n/project_de_DE.json,sha256=fuEYohM2xm0mLXmibbU0TISr0BCZb2yOiBLCUmKhDJQ,2810
|
24
25
|
novelwriter/assets/i18n/project_en_GB.json,sha256=7c9W2YJAELCSwx4zN_2qYZ3xsGncinCrGNhaj_FVkxk,2511
|
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=
|
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
|
@@ -260,12 +261,12 @@ novelwriter/assets/syntax/tomorrow_night.conf,sha256=mWPneIV_6tszLEK4-Eo-kcJmUbr
|
|
260
261
|
novelwriter/assets/syntax/tomorrow_night_blue.conf,sha256=L42gcekFfNpCCB45m9Lhzmz8Y6Lvbpik3AADi_1Aao8,1549
|
261
262
|
novelwriter/assets/syntax/tomorrow_night_bright.conf,sha256=h8_775Ed8hl2XhfCoxAY2kT43vi-UvG8UHik1aI4eRw,1554
|
262
263
|
novelwriter/assets/syntax/tomorrow_night_eighties.conf,sha256=stO_xH5RzMN0jaZeYr53LVXbpqSmIXALBFGVLlJBDLA,1557
|
263
|
-
novelwriter/assets/text/credits_en.htm,sha256=
|
264
|
+
novelwriter/assets/text/credits_en.htm,sha256=wZgQGDQgIvd_2aT6oaJB88jOUjhtWYbn9tA6IfoGq3k,2958
|
264
265
|
novelwriter/assets/text/lipsum.txt,sha256=sGA6AC_p4jrUifxLxy3cSODeRwkpBNXDPGgX6YRTm2s,62937
|
265
266
|
novelwriter/assets/themes/cyberpunk_night.conf,sha256=FvG_YVfEnMwJV1XUDEdpi9qoHQ5sdyVEaR_Y3WfWNA8,923
|
266
267
|
novelwriter/assets/themes/default.conf,sha256=K0LZ64lODpCtUg3pISTAP4UKvEYMvPkmIYN9RDEaWwk,72
|
267
268
|
novelwriter/assets/themes/default_dark.conf,sha256=obPCLVOXL1Zp973DbbROldyQOoUPGWlPKLbetZqMZe8,989
|
268
|
-
novelwriter/assets/themes/default_light.conf,sha256=
|
269
|
+
novelwriter/assets/themes/default_light.conf,sha256=2a4SXzlbZpyV9EX3BuFSRFYuLuzu4hapa_3iwez6yAc,992
|
269
270
|
novelwriter/assets/themes/dracula.conf,sha256=pUvu7FS1nRPj3PyU3NZMR0WSb5sIa0oLpSa2XTzsh98,1425
|
270
271
|
novelwriter/assets/themes/solarized_dark.conf,sha256=7dDjs8aiFuAjl--hqMJQEExrfCgAapiPY82CL6aAo-I,916
|
271
272
|
novelwriter/assets/themes/solarized_light.conf,sha256=psCPVWcjAKB5y8H_E_h5zYUifxh5YpdFdBzxFofIHa0,918
|
@@ -283,8 +284,8 @@ novelwriter/core/sessions.py,sha256=V9eBXaUMcXTZjYXR5dgi6E14COIlcLIkNwS6pDrn75U,
|
|
283
284
|
novelwriter/core/spellcheck.py,sha256=MwkRPp3MJa2X-6yRWX6Rc-sq2vLsbLnjNnyUpAbRFiE,7176
|
284
285
|
novelwriter/core/status.py,sha256=FW20GK6_gxsYCiD7ZDg_gGIgp6yw3y1PS5mBN5HlARo,11592
|
285
286
|
novelwriter/core/storage.py,sha256=mNM9EMW0VRMwEkmTKnzotPVdJk4tJDDUNAHNH9yG5mw,20926
|
286
|
-
novelwriter/core/tohtml.py,sha256=
|
287
|
-
novelwriter/core/tokenizer.py,sha256=
|
287
|
+
novelwriter/core/tohtml.py,sha256=ldJRk2J2RQ5IHPNUtVWCLy64QkVbOm2WfyMcSln-YUg,19211
|
288
|
+
novelwriter/core/tokenizer.py,sha256=M4hbOqPtaeLFFPwVlQs03eHgSDHEWjZKw3_zzWtgqB0,47975
|
288
289
|
novelwriter/core/tomarkdown.py,sha256=sZG64PLyTjDuIxnPQVMdcMSF-obsp4C06B1dUKhlbHU,7925
|
289
290
|
novelwriter/core/toodt.py,sha256=Hrb6FJkwf2wwcKE6f7lw5o0PZqKsf1TWqvJbrJWrijU,62529
|
290
291
|
novelwriter/core/toqdoc.py,sha256=p8_4WwwXcnEuPw2XsU4Xq76YTyT2JMk7NQR1arCjVd8,15500
|
@@ -309,14 +310,14 @@ novelwriter/extensions/switchbox.py,sha256=5tCiFWkT9WF9xh2c__BnNAJHFLw2nRso3fJZf
|
|
309
310
|
novelwriter/extensions/versioninfo.py,sha256=R2_U6B678be0WNxbnhUntpxR5PnZVGf6eeyENp-S-Xo,5035
|
310
311
|
novelwriter/gui/doceditor.py,sha256=Cv9_sMKpSozKrIPusvcLDzlgD6rr8JxDHkzIoApOfMc,113720
|
311
312
|
novelwriter/gui/dochighlight.py,sha256=4JNWQkfaEc0p-EvRRkbBWwQdrFqVotgremzu2WWw9hA,19463
|
312
|
-
novelwriter/gui/docviewer.py,sha256=
|
313
|
+
novelwriter/gui/docviewer.py,sha256=eXnUE-q_hrwIaJ7FBJf5XrTiQOkWz_r_oAsoYe9w3PI,32251
|
313
314
|
novelwriter/gui/docviewerpanel.py,sha256=CCCzSc-Ol5jCmoEfpZ-RD-tcwzkyM7g_iBSQNeljGgE,20040
|
314
315
|
novelwriter/gui/editordocument.py,sha256=5_v-gwZ9-CwJHGs7lFUGdY3paR7F1PW2FjD6_fbq5wY,4087
|
315
316
|
novelwriter/gui/itemdetails.py,sha256=0U3hghK4Vue3AwtLBRY6YJMN3vOCjatvvzXhJDn4UXo,9688
|
316
317
|
novelwriter/gui/mainmenu.py,sha256=PaJjO38DQ72UL9hMyvSbh2I1daxOZBSbJhNsov771fw,38908
|
317
318
|
novelwriter/gui/noveltree.py,sha256=rAU_f6efrt5uAsew6jGqo3X3E3ggrZaoQh2prm13wD8,27635
|
318
319
|
novelwriter/gui/outline.py,sha256=Id6hSEe1iLls6qPckX-b3U21rPOOndlfe7r4VsNC3G8,42312
|
319
|
-
novelwriter/gui/projtree.py,sha256=
|
320
|
+
novelwriter/gui/projtree.py,sha256=GF7StUyPpgp-mcnG2AQIOta7o4gjBuDn69-9piYmtbU,78380
|
320
321
|
novelwriter/gui/search.py,sha256=HnS0_vOg15f3woXeZ8MS_ZAblx9aFIuN7BSa195tY1M,13262
|
321
322
|
novelwriter/gui/sidebar.py,sha256=jBkOinx69lwt4m1GovQ7nF44lF-g_SOk3yTT96KlbFY,6212
|
322
323
|
novelwriter/gui/statusbar.py,sha256=-rF6bIJXGKFRswVKWE1c5In5x3sX4iXMfp0AGxZxt0c,9053
|
@@ -326,14 +327,14 @@ novelwriter/text/patterns.py,sha256=sEBPf9buLtJvYeoYquZzDcSC6gfKBHIUPGbD31y5H-g,
|
|
326
327
|
novelwriter/tools/dictionaries.py,sha256=92GNCSEOK1EI7t2DiayT8p7nzKW7LwxJJz98F6kn3Vg,9243
|
327
328
|
novelwriter/tools/lipsum.py,sha256=NcmoxWzrbEybh_w1FzxuxHmeTr8N03OrxjxsPWEbae4,4794
|
328
329
|
novelwriter/tools/manusbuild.py,sha256=c3NdpkAqUPTKN2BpGX_xleFtZPi1G8uv80XBZEp27Bw,14071
|
329
|
-
novelwriter/tools/manuscript.py,sha256=
|
330
|
+
novelwriter/tools/manuscript.py,sha256=UgLSm6TFfftSc_cttzaic6Y06pwdMOMmSBhVWzdCSYA,38009
|
330
331
|
novelwriter/tools/manussettings.py,sha256=Uz7QpCb2l_SftpQ5N7x0qHdq41-6fvTRHv7bxWvDLWg,56145
|
331
332
|
novelwriter/tools/noveldetails.py,sha256=xNpTf5-hFu-K_flPhMLug6tNboKvDWV7OEetpHx6Lsc,18481
|
332
333
|
novelwriter/tools/welcome.py,sha256=KLSlBTih_HOTJ3nmyv4IU4ec8XNJDL5AwXMZ6amqmIw,28027
|
333
334
|
novelwriter/tools/writingstats.py,sha256=f5nbmE5V9VsQ8qi_DlvfF5yVIupEbVDavtuMbTzU7IA,22753
|
334
|
-
novelWriter-2.5.
|
335
|
-
novelWriter-2.5.
|
336
|
-
novelWriter-2.5.
|
337
|
-
novelWriter-2.5.
|
338
|
-
novelWriter-2.5.
|
339
|
-
novelWriter-2.5.
|
335
|
+
novelWriter-2.5.3.dist-info/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
|
336
|
+
novelWriter-2.5.3.dist-info/METADATA,sha256=ADeNRKWKkQDtlf-XyVKsOHPcX8hjmX1umCivlQppZcY,2581
|
337
|
+
novelWriter-2.5.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
338
|
+
novelWriter-2.5.3.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
|
339
|
+
novelWriter-2.5.3.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
|
340
|
+
novelWriter-2.5.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.5.
|
51
|
-
__hexversion__ = "
|
52
|
-
__date__ = "2024-
|
50
|
+
__version__ = "2.5.3"
|
51
|
+
__hexversion__ = "0x020503f0"
|
52
|
+
__date__ = "2024-11-26"
|
53
53
|
__status__ = "Stable"
|
54
54
|
__domain__ = "novelwriter.io"
|
55
55
|
|
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": "
|
8
|
+
"Focus": "Fokus",
|
9
9
|
"Characters": "Charaktere",
|
10
|
-
"Plot": "
|
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": "Два",
|
novelwriter/assets/manual.pdf
CHANGED
Binary file
|
novelwriter/assets/sample.zip
CHANGED
Binary file
|
@@ -35,6 +35,7 @@ translators for the languages currently available:</p>
|
|
35
35
|
<li><b>Norwegian:</b> Veronica Berglyd Olsen (vkbo)</li>
|
36
36
|
<li><b>Polish:</b> Anna Maria Polak (Nauthiz)</li>
|
37
37
|
<li><b>Portuguese:</b> Bruno Meneguello (bkmeneguello)</li>
|
38
|
+
<li><b>Russian:</b> Konstantin Tan (k1kimosha)</li>
|
38
39
|
<li><b>Simplified Chinese:</b> Qianzhi Long (longqzh)</li>
|
39
40
|
</ul>
|
40
41
|
|
novelwriter/core/tohtml.py
CHANGED
novelwriter/core/tokenizer.py
CHANGED
@@ -832,7 +832,7 @@ class Tokenizer(ABC):
|
|
832
832
|
sAlign |= self.A_IND_R
|
833
833
|
|
834
834
|
# Process formats
|
835
|
-
tLine, tFmt = self._extractFormats(aLine)
|
835
|
+
tLine, tFmt = self._extractFormats(aLine, hDialog=self._isNovel)
|
836
836
|
tokens.append((
|
837
837
|
self.T_TEXT, nHead, tLine, tFmt, sAlign
|
838
838
|
))
|
@@ -1098,8 +1098,13 @@ class Tokenizer(ABC):
|
|
1098
1098
|
# Internal Functions
|
1099
1099
|
##
|
1100
1100
|
|
1101
|
-
def _extractFormats(
|
1102
|
-
|
1101
|
+
def _extractFormats(
|
1102
|
+
self, text: str, skip: int = 0, hDialog: bool = False
|
1103
|
+
) -> tuple[str, T_Formats]:
|
1104
|
+
"""Extract format markers from a text paragraph. In order to
|
1105
|
+
also process dialogue highlighting, the hDialog flag must be set
|
1106
|
+
to True. See issues #2011 and #2013.
|
1107
|
+
"""
|
1103
1108
|
temp: list[tuple[int, int, int, str]] = []
|
1104
1109
|
|
1105
1110
|
# Match Markdown
|
@@ -1137,7 +1142,7 @@ class Tokenizer(ABC):
|
|
1137
1142
|
))
|
1138
1143
|
|
1139
1144
|
# Match Dialogue
|
1140
|
-
if self._rxDialogue:
|
1145
|
+
if self._rxDialogue and hDialog:
|
1141
1146
|
for regEx, fmtB, fmtE in self._rxDialogue:
|
1142
1147
|
rxItt = regEx.globalMatch(text, 0)
|
1143
1148
|
while rxItt.hasNext():
|
@@ -1150,8 +1155,9 @@ class Tokenizer(ABC):
|
|
1150
1155
|
formats = []
|
1151
1156
|
for pos, n, fmt, key in reversed(sorted(temp, key=lambda x: x[0])):
|
1152
1157
|
if fmt > 0:
|
1153
|
-
|
1154
|
-
|
1158
|
+
if n > 0:
|
1159
|
+
result = result[:pos] + result[pos+n:]
|
1160
|
+
formats = [(p-n if p > pos else p, f, k) for p, f, k in formats]
|
1155
1161
|
formats.insert(0, (pos, fmt, key))
|
1156
1162
|
|
1157
1163
|
return result, formats
|
novelwriter/gui/docviewer.py
CHANGED
@@ -229,15 +229,13 @@ class GuiDocViewer(QTextBrowser):
|
|
229
229
|
QApplication.restoreOverrideCursor()
|
230
230
|
return False
|
231
231
|
|
232
|
-
#
|
233
|
-
self.setTabStopDistance(CONFIG.getTabWidth())
|
234
|
-
|
235
|
-
# Must be before setHtml
|
232
|
+
# Must be before setDocument
|
236
233
|
if updateHistory:
|
237
234
|
self.docHistory.append(tHandle)
|
238
235
|
|
239
236
|
self.setDocumentTitle(tHandle)
|
240
237
|
self.setDocument(qDoc.document)
|
238
|
+
self.setTabStopDistance(CONFIG.getTabWidth())
|
241
239
|
|
242
240
|
if self._docHandle == tHandle:
|
243
241
|
# This is a refresh, so we set the scrollbar back to where it was
|
novelwriter/gui/projtree.py
CHANGED
@@ -1000,7 +1000,9 @@ class GuiProjectTree(QTreeWidget):
|
|
1000
1000
|
|
1001
1001
|
self.propagateCount(tHandle, 0)
|
1002
1002
|
|
1003
|
-
|
1003
|
+
# If a non-root item ends up on root due to a bug, allow it
|
1004
|
+
# to still be deleted from invisible root (see #2108)
|
1005
|
+
trItemP = trItemS.parent() or self.invisibleRootItem()
|
1004
1006
|
tIndex = trItemP.indexOfChild(trItemS)
|
1005
1007
|
trItemP.takeChild(tIndex)
|
1006
1008
|
|
@@ -1315,9 +1317,11 @@ class GuiProjectTree(QTreeWidget):
|
|
1315
1317
|
action is allowed, and update relevant data.
|
1316
1318
|
"""
|
1317
1319
|
tItem = self.itemAt(event.pos())
|
1318
|
-
|
1320
|
+
onItem = self.dropIndicatorPosition() == QAbstractItemView.DropIndicatorPosition.OnItem
|
1321
|
+
onView = self.dropIndicatorPosition() == QAbstractItemView.DropIndicatorPosition.OnViewport
|
1319
1322
|
# Make sure nothing can be dropped on invisible root (see #1569)
|
1320
|
-
|
1323
|
+
# Make sure nothing can be dropped on the viewport (see #2108)
|
1324
|
+
if tItem is None or (tItem.parent() is None and not onItem) or onView:
|
1321
1325
|
logger.error("Invalid drop location")
|
1322
1326
|
event.ignore()
|
1323
1327
|
return
|
novelwriter/tools/manuscript.py
CHANGED
File without changes
|
File without changes
|
File without changes
|