novelWriter 2.7rc1__py3-none-any.whl → 2.7.1__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 (41) hide show
  1. novelwriter/__init__.py +3 -3
  2. novelwriter/assets/i18n/nw_cs_CZ.qm +0 -0
  3. novelwriter/assets/i18n/nw_de_DE.qm +0 -0
  4. novelwriter/assets/i18n/nw_en_US.qm +0 -0
  5. novelwriter/assets/i18n/nw_es_419.qm +0 -0
  6. novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
  7. novelwriter/assets/i18n/nw_it_IT.qm +0 -0
  8. novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
  9. novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
  10. novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
  11. novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
  12. novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
  13. novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
  14. novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
  15. novelwriter/assets/i18n/project_cs_CZ.json +2 -0
  16. novelwriter/assets/i18n/project_de_DE.json +3 -1
  17. novelwriter/assets/i18n/project_en_US.json +2 -0
  18. novelwriter/assets/i18n/project_it_IT.json +2 -0
  19. novelwriter/assets/i18n/project_ja_JP.json +2 -0
  20. novelwriter/assets/i18n/project_nb_NO.json +2 -0
  21. novelwriter/assets/i18n/project_nn_NO.json +5 -0
  22. novelwriter/assets/i18n/project_pl_PL.json +2 -0
  23. novelwriter/assets/i18n/project_pt_BR.json +2 -0
  24. novelwriter/assets/i18n/project_ru_RU.json +2 -0
  25. novelwriter/assets/i18n/project_zh_CN.json +2 -0
  26. novelwriter/assets/manual.pdf +0 -0
  27. novelwriter/assets/manual_fr.pdf +0 -0
  28. novelwriter/assets/sample.zip +0 -0
  29. novelwriter/assets/text/credits_en.htm +6 -0
  30. novelwriter/constants.py +4 -0
  31. novelwriter/core/buildsettings.py +1 -1
  32. novelwriter/core/index.py +16 -10
  33. novelwriter/core/item.py +1 -1
  34. novelwriter/gui/doceditor.py +8 -7
  35. novelwriter/tools/manussettings.py +14 -7
  36. {novelwriter-2.7rc1.dist-info → novelwriter-2.7.1.dist-info}/METADATA +2 -2
  37. {novelwriter-2.7rc1.dist-info → novelwriter-2.7.1.dist-info}/RECORD +41 -41
  38. {novelwriter-2.7rc1.dist-info → novelwriter-2.7.1.dist-info}/WHEEL +1 -1
  39. {novelwriter-2.7rc1.dist-info → novelwriter-2.7.1.dist-info}/entry_points.txt +0 -0
  40. {novelwriter-2.7rc1.dist-info → novelwriter-2.7.1.dist-info}/licenses/LICENSE.md +0 -0
  41. {novelwriter-2.7rc1.dist-info → novelwriter-2.7.1.dist-info}/top_level.txt +0 -0
novelwriter/__init__.py CHANGED
@@ -49,9 +49,9 @@ __license__ = "GPLv3"
49
49
  __author__ = "Veronica Berglyd Olsen"
50
50
  __maintainer__ = "Veronica Berglyd Olsen"
51
51
  __email__ = "code@vkbo.net"
52
- __version__ = "2.7rc1"
53
- __hexversion__ = "0x020700c1"
54
- __date__ = "2025-05-19"
52
+ __version__ = "2.7.1"
53
+ __hexversion__ = "0x020701f0"
54
+ __date__ = "2025-06-09"
55
55
  __status__ = "Stable"
56
56
  __domain__ = "novelwriter.io"
57
57
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -3,6 +3,8 @@
3
3
  "Short Description": "Krátký popis",
4
4
  "Footnotes": "Poznámky pod čarou",
5
5
  "Comment": "Komentář",
6
+ "Story Structure": "Struktura příběhu",
7
+ "Note": "Poznámka",
6
8
  "Notes": "Poznámka",
7
9
  "Tag": "Štítek",
8
10
  "Point of View": "Úhel pohledu",
@@ -1,8 +1,10 @@
1
1
  {
2
- "Synopsis": "Synopsis",
2
+ "Synopsis": "Zusammenfassung",
3
3
  "Short Description": "Kurzbeschreibung",
4
4
  "Footnotes": "Fußnoten",
5
5
  "Comment": "Kommentar",
6
+ "Story Structure": "Struktur",
7
+ "Note": "Notiz",
6
8
  "Notes": "Notizen",
7
9
  "Tag": "Schlagwort",
8
10
  "Point of View": "Perspektive",
@@ -3,6 +3,8 @@
3
3
  "Short Description": "Short Description",
4
4
  "Footnotes": "Footnotes",
5
5
  "Comment": "Comment",
6
+ "Story Structure": "Story Structure",
7
+ "Note": "Note",
6
8
  "Notes": "Notes",
7
9
  "Tag": "Tag",
8
10
  "Point of View": "Point of View",
@@ -3,6 +3,8 @@
3
3
  "Short Description": "Breve descrizione",
4
4
  "Footnotes": "Note a piè pagina",
5
5
  "Comment": "Commento",
6
+ "Story Structure": "Struttura della storia",
7
+ "Note": "Nota",
6
8
  "Notes": "Note",
7
9
  "Tag": "Etichetta",
8
10
  "Point of View": "Punto di vista",
@@ -3,6 +3,8 @@
3
3
  "Short Description": "短い説明",
4
4
  "Footnotes": "脚注",
5
5
  "Comment": "コメント ",
6
+ "Story Structure": "ストーリー構造",
7
+ "Note": "ノート",
6
8
  "Notes": "ノート",
7
9
  "Tag": "タグ",
8
10
  "Point of View": "視点",
@@ -3,6 +3,8 @@
3
3
  "Short Description": "Kort beskrivelse",
4
4
  "Footnotes": "Fotnoter",
5
5
  "Comment": "Kommentar",
6
+ "Story Structure": "Tekst-element",
7
+ "Note": "Notat",
6
8
  "Notes": "Notat",
7
9
  "Tag": "Knagg",
8
10
  "Point of View": "Perspektiv",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "Synopsis": "Samandrag",
3
+ "Short Description": "Kort beskriving",
4
+ "Footnotes": "Fotnotar",
3
5
  "Comment": "Kommentar",
6
+ "Story Structure": "Tekst-element",
7
+ "Note": "Notat",
4
8
  "Notes": "Notat",
5
9
  "Tag": "Knagg",
6
10
  "Point of View": "Perspektiv",
@@ -12,6 +16,7 @@
12
16
  "Objects": "Objekt",
13
17
  "Entities": "Eining",
14
18
  "Custom": "Anna",
19
+ "New Page": "Ny side",
15
20
  "0": "null",
16
21
  "1": "ein",
17
22
  "2": "to",
@@ -3,6 +3,8 @@
3
3
  "Short Description": "Krótki opis",
4
4
  "Footnotes": "Przypisy",
5
5
  "Comment": "Komentarz",
6
+ "Story Structure": "Struktura opowieści",
7
+ "Note": "Notatka",
6
8
  "Notes": "Notatki",
7
9
  "Tag": "Znacznik",
8
10
  "Point of View": "Punkt widzenia",
@@ -3,6 +3,8 @@
3
3
  "Short Description": "Descrição breve",
4
4
  "Footnotes": "Notas de rodapé",
5
5
  "Comment": "Comentário",
6
+ "Story Structure": "Estrutura narrativa",
7
+ "Note": "Nota",
6
8
  "Notes": "Notas",
7
9
  "Tag": "Etiqueta",
8
10
  "Point of View": "Ponto de vista",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "Synopsis": "Сводка",
3
3
  "Short Description": "Краткое описание",
4
+ "Footnotes": "Примечания",
4
5
  "Comment": "Комментарий",
5
6
  "Notes": "Заметки",
6
7
  "Tag": "Тэг",
@@ -13,6 +14,7 @@
13
14
  "Objects": "Объекты",
14
15
  "Entities": "Сущности",
15
16
  "Custom": "Другое",
17
+ "New Page": "Новая страница",
16
18
  "0": "Ноль",
17
19
  "1": "Один",
18
20
  "2": "Два",
@@ -3,6 +3,8 @@
3
3
  "Short Description": "简短描述",
4
4
  "Footnotes": "注释",
5
5
  "Comment": "注释",
6
+ "Story Structure": "故事结构",
7
+ "Note": "笔记",
6
8
  "Notes": "笔记",
7
9
  "Tag": "标签",
8
10
  "Point of View": "视角",
Binary file
Binary file
Binary file
@@ -47,6 +47,12 @@ translators for the languages currently available:</p>
47
47
  <li><b>Portuguese:</b> Oli Maia (olimaia)</li>
48
48
  </ul>
49
49
 
50
+ <p>Translations of the documentation:</p>
51
+
52
+ <ul>
53
+ <li><b>French:</b> Jean-Michel Heras (Karduin)</li>
54
+ </ul>
55
+
50
56
  <p>Translations are managed on <a href="https://crowdin.com/project/novelwriter">Crowdin</a>, and
51
57
  more contributions are listed on the project's Members page.</p>
52
58
 
novelwriter/constants.py CHANGED
@@ -184,6 +184,10 @@ class nwKeyWords:
184
184
  POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY,
185
185
  OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY,
186
186
  ]
187
+ CAN_LOOKUP: Final[list[str]] = [
188
+ POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY,
189
+ OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY, STORY_KEY, MENTION_KEY,
190
+ ]
187
191
 
188
192
  # Set of Valid Keys
189
193
  VALID_KEYS: Final[set[str]] = set(ALL_KEYS)
@@ -390,7 +390,7 @@ class BuildSettings:
390
390
  def setValue(self, key: str, value: T_BuildValue) -> None:
391
391
  """Set a specific value for a build setting."""
392
392
  if (d := SETTINGS_TEMPLATE.get(key)) and len(d) == 2 and isinstance(value, d[0]):
393
- self._changed = value != self._settings[key]
393
+ self._changed |= (value != self._settings[key])
394
394
  self._settings[key] = value
395
395
  return
396
396
 
novelwriter/core/index.py CHANGED
@@ -131,12 +131,6 @@ class Index:
131
131
  self._novelExtra = extra
132
132
  return
133
133
 
134
- def setItemClass(self, tHandle: str, itemClass: nwItemClass) -> None:
135
- """Update the class for all tags of a handle."""
136
- logger.info("Updating class for '%s'", tHandle)
137
- self._tagsIndex.updateClass(tHandle, itemClass.name)
138
- return
139
-
140
134
  ##
141
135
  # Public Methods
142
136
  ##
@@ -183,6 +177,16 @@ class Index:
183
177
  self.scanText(tHandle, self._project.storage.getDocumentText(tHandle))
184
178
  return
185
179
 
180
+ def refreshHandle(self, tHandle: str) -> None:
181
+ """Update the class for all tags of a handle."""
182
+ if item := self._project.tree[tHandle]:
183
+ logger.info("Updating class for '%s'", tHandle)
184
+ if item.isInactiveClass():
185
+ self.deleteHandle(tHandle)
186
+ else:
187
+ self._tagsIndex.updateClass(tHandle, item.itemClass.name)
188
+ return
189
+
186
190
  def indexChangedSince(self, checkTime: int | float) -> bool:
187
191
  """Check if the index has changed since a given time."""
188
192
  return self._indexChange > float(checkTime)
@@ -753,10 +757,12 @@ class Index:
753
757
  """Return all tags used by a specific document."""
754
758
  return self._itemIndex.allItemTags(tHandle) if tHandle else []
755
759
 
756
- def getClassTags(self, itemClass: nwItemClass | None) -> list[str]:
757
- """Return all tags based on itemClass."""
758
- name = None if itemClass is None else itemClass.name
759
- return self._tagsIndex.filterTagNames(name)
760
+ def getKeyWordTags(self, keyWord: str) -> list[str]:
761
+ """Return all tags usable for a specific keyword."""
762
+ if keyWord in nwKeyWords.CAN_LOOKUP:
763
+ itemClass = nwKeyWords.KEY_CLASS.get(keyWord)
764
+ return self._tagsIndex.filterTagNames(itemClass.name if itemClass else None)
765
+ return []
760
766
 
761
767
  def getTagsData(
762
768
  self, activeOnly: bool = True
novelwriter/core/item.py CHANGED
@@ -439,7 +439,7 @@ class NWItem:
439
439
  self.setClass(itemClass)
440
440
  if self._type == nwItemType.FILE:
441
441
  # Notify the index of the class change
442
- self._project.index.setItemClass(self._handle, itemClass)
442
+ self._project.index.refreshHandle(self._handle)
443
443
 
444
444
  if self._layout == nwItemLayout.NO_LAYOUT:
445
445
  # If no layout is set, pick one
@@ -1090,11 +1090,14 @@ class GuiDocEditor(QPlainTextEdit):
1090
1090
  show = self._completer.updateMetaText(text, bPos)
1091
1091
  else:
1092
1092
  show = self._completer.updateCommentText(text, bPos)
1093
- point = self.cursorRect().bottomRight()
1094
- self._completer.move(viewport.mapToGlobal(point))
1095
- self._completer.setVisible(show)
1093
+ if show:
1094
+ point = self.cursorRect().bottomRight()
1095
+ self._completer.move(viewport.mapToGlobal(point))
1096
+ self._completer.show()
1097
+ else:
1098
+ self._completer.close()
1096
1099
  else:
1097
- self._completer.setVisible(False)
1100
+ self._completer.close()
1098
1101
 
1099
1102
  if self._doReplace and added == 1:
1100
1103
  cursor = self.textCursor()
@@ -2113,9 +2116,7 @@ class CommandCompleter(QMenu):
2113
2116
  length = len(lookup)
2114
2117
  suffix = ""
2115
2118
  options = sorted(filter(
2116
- lambda x: lookup in x.lower(), SHARED.project.index.getClassTags(
2117
- nwKeyWords.KEY_CLASS.get(kw.strip())
2118
- )
2119
+ lambda x: lookup in x.lower(), SHARED.project.index.getKeyWordTags(kw.strip())
2119
2120
  ))[:15]
2120
2121
 
2121
2122
  if not options:
@@ -80,7 +80,8 @@ class GuiBuildSettings(NToolDialog):
80
80
  logger.debug("Create: GuiBuildSettings")
81
81
  self.setObjectName("GuiBuildSettings")
82
82
 
83
- self._build = build
83
+ # Make a copy of the build object
84
+ self._build = BuildSettings.fromDict(build.pack())
84
85
 
85
86
  self.setWindowTitle(self.tr("Manuscript Build Settings"))
86
87
  self.setMinimumSize(700, 400)
@@ -184,6 +185,7 @@ class GuiBuildSettings(NToolDialog):
184
185
  settings.
185
186
  """
186
187
  logger.debug("Closing: GuiBuildSettings")
188
+ self._applyChanges()
187
189
  self._askToSaveBuild()
188
190
  self._saveSettings()
189
191
  event.accept()
@@ -211,11 +213,14 @@ class GuiBuildSettings(NToolDialog):
211
213
  """Handle button clicks from the dialog button box."""
212
214
  role = self.buttonBox.buttonRole(button)
213
215
  if role == QtRoleApply:
216
+ self._applyChanges()
214
217
  self._emitBuildData()
215
218
  elif role == QtRoleAccept:
219
+ self._applyChanges()
216
220
  self._emitBuildData()
217
221
  self.close()
218
222
  elif role == QtRoleReject:
223
+ self._build.resetChangedState()
219
224
  self.close()
220
225
  return
221
226
 
@@ -228,10 +233,9 @@ class GuiBuildSettings(NToolDialog):
228
233
  whether the user wants to save them.
229
234
  """
230
235
  if self._build.changed:
231
- response = SHARED.question(self.tr(
236
+ if SHARED.question(self.tr(
232
237
  "Do you want to save your changes to '{0}'?"
233
- ).format(self._build.name))
234
- if response:
238
+ ).format(self._build.name)):
235
239
  self._emitBuildData()
236
240
  self._build.resetChangedState()
237
241
  return
@@ -246,14 +250,17 @@ class GuiBuildSettings(NToolDialog):
246
250
  pOptions.setValue("GuiBuildSettings", "treeWidth", treeWidth)
247
251
  pOptions.setValue("GuiBuildSettings", "filterWidth", filterWidth)
248
252
  pOptions.saveSettings()
249
-
250
253
  return
251
254
 
252
- def _emitBuildData(self) -> None:
253
- """Assemble the build data and emit the signal."""
255
+ def _applyChanges(self) -> None:
256
+ """Apply all settings changes to the build object."""
254
257
  self._build.setName(self.editBuildName.text())
255
258
  self.optTabHeadings.saveContent()
256
259
  self.optTabFormatting.saveContent()
260
+ return
261
+
262
+ def _emitBuildData(self) -> None:
263
+ """Assemble the build data and emit the signal."""
257
264
  self.newSettingsReady.emit(self._build)
258
265
  self._build.resetChangedState()
259
266
  return
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: novelWriter
3
- Version: 2.7rc1
4
- Summary: A markdown-like text editor for planning and writing novels
3
+ Version: 2.7.1
4
+ Summary: A plain 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
7
7
  Project-URL: Homepage, https://novelwriter.io
@@ -1,44 +1,44 @@
1
- novelwriter/__init__.py,sha256=iWZXwrT1Rsgvh5CW08kt_PNdtUZFu0JRU4o6gX0SFZ4,9567
1
+ novelwriter/__init__.py,sha256=lmuWrq3jOV3xyQVDMcdyl0KpIKi_wR-DO1wTl2lVoWQ,9566
2
2
  novelwriter/common.py,sha256=Z2n4CNZMotBYNNOqGPzXFfyAALh5eHtV3VtSyJaeBIU,22135
3
3
  novelwriter/config.py,sha256=frdBJFPhR3tCUkc2dPmk930En0rANy1Om94IWHJtj-M,44665
4
- novelwriter/constants.py,sha256=yDXImT9FTlMWi-sHCAp-UqILus4Ppg7o776ooudWGG0,28661
4
+ novelwriter/constants.py,sha256=6gR92ZBcK9J0PUWYaTLlQOaLDo-4Sx3mkbjuiiRT21U,28841
5
5
  novelwriter/enum.py,sha256=_T1Un3H1SmpfHUw1CEPZuXSKJNT6RQWeN6N5p8yBx8E,3724
6
6
  novelwriter/error.py,sha256=HPKDJb0NPTyVRsrPNG_I1-XfLXlvYAJuE2Xi7maWvXM,6828
7
7
  novelwriter/guimain.py,sha256=luIw3434s92wEuU4gKkerp0MQGtD_hDlCVY6ioZu0LQ,50293
8
8
  novelwriter/shared.py,sha256=8JTkFi7QXmQddGNVaSBIvKPfDXLaJ9XWNmUJblpfXvs,17795
9
9
  novelwriter/splash.py,sha256=rK71vO7NG2NETTf1vvQiWRHfkHonf2Z0xhLj_LF_wj8,2237
10
10
  novelwriter/types.py,sha256=wehbzAD13D2Ky4fqH3z7jK82uS4dNr19mH94AuLoIOA,5111
11
- novelwriter/assets/manual.pdf,sha256=7VY7ZjdQlnlQWMXMZ7KgFOnCBWYJYYYICjdOhunGY30,2746841
12
- novelwriter/assets/manual_fr.pdf,sha256=jofwAfwbxOty1DYByCqfwQfwdK9EOBC6qMfwSOHNMfg,2789961
13
- novelwriter/assets/sample.zip,sha256=Q04XSfHUdpH_OEkUIPXg4_Ckkkxb5Q74Ab8rguEgOBY,13970
14
- novelwriter/assets/i18n/nw_cs_CZ.qm,sha256=wqS376aERqXduw3lc7FFhcWapwcn9NYdTICkZYoDI1w,97499
15
- novelwriter/assets/i18n/nw_de_DE.qm,sha256=xKyyeNEd02EquAF7KSiHr4GUccfagD74O_gipoQK1Io,102467
16
- novelwriter/assets/i18n/nw_en_US.qm,sha256=fRG9Tg0a9IwsinP1wU162P_Y7mNl-grTKKx3TzKndSI,95213
17
- novelwriter/assets/i18n/nw_es_419.qm,sha256=enE-iIGb_7DypKUXj9o4vddauaR6NO5KO9aAoh9GsEI,105334
18
- novelwriter/assets/i18n/nw_fr_FR.qm,sha256=nIuseguPyp-BW-2QaxZTgTEAq82epUZyAsCpm3Vl0Wg,105307
19
- novelwriter/assets/i18n/nw_it_IT.qm,sha256=eQKNQVvvwO_ja95sSXvZMkAv2TCxBIDYsMcT3k3KeC4,105449
20
- novelwriter/assets/i18n/nw_ja_JP.qm,sha256=fMTV1RI_GhpStiX8RlkCIsyawz6tfcSfrFzuHzS-zpU,78818
21
- novelwriter/assets/i18n/nw_nb_NO.qm,sha256=HIwt18aTorGzdk0j98XJtr652Hd3mCPZi8Ee771-vZw,97781
22
- novelwriter/assets/i18n/nw_nl_NL.qm,sha256=igF8xjFTb4BBnyFThnLCqmk_KQLP3KcDWdUvjfwdBD8,96665
23
- novelwriter/assets/i18n/nw_pl_PL.qm,sha256=etp4w60penSQTTsUavoWFcz1G8vtrV4RPAHTWloCrEg,100719
24
- novelwriter/assets/i18n/nw_pt_BR.qm,sha256=LKeE4hvMlGRk0VIhuIuOkWcOy0SRf0fgQRbhuLQ0dgk,103757
25
- novelwriter/assets/i18n/nw_ru_RU.qm,sha256=T44JdPKRuI27Az7ZjVznT-O4pR941-iVlV6agR-ydcI,94800
26
- novelwriter/assets/i18n/nw_zh_CN.qm,sha256=_MbLHUgM3jBnDBU_fsB3vQlAw8YeWQKpidgJ5p-jiIo,70468
27
- novelwriter/assets/i18n/project_cs_CZ.json,sha256=0A71su1wmPrGD1DD3FruFqnoWQqo4XaggWp5NJKT9lc,2861
28
- novelwriter/assets/i18n/project_de_DE.json,sha256=-9-FF2zYD9ulez9dXAKLbFWsbEX2KLXKE1cJS8csx1g,2866
11
+ novelwriter/assets/manual.pdf,sha256=BC_HyDpgwxdJmf3NLiH_idMr_2HQt3_6TcjhEc8Akgg,2126838
12
+ novelwriter/assets/manual_fr.pdf,sha256=cBD_5Z9TWVgq_bpF8iZ2yW_da4h1CYzKMhdwSJ-1ByE,2184930
13
+ novelwriter/assets/sample.zip,sha256=zYJMNdjw3d876Sk4nrODAXKbkVUfUR-NMV7nvHYH824,13977
14
+ novelwriter/assets/i18n/nw_cs_CZ.qm,sha256=EHgCgH3OY_NM1zEnLy3wO7kxARpWk7daTALcBtzuEKw,100334
15
+ novelwriter/assets/i18n/nw_de_DE.qm,sha256=VwyhNBVst94jlAsdsyUbzj4_ucGX6QLp16wve2jlCjg,105152
16
+ novelwriter/assets/i18n/nw_en_US.qm,sha256=rK_f6bhwlzqLygB9xfQr9mPLDZAPmutYHr3vie-Kf5k,98000
17
+ novelwriter/assets/i18n/nw_es_419.qm,sha256=ETykfMUyedjTaRBu-kX6PgGRV79fxjB8cHOzs0rBFeo,104187
18
+ novelwriter/assets/i18n/nw_fr_FR.qm,sha256=7AZLfs_H5gcvqd_gxDE9HjhjVj5Z5TRc-Wsd0lqCFUI,104606
19
+ novelwriter/assets/i18n/nw_it_IT.qm,sha256=TyNTA_U81F5tpk5O7gh9h5mNiFabcjRSEn2pwwi2cIk,108494
20
+ novelwriter/assets/i18n/nw_ja_JP.qm,sha256=rVNa0PlV82Io2MNsYNSf7zta_GfkDK-6gewxr9IFb68,81033
21
+ novelwriter/assets/i18n/nw_nb_NO.qm,sha256=r59Uxw2Tf5n3ZEiBjft4GOCVTgP6_4uusxkmbTBw8-4,100556
22
+ novelwriter/assets/i18n/nw_nl_NL.qm,sha256=kPI2f137gK8qc0boB_geGzN0-ApHr9z3RabUoVM_SOc,95706
23
+ novelwriter/assets/i18n/nw_pl_PL.qm,sha256=mK1B4Yr-H-WSPNccVwCYlcBsGHGOhaYWtPdm--P5nP0,103590
24
+ novelwriter/assets/i18n/nw_pt_BR.qm,sha256=EeJWctUfqbvPgvO_HJQTEB3LaIhCpTM3RKSnCHsly9I,106744
25
+ novelwriter/assets/i18n/nw_ru_RU.qm,sha256=rNKPtUFdeEsYnCiT8qtDWWwG6BrHy1Q_VVzL6ZH0cbo,93879
26
+ novelwriter/assets/i18n/nw_zh_CN.qm,sha256=lYUTXvHrsbLSYw8iI2uevDe9IL0TDkyOATfgvd5f6yw,73077
27
+ novelwriter/assets/i18n/project_cs_CZ.json,sha256=O6UaWMrmmqq1eE7eACWu4lKZPNtmyeXX5tw99PkPWIY,2929
28
+ novelwriter/assets/i18n/project_de_DE.json,sha256=flm9XAftVXNHddhcJEm1MhpsK7yWmnOmh6H12Byk6GA,2925
29
29
  novelwriter/assets/i18n/project_en_GB.json,sha256=sioYhKDpqyuqgSwoyt4CVu6eUNS3ZB_Pr9z7_ufHoPo,2595
30
- novelwriter/assets/i18n/project_en_US.json,sha256=CvBOO8kaW0k7NlwvxFi62Br9HYKJKQLDk1nQfvXOj48,2537
30
+ novelwriter/assets/i18n/project_en_US.json,sha256=sioYhKDpqyuqgSwoyt4CVu6eUNS3ZB_Pr9z7_ufHoPo,2595
31
31
  novelwriter/assets/i18n/project_es_419.json,sha256=NQa1iAyQaoNyFSAfrPXNaoKyStyw7nexnGUHf-UMkOo,2792
32
32
  novelwriter/assets/i18n/project_fr_FR.json,sha256=6ATiNU0YGEXwx_c2LpDvP7eCUDdUiGxtrssCVTiiyC8,2859
33
- novelwriter/assets/i18n/project_it_IT.json,sha256=LHbGZT6MOHOmIKrl6HD1-Tl_RxKbeEL0eXqPVK0VwM8,2633
34
- novelwriter/assets/i18n/project_ja_JP.json,sha256=CK8yvTAr_58mDMSU-XAXYk3ny9Iryp21EZ80dGJ60E8,2451
35
- novelwriter/assets/i18n/project_nb_NO.json,sha256=CS4nU-8AnnmQLiET5wAsFa4F7UHimjCTbxzmtGugw0A,2350
33
+ novelwriter/assets/i18n/project_it_IT.json,sha256=NYUUVp3o-hmahj4oyif8bxVauUMzL8w-XvuR0oGR9ic,2698
34
+ novelwriter/assets/i18n/project_ja_JP.json,sha256=96kVDrvqBQsv_IzTDnoK-IGYZ9jHNXJ15YYhSwaOyFE,2520
35
+ novelwriter/assets/i18n/project_nb_NO.json,sha256=ZaoUbHtPnM30zPfdwPBxProWkR8EP4QykVA1nfrR4_c,2407
36
36
  novelwriter/assets/i18n/project_nl_NL.json,sha256=wlXDfy4rMKyXP0X3r22qSNFuseO33bePAHqvIVk_tHQ,2742
37
- novelwriter/assets/i18n/project_nn_NO.json,sha256=7ZfmtFWHcDMiLVqdOEDHQWHbpoC_bv5ESmf_-CoYiks,2250
38
- novelwriter/assets/i18n/project_pl_PL.json,sha256=2mAchml-aT95ZT9qi3pAEMyyze5swkRa-OCWq6ZMoGk,3517
39
- novelwriter/assets/i18n/project_pt_BR.json,sha256=lCtbr_i2gN3Atii1EgMn-B5SMP71_x4YsF7wXx7Hi7s,2828
40
- novelwriter/assets/i18n/project_ru_RU.json,sha256=Lq8msxzjhkFHXPJAmEEyjoFOUV28CLJXmayY3h3jiAo,4075
41
- novelwriter/assets/i18n/project_zh_CN.json,sha256=CGnJO6ElV40fm7yElNtDwHYsd_32d-cR7h1jG4xx4eY,2377
37
+ novelwriter/assets/i18n/project_nn_NO.json,sha256=Nn_p7Fb0ASKHAZ3l8I0UJuS4GmG6MFInP68RD4han24,2401
38
+ novelwriter/assets/i18n/project_pl_PL.json,sha256=-yWlx1zDYRKhMxMIe-59ixqUeIimQTGFAoq8qe4TiaM,3583
39
+ novelwriter/assets/i18n/project_pt_BR.json,sha256=jZ4PJt2wbLmjNZshAJtiVRlWMQfXHcQTCXxqFVwCTDg,2890
40
+ novelwriter/assets/i18n/project_ru_RU.json,sha256=6Q0H7_cDuobK05N7q8we3VnxXhGqjuG-ulIUESU0lJA,4159
41
+ novelwriter/assets/i18n/project_zh_CN.json,sha256=rvvwclPNI2dMd64kUb7hr7zlkT-kNZ0Bbk7XMHpIcAI,2434
42
42
  novelwriter/assets/icons/font_awesome.icons,sha256=xe54nRX90DbcA2DGTYUEPagbGgrLQlusuJa0TvBmUbg,50737
43
43
  novelwriter/assets/icons/material_filled_bold.icons,sha256=RBlkfnJ46uVq3HZbj7Wdfktc8wSexktao1E_H2puKH8,83050
44
44
  novelwriter/assets/icons/material_filled_normal.icons,sha256=CTsuQKjph62heUboAIqin5LGZogFWbQ7gW--rvZDz_I,52676
@@ -75,7 +75,7 @@ novelwriter/assets/syntax/tomorrow_night.conf,sha256=mWPneIV_6tszLEK4-Eo-kcJmUbr
75
75
  novelwriter/assets/syntax/tomorrow_night_blue.conf,sha256=L42gcekFfNpCCB45m9Lhzmz8Y6Lvbpik3AADi_1Aao8,1549
76
76
  novelwriter/assets/syntax/tomorrow_night_bright.conf,sha256=h8_775Ed8hl2XhfCoxAY2kT43vi-UvG8UHik1aI4eRw,1554
77
77
  novelwriter/assets/syntax/tomorrow_night_eighties.conf,sha256=stO_xH5RzMN0jaZeYr53LVXbpqSmIXALBFGVLlJBDLA,1557
78
- novelwriter/assets/text/credits_en.htm,sha256=NkC68OmhTCGItDWUMhzUcPQ2O03CiIA5LZX0hBRx0YI,3010
78
+ novelwriter/assets/text/credits_en.htm,sha256=MIDbAovnNUt-prTImuC5mDnVTqUknwPtj43tqFL9gPQ,3119
79
79
  novelwriter/assets/text/lipsum.txt,sha256=sGA6AC_p4jrUifxLxy3cSODeRwkpBNXDPGgX6YRTm2s,62937
80
80
  novelwriter/assets/themes/cyberpunk_night.conf,sha256=UT4tm03jBc-JRDrUKb6aLBJVF2JkQl-fha4_iHGpAs4,1331
81
81
  novelwriter/assets/themes/default.conf,sha256=K0LZ64lODpCtUg3pISTAP4UKvEYMvPkmIYN9RDEaWwk,72
@@ -85,13 +85,13 @@ novelwriter/assets/themes/dracula.conf,sha256=c0yNTVaI2vTQIyS1BL6XqJjsnRX0N1sMfa
85
85
  novelwriter/assets/themes/snazzy.conf,sha256=-Qg6-6UxTXyq6pyFCFGNSeGQEVb2pjX9hErCgB58DuE,1381
86
86
  novelwriter/assets/themes/solarized_dark.conf,sha256=17Ylx-hA4zS92MWgWxiTqchUCYVCMvqIwNEiSOJEc-0,1325
87
87
  novelwriter/assets/themes/solarized_light.conf,sha256=zb9M41VnPjR0nx6ZP-YcY-cb-TgS_oIHlok-L3HfJek,1326
88
- novelwriter/core/buildsettings.py,sha256=Tbt5yhY1ijjsD_UIhauJYlNDmX9m6Y22LqztwRUUf8M,25042
88
+ novelwriter/core/buildsettings.py,sha256=9dqXlV6oVYe2UmqSrx54PFqvRYcjOJmJEIaFmqjvaFs,25045
89
89
  novelwriter/core/coretools.py,sha256=u82B7foOTbkoRXDVshL_Htlup6svTQU6eiIWeJsfsEA,21515
90
90
  novelwriter/core/docbuild.py,sha256=D7YF2aGhpDZ1gGkL8mzXxH1SSilfhoZDy9PVCGZf6s0,14173
91
91
  novelwriter/core/document.py,sha256=AA6Fhwi9Q-UtAFYXjMUXSU-cQF2jogScqPJ5sNaRbEI,12139
92
- novelwriter/core/index.py,sha256=lDmRyy-Kjb4gSjaYFj5vAzI40oMQr_xCAtb4XLmOVBQ,40964
92
+ novelwriter/core/index.py,sha256=HvYuUA6SAUlce0LygsQ9cP6csRk5rEsZLpZ5JAzSZdc,41199
93
93
  novelwriter/core/indexdata.py,sha256=ywfbKZEzK2cKWXepM2M8YoAr-G2qSF9L_GV4GIvQB5s,13177
94
- novelwriter/core/item.py,sha256=-2HQAjjl9fYvgGWp2B5fDeuVb6ZbdU8Tb4QPPUS6Iak,19687
94
+ novelwriter/core/item.py,sha256=4fu4bKIqqCmQamyQnY0LUCO8p0qg371xIQbrVZrxCPU,19677
95
95
  novelwriter/core/itemmodel.py,sha256=wVRUjT_0FGEAzkZFNo4fgCMR4hlQfny2og3gPE3kd8Q,18472
96
96
  novelwriter/core/novelmodel.py,sha256=lAtxerg-BuRydJTqwNggPFoYamTrJc4Z-GVXwq_2zwo,7414
97
97
  novelwriter/core/options.py,sha256=CTHf2RclRBiZM9No-fZ2x6XyJ1oRPvEoPuujQR8wE0I,7462
@@ -129,7 +129,7 @@ novelwriter/formats/tomarkdown.py,sha256=CN9mJRwqoit1c9rOHwsqBZEpPjEWYvh81IVgttU
129
129
  novelwriter/formats/toodt.py,sha256=LuzN8vE46mclcfpOs9QZcElXDVOx14wjyKPkOQE6KYQ,58672
130
130
  novelwriter/formats/toqdoc.py,sha256=-drPu62rVw_velHTkEEToKiM6-B8PvozX4PPnlDuu_k,18159
131
131
  novelwriter/formats/toraw.py,sha256=6qLNvDc87t6c25j1H2IL9whajp1u-SOnHFk9c4gV_7E,2903
132
- novelwriter/gui/doceditor.py,sha256=w9MjT-puO9Yc-EMYZ0yr5QTTqj4hgwAzcjWcyZFi10A,117508
132
+ novelwriter/gui/doceditor.py,sha256=yTi2w289ONN-0YJBUFSPXZXMl2tENo78u0X3HoxCAnA,117541
133
133
  novelwriter/gui/dochighlight.py,sha256=DDCEK9iKUBd5miScrJCj9NlRj3sdOgD_bY8_4ARsSMg,19576
134
134
  novelwriter/gui/docviewer.py,sha256=5xRmA0Fng7c5Y0hnwHFKzlvLdgoKkg3JxDajylkPW5I,34438
135
135
  novelwriter/gui/docviewerpanel.py,sha256=m5e9hO5dgV729RnOEJzNzCOU2CB3vPzp4TB4HKgTjGA,19361
@@ -150,13 +150,13 @@ novelwriter/tools/dictionaries.py,sha256=ItM080yCoB5lgcovwUU1AO6usDFBRQpcV1UG0KG
150
150
  novelwriter/tools/lipsum.py,sha256=tYSKrrtqCFlpCzXizgiVcG75Zud1hRhoPwtFpKPLL-0,4842
151
151
  novelwriter/tools/manusbuild.py,sha256=FcM36eukyaWTI7G5Yb5bOShoZhoqSHCvJtmmhYng4Eo,13814
152
152
  novelwriter/tools/manuscript.py,sha256=j9uWJkvMSV8UuSG6gnwflby9GFFaODiqcA7B9EUrxaI,39559
153
- novelwriter/tools/manussettings.py,sha256=B0uMnWEdKG687vB4DTLMmeyorcDmcpSyygUJSbmzxmY,62154
153
+ novelwriter/tools/manussettings.py,sha256=Fi1WXCc0LYt4ryR4ae0HAy2Goqzi4WNH0cGxJZ8yPYs,62448
154
154
  novelwriter/tools/noveldetails.py,sha256=4BVi3Pc6HNJlYcYnyHKiIuR23uKZ9elNZOcJJOoLlAw,18067
155
155
  novelwriter/tools/welcome.py,sha256=f657EWmQxe3l2sRL3Wq1A9R5mnFciivAF5TDbsUlsRc,27431
156
156
  novelwriter/tools/writingstats.py,sha256=3U4dUlaeNR16E_Kxo5am8ov3ICH0j6S48FLJ-IptHDI,23161
157
- novelwriter-2.7rc1.dist-info/licenses/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
158
- novelwriter-2.7rc1.dist-info/METADATA,sha256=dYfersTN4Deo4Z9Lxx9btCzcEfIPCU6C5V3S0Go5OSw,2555
159
- novelwriter-2.7rc1.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
160
- novelwriter-2.7rc1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
161
- novelwriter-2.7rc1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
162
- novelwriter-2.7rc1.dist-info/RECORD,,
157
+ novelwriter-2.7.1.dist-info/licenses/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
158
+ novelwriter-2.7.1.dist-info/METADATA,sha256=gPrsEAXN17MdQEGn8DMPRfTGRlTLdzNpBZC6MUBuLHA,2546
159
+ novelwriter-2.7.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
160
+ novelwriter-2.7.1.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
161
+ novelwriter-2.7.1.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
162
+ novelwriter-2.7.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.7.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5