novelWriter 2.5.2__py3-none-any.whl → 2.6__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 (129) hide show
  1. {novelWriter-2.5.2.dist-info → novelWriter-2.6.dist-info}/METADATA +5 -4
  2. {novelWriter-2.5.2.dist-info → novelWriter-2.6.dist-info}/RECORD +126 -105
  3. {novelWriter-2.5.2.dist-info → novelWriter-2.6.dist-info}/WHEEL +1 -1
  4. novelwriter/__init__.py +50 -11
  5. novelwriter/assets/i18n/nw_de_DE.qm +0 -0
  6. novelwriter/assets/i18n/nw_en_US.qm +0 -0
  7. novelwriter/assets/i18n/nw_es_419.qm +0 -0
  8. novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
  9. novelwriter/assets/i18n/nw_it_IT.qm +0 -0
  10. novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
  11. novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
  12. novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
  13. novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
  14. novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
  15. novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
  16. novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
  17. novelwriter/assets/i18n/project_de_DE.json +4 -2
  18. novelwriter/assets/i18n/project_en_GB.json +1 -0
  19. novelwriter/assets/i18n/project_en_US.json +2 -0
  20. novelwriter/assets/i18n/project_it_IT.json +2 -0
  21. novelwriter/assets/i18n/project_ja_JP.json +2 -0
  22. novelwriter/assets/i18n/project_nb_NO.json +2 -0
  23. novelwriter/assets/i18n/project_nl_NL.json +2 -0
  24. novelwriter/assets/i18n/project_pl_PL.json +2 -0
  25. novelwriter/assets/i18n/project_pt_BR.json +2 -0
  26. novelwriter/assets/i18n/project_ru_RU.json +11 -0
  27. novelwriter/assets/i18n/project_zh_CN.json +2 -0
  28. novelwriter/assets/icons/typicons_dark/icons.conf +8 -0
  29. novelwriter/assets/icons/typicons_dark/mixed_copy.svg +4 -0
  30. novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +6 -0
  31. novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +6 -0
  32. novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +6 -0
  33. novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +6 -0
  34. novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +6 -0
  35. novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +6 -0
  36. novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +5 -0
  37. novelwriter/assets/icons/typicons_light/icons.conf +8 -0
  38. novelwriter/assets/icons/typicons_light/mixed_copy.svg +4 -0
  39. novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +6 -0
  40. novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +6 -0
  41. novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +6 -0
  42. novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +6 -0
  43. novelwriter/assets/icons/typicons_light/mixed_size-height.svg +6 -0
  44. novelwriter/assets/icons/typicons_light/mixed_size-width.svg +6 -0
  45. novelwriter/assets/icons/typicons_light/nw_toolbar.svg +5 -0
  46. novelwriter/assets/manual.pdf +0 -0
  47. novelwriter/assets/sample.zip +0 -0
  48. novelwriter/assets/text/credits_en.htm +1 -0
  49. novelwriter/assets/themes/default_light.conf +2 -2
  50. novelwriter/common.py +101 -3
  51. novelwriter/config.py +30 -17
  52. novelwriter/constants.py +189 -81
  53. novelwriter/core/buildsettings.py +74 -40
  54. novelwriter/core/coretools.py +146 -148
  55. novelwriter/core/docbuild.py +133 -171
  56. novelwriter/core/document.py +1 -1
  57. novelwriter/core/index.py +39 -38
  58. novelwriter/core/item.py +42 -9
  59. novelwriter/core/itemmodel.py +518 -0
  60. novelwriter/core/options.py +5 -2
  61. novelwriter/core/project.py +68 -90
  62. novelwriter/core/projectdata.py +8 -2
  63. novelwriter/core/projectxml.py +1 -1
  64. novelwriter/core/sessions.py +1 -1
  65. novelwriter/core/spellcheck.py +10 -15
  66. novelwriter/core/status.py +24 -8
  67. novelwriter/core/storage.py +1 -1
  68. novelwriter/core/tree.py +269 -288
  69. novelwriter/dialogs/about.py +1 -1
  70. novelwriter/dialogs/docmerge.py +8 -18
  71. novelwriter/dialogs/docsplit.py +1 -1
  72. novelwriter/dialogs/editlabel.py +1 -1
  73. novelwriter/dialogs/preferences.py +47 -34
  74. novelwriter/dialogs/projectsettings.py +149 -99
  75. novelwriter/dialogs/quotes.py +1 -1
  76. novelwriter/dialogs/wordlist.py +11 -10
  77. novelwriter/enum.py +37 -24
  78. novelwriter/error.py +2 -2
  79. novelwriter/extensions/configlayout.py +28 -13
  80. novelwriter/extensions/eventfilters.py +1 -1
  81. novelwriter/extensions/modified.py +30 -6
  82. novelwriter/extensions/novelselector.py +4 -3
  83. novelwriter/extensions/pagedsidebar.py +9 -9
  84. novelwriter/extensions/progressbars.py +4 -4
  85. novelwriter/extensions/statusled.py +3 -3
  86. novelwriter/extensions/switch.py +3 -3
  87. novelwriter/extensions/switchbox.py +1 -1
  88. novelwriter/extensions/versioninfo.py +1 -1
  89. novelwriter/formats/shared.py +156 -0
  90. novelwriter/formats/todocx.py +1191 -0
  91. novelwriter/formats/tohtml.py +454 -0
  92. novelwriter/{core → formats}/tokenizer.py +497 -495
  93. novelwriter/formats/tomarkdown.py +218 -0
  94. novelwriter/{core → formats}/toodt.py +312 -433
  95. novelwriter/formats/toqdoc.py +486 -0
  96. novelwriter/formats/toraw.py +91 -0
  97. novelwriter/gui/doceditor.py +347 -287
  98. novelwriter/gui/dochighlight.py +97 -85
  99. novelwriter/gui/docviewer.py +90 -33
  100. novelwriter/gui/docviewerpanel.py +18 -26
  101. novelwriter/gui/editordocument.py +18 -3
  102. novelwriter/gui/itemdetails.py +27 -29
  103. novelwriter/gui/mainmenu.py +130 -64
  104. novelwriter/gui/noveltree.py +46 -48
  105. novelwriter/gui/outline.py +202 -256
  106. novelwriter/gui/projtree.py +590 -1238
  107. novelwriter/gui/search.py +11 -19
  108. novelwriter/gui/sidebar.py +8 -7
  109. novelwriter/gui/statusbar.py +20 -3
  110. novelwriter/gui/theme.py +11 -6
  111. novelwriter/guimain.py +101 -201
  112. novelwriter/shared.py +67 -28
  113. novelwriter/text/counting.py +3 -1
  114. novelwriter/text/patterns.py +169 -61
  115. novelwriter/tools/dictionaries.py +3 -3
  116. novelwriter/tools/lipsum.py +1 -1
  117. novelwriter/tools/manusbuild.py +15 -13
  118. novelwriter/tools/manuscript.py +121 -79
  119. novelwriter/tools/manussettings.py +424 -291
  120. novelwriter/tools/noveldetails.py +1 -1
  121. novelwriter/tools/welcome.py +6 -6
  122. novelwriter/tools/writingstats.py +4 -4
  123. novelwriter/types.py +25 -9
  124. novelwriter/core/tohtml.py +0 -530
  125. novelwriter/core/tomarkdown.py +0 -252
  126. novelwriter/core/toqdoc.py +0 -419
  127. {novelWriter-2.5.2.dist-info → novelWriter-2.6.dist-info}/LICENSE.md +0 -0
  128. {novelWriter-2.5.2.dist-info → novelWriter-2.6.dist-info}/entry_points.txt +0 -0
  129. {novelWriter-2.5.2.dist-info → novelWriter-2.6.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,7 @@ File History:
6
6
  Created: 2024-01-18 [2.3b1] GuiNovelDetails
7
7
 
8
8
  This file is a part of novelWriter
9
- Copyright 2018–2024, Veronica Berglyd Olsen
9
+ Copyright (C) 2024 Veronica Berglyd Olsen and novelWriter contributors
10
10
 
11
11
  This program is free software: you can redistribute it and/or modify
12
12
  it under the terms of the GNU General Public License as published by
@@ -6,7 +6,7 @@ File History:
6
6
  Created: 2023-12-14 [2.3b1] GuiWelcome
7
7
 
8
8
  This file is a part of novelWriter
9
- Copyright 2018–2024, Veronica Berglyd Olsen
9
+ Copyright (C) 2023 Veronica Berglyd Olsen and novelWriter contributors
10
10
 
11
11
  This program is free software: you can redistribute it and/or modify
12
12
  it under the terms of the GNU General Public License as published by
@@ -49,7 +49,7 @@ from novelwriter.extensions.configlayout import NWrappedWidgetBox
49
49
  from novelwriter.extensions.modified import NDialog, NIconToolButton, NSpinBox
50
50
  from novelwriter.extensions.switch import NSwitch
51
51
  from novelwriter.extensions.versioninfo import VersionInfoWidget
52
- from novelwriter.types import QtAlignLeft, QtAlignRightTop, QtSelected
52
+ from novelwriter.types import QtAlignLeft, QtAlignRightTop, QtScrollAsNeeded, QtSelected
53
53
 
54
54
  logger = logging.getLogger(__name__)
55
55
 
@@ -297,7 +297,7 @@ class _OpenProjectPage(QWidget):
297
297
  self.selectedPath.addAction(self.aMissing, QLineEdit.ActionPosition.TrailingPosition)
298
298
 
299
299
  self.keyDelete = QShortcut(self)
300
- self.keyDelete.setKey(Qt.Key.Key_Delete)
300
+ self.keyDelete.setKey("Del")
301
301
  self.keyDelete.activated.connect(self._deleteSelectedItem)
302
302
 
303
303
  # Assemble
@@ -376,7 +376,7 @@ class _OpenProjectPage(QWidget):
376
376
  action = ctxMenu.addAction(self.tr("Remove Project"))
377
377
  action.triggered.connect(self._deleteSelectedItem)
378
378
  ctxMenu.exec(self.mapToGlobal(pos))
379
- ctxMenu.deleteLater()
379
+ ctxMenu.setParent(None)
380
380
  return
381
381
 
382
382
  ##
@@ -501,8 +501,8 @@ class _NewProjectPage(QWidget):
501
501
  self.scrollArea = QScrollArea(self)
502
502
  self.scrollArea.setWidget(self.projectForm)
503
503
  self.scrollArea.setWidgetResizable(True)
504
- self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded)
505
- self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded)
504
+ self.scrollArea.setHorizontalScrollBarPolicy(QtScrollAsNeeded)
505
+ self.scrollArea.setVerticalScrollBarPolicy(QtScrollAsNeeded)
506
506
 
507
507
  self.enterForm = self.projectForm.enterForm
508
508
 
@@ -6,7 +6,7 @@ File History:
6
6
  Created: 2019-10-20 [0.3.0] GuiWritingStats
7
7
 
8
8
  This file is a part of novelWriter
9
- Copyright 2018–2024, Veronica Berglyd Olsen
9
+ Copyright (C) 2019 Veronica Berglyd Olsen and novelWriter contributors
10
10
 
11
11
  This program is free software: you can redistribute it and/or modify
12
12
  it under the terms of the GNU General Public License as published by
@@ -38,7 +38,7 @@ from PyQt5.QtWidgets import (
38
38
  )
39
39
 
40
40
  from novelwriter import CONFIG, SHARED
41
- from novelwriter.common import checkInt, checkIntTuple, formatTime, minmax
41
+ from novelwriter.common import checkInt, checkIntTuple, formatTime, minmax, qtLambda
42
42
  from novelwriter.constants import nwConst
43
43
  from novelwriter.error import formatException
44
44
  from novelwriter.extensions.modified import NToolDialog
@@ -277,11 +277,11 @@ class GuiWritingStats(NToolDialog):
277
277
  self.btnSave.setMenu(self.saveMenu)
278
278
 
279
279
  self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self)
280
- self.saveJSON.triggered.connect(lambda: self._saveData(self.FMT_JSON))
280
+ self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON))
281
281
  self.saveMenu.addAction(self.saveJSON)
282
282
 
283
283
  self.saveCSV = QAction(self.tr("CSV Data File (.csv)"), self)
284
- self.saveCSV.triggered.connect(lambda: self._saveData(self.FMT_CSV))
284
+ self.saveCSV.triggered.connect(qtLambda(self._saveData, self.FMT_CSV))
285
285
  self.saveMenu.addAction(self.saveCSV)
286
286
 
287
287
  # Assemble
novelwriter/types.py CHANGED
@@ -6,7 +6,7 @@ File History:
6
6
  Created: 2024-04-01 [2.4rc1]
7
7
 
8
8
  This file is a part of novelWriter
9
- Copyright 2018–2024, Veronica Berglyd Olsen
9
+ Copyright (C) 2024 Veronica Berglyd Olsen and novelWriter contributors
10
10
 
11
11
  This program is free software: you can redistribute it and/or modify
12
12
  it under the terms of the GNU General Public License as published by
@@ -23,9 +23,12 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
23
23
  """
24
24
  from __future__ import annotations
25
25
 
26
- from PyQt5.QtCore import QRegularExpression, Qt
27
- from PyQt5.QtGui import QColor, QFont, QPainter, QTextCharFormat, QTextCursor, QTextFormat
28
- from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QSizePolicy, QStyle
26
+ from PyQt5.QtCore import Qt
27
+ from PyQt5.QtGui import (
28
+ QColor, QFont, QPainter, QTextBlockFormat, QTextCharFormat, QTextCursor,
29
+ QTextFormat
30
+ )
31
+ from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QHeaderView, QSizePolicy, QStyle
29
32
 
30
33
  # Qt Alignment Flags
31
34
 
@@ -48,11 +51,13 @@ QtVAlignNormal = QTextCharFormat.VerticalAlignment.AlignNormal
48
51
  QtVAlignSub = QTextCharFormat.VerticalAlignment.AlignSubScript
49
52
  QtVAlignSuper = QTextCharFormat.VerticalAlignment.AlignSuperScript
50
53
 
51
- # Qt Page Break
54
+ # Qt Text Formats
52
55
 
53
56
  QtPageBreakBefore = QTextFormat.PageBreakFlag.PageBreak_AlwaysBefore
54
57
  QtPageBreakAfter = QTextFormat.PageBreakFlag.PageBreak_AlwaysAfter
55
58
 
59
+ QtPropLineHeight = QTextBlockFormat.LineHeightTypes.ProportionalHeight
60
+
56
61
  # Qt Painter Types
57
62
 
58
63
  QtTransparent = QColor(0, 0, 0, 0)
@@ -61,10 +66,14 @@ QtNoBrush = Qt.BrushStyle.NoBrush
61
66
  QtNoPen = Qt.PenStyle.NoPen
62
67
  QtRoundCap = Qt.PenCapStyle.RoundCap
63
68
  QtSolidLine = Qt.PenStyle.SolidLine
64
- QtPaintAnitAlias = QPainter.RenderHint.Antialiasing
69
+ QtPaintAntiAlias = QPainter.RenderHint.Antialiasing
65
70
  QtMouseOver = QStyle.StateFlag.State_MouseOver
66
71
  QtSelected = QStyle.StateFlag.State_Selected
67
72
 
73
+ # Qt Colour Types
74
+
75
+ QtHexRgb = QColor.NameFormat.HexRgb
76
+
68
77
  # Qt Tree and Table Types
69
78
 
70
79
  QtDecoration = Qt.ItemDataRole.DecorationRole
@@ -110,9 +119,16 @@ QtSizeIgnored = QSizePolicy.Policy.Ignored
110
119
  QtSizeMinimum = QSizePolicy.Policy.Minimum
111
120
  QtSizeMinimumExpanding = QSizePolicy.Policy.MinimumExpanding
112
121
 
113
- # Other
122
+ # Resize Mode
123
+
124
+ QtHeaderStretch = QHeaderView.ResizeMode.Stretch
125
+ QtHeaderToContents = QHeaderView.ResizeMode.ResizeToContents
126
+ QtHeaderFixed = QHeaderView.ResizeMode.Fixed
127
+
128
+ # Scroll Bar Policy
114
129
 
115
- QRegExUnicode = QRegularExpression.PatternOption.UseUnicodePropertiesOption
130
+ QtScrollAlwaysOff = Qt.ScrollBarPolicy.ScrollBarAlwaysOff
131
+ QtScrollAsNeeded = Qt.ScrollBarPolicy.ScrollBarAsNeeded
116
132
 
117
133
  # Maps
118
134
 
@@ -128,7 +144,7 @@ FONT_WEIGHTS: dict[int, int] = {
128
144
  QFont.Weight.Black: 900,
129
145
  }
130
146
 
131
- FONT_STYLE: dict[int, str] = {
147
+ FONT_STYLE: dict[QFont.Style, str] = {
132
148
  QFont.Style.StyleNormal: "normal",
133
149
  QFont.Style.StyleItalic: "italic",
134
150
  QFont.Style.StyleOblique: "oblique",