novelWriter 2.6.3__py3-none-any.whl → 2.7__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 (348) hide show
  1. novelwriter/__init__.py +98 -75
  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_de_DE.json +3 -1
  16. novelwriter/assets/i18n/project_en_GB.json +2 -0
  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/icons/font_awesome.icons +109 -0
  27. novelwriter/assets/icons/material_filled_bold.icons +109 -0
  28. novelwriter/assets/icons/material_filled_normal.icons +109 -0
  29. novelwriter/assets/icons/material_filled_thin.icons +109 -0
  30. novelwriter/assets/icons/material_rounded_bold.icons +109 -0
  31. novelwriter/assets/icons/material_rounded_normal.icons +109 -0
  32. novelwriter/assets/icons/material_rounded_thin.icons +109 -0
  33. novelwriter/assets/icons/remix_filled.icons +109 -0
  34. novelwriter/assets/icons/remix_outline.icons +109 -0
  35. novelwriter/assets/images/splash.png +0 -0
  36. novelwriter/assets/manual.pdf +0 -0
  37. novelwriter/assets/{manual_fr_FR.pdf → manual_fr.pdf} +0 -0
  38. novelwriter/assets/sample.zip +0 -0
  39. novelwriter/assets/syntax/cyberpunk_night.conf +1 -1
  40. novelwriter/assets/syntax/snazzy.conf +3 -3
  41. novelwriter/assets/text/credits_en.htm +12 -6
  42. novelwriter/assets/themes/cyberpunk_night.conf +23 -7
  43. novelwriter/assets/themes/default_dark.conf +20 -4
  44. novelwriter/assets/themes/default_light.conf +21 -5
  45. novelwriter/assets/themes/dracula.conf +20 -4
  46. novelwriter/assets/themes/snazzy.conf +48 -0
  47. novelwriter/assets/themes/solarized_dark.conf +24 -8
  48. novelwriter/assets/themes/solarized_light.conf +22 -6
  49. novelwriter/common.py +43 -27
  50. novelwriter/config.py +201 -139
  51. novelwriter/constants.py +67 -36
  52. novelwriter/core/buildsettings.py +26 -17
  53. novelwriter/core/coretools.py +52 -41
  54. novelwriter/core/docbuild.py +20 -13
  55. novelwriter/core/document.py +2 -2
  56. novelwriter/core/index.py +166 -432
  57. novelwriter/core/indexdata.py +406 -0
  58. novelwriter/core/item.py +50 -32
  59. novelwriter/core/itemmodel.py +43 -38
  60. novelwriter/core/novelmodel.py +225 -0
  61. novelwriter/core/options.py +1 -1
  62. novelwriter/core/project.py +24 -25
  63. novelwriter/core/projectdata.py +47 -29
  64. novelwriter/core/projectxml.py +18 -8
  65. novelwriter/core/sessions.py +32 -15
  66. novelwriter/core/spellcheck.py +4 -3
  67. novelwriter/core/status.py +12 -15
  68. novelwriter/core/storage.py +1 -1
  69. novelwriter/core/tree.py +55 -13
  70. novelwriter/dialogs/about.py +19 -22
  71. novelwriter/dialogs/docmerge.py +23 -24
  72. novelwriter/dialogs/docsplit.py +26 -26
  73. novelwriter/dialogs/editlabel.py +19 -20
  74. novelwriter/dialogs/preferences.py +143 -69
  75. novelwriter/dialogs/projectsettings.py +51 -54
  76. novelwriter/dialogs/quotes.py +14 -19
  77. novelwriter/dialogs/wordlist.py +25 -30
  78. novelwriter/enum.py +8 -0
  79. novelwriter/error.py +16 -16
  80. novelwriter/extensions/configlayout.py +24 -20
  81. novelwriter/extensions/eventfilters.py +9 -5
  82. novelwriter/extensions/modified.py +34 -15
  83. novelwriter/extensions/novelselector.py +18 -5
  84. novelwriter/extensions/pagedsidebar.py +39 -49
  85. novelwriter/extensions/progressbars.py +10 -8
  86. novelwriter/extensions/statusled.py +6 -13
  87. novelwriter/extensions/switch.py +31 -41
  88. novelwriter/extensions/switchbox.py +8 -3
  89. novelwriter/extensions/versioninfo.py +4 -4
  90. novelwriter/formats/shared.py +1 -1
  91. novelwriter/formats/todocx.py +14 -10
  92. novelwriter/formats/tohtml.py +7 -5
  93. novelwriter/formats/tokenizer.py +37 -33
  94. novelwriter/formats/tomarkdown.py +6 -2
  95. novelwriter/formats/toodt.py +27 -22
  96. novelwriter/formats/toqdoc.py +19 -14
  97. novelwriter/formats/toraw.py +6 -2
  98. novelwriter/gui/doceditor.py +314 -305
  99. novelwriter/gui/dochighlight.py +46 -45
  100. novelwriter/gui/docviewer.py +102 -104
  101. novelwriter/gui/docviewerpanel.py +47 -51
  102. novelwriter/gui/editordocument.py +8 -5
  103. novelwriter/gui/itemdetails.py +11 -14
  104. novelwriter/gui/mainmenu.py +146 -145
  105. novelwriter/gui/noveltree.py +246 -406
  106. novelwriter/gui/outline.py +141 -72
  107. novelwriter/gui/projtree.py +139 -132
  108. novelwriter/gui/search.py +34 -31
  109. novelwriter/gui/sidebar.py +13 -18
  110. novelwriter/gui/statusbar.py +27 -21
  111. novelwriter/gui/theme.py +554 -436
  112. novelwriter/guimain.py +56 -38
  113. novelwriter/shared.py +32 -23
  114. novelwriter/splash.py +74 -0
  115. novelwriter/text/comments.py +70 -0
  116. novelwriter/text/patterns.py +4 -4
  117. novelwriter/tools/dictionaries.py +20 -29
  118. novelwriter/tools/lipsum.py +18 -18
  119. novelwriter/tools/manusbuild.py +39 -42
  120. novelwriter/tools/manuscript.py +102 -115
  121. novelwriter/tools/manussettings.py +129 -102
  122. novelwriter/tools/noveldetails.py +60 -72
  123. novelwriter/tools/welcome.py +57 -75
  124. novelwriter/tools/writingstats.py +112 -102
  125. novelwriter/types.py +5 -7
  126. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/METADATA +6 -6
  127. novelwriter-2.7.dist-info/RECORD +162 -0
  128. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/WHEEL +1 -1
  129. novelWriter-2.6.3.dist-info/RECORD +0 -363
  130. novelwriter/assets/icons/typicons_dark/README.md +0 -29
  131. novelwriter/assets/icons/typicons_dark/icons.conf +0 -134
  132. novelwriter/assets/icons/typicons_dark/mixed_copy.svg +0 -4
  133. novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg +0 -12
  134. novelwriter/assets/icons/typicons_dark/mixed_document-new.svg +0 -6
  135. novelwriter/assets/icons/typicons_dark/mixed_document-note.svg +0 -12
  136. novelwriter/assets/icons/typicons_dark/mixed_document-scene.svg +0 -12
  137. novelwriter/assets/icons/typicons_dark/mixed_document-section.svg +0 -12
  138. novelwriter/assets/icons/typicons_dark/mixed_document-title.svg +0 -12
  139. novelwriter/assets/icons/typicons_dark/mixed_edit.svg +0 -4
  140. novelwriter/assets/icons/typicons_dark/mixed_import.svg +0 -5
  141. novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg +0 -5
  142. novelwriter/assets/icons/typicons_dark/mixed_input-none.svg +0 -5
  143. novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg +0 -5
  144. novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +0 -6
  145. novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +0 -6
  146. novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +0 -6
  147. novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +0 -6
  148. novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg +0 -6
  149. novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +0 -6
  150. novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +0 -6
  151. novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg +0 -4
  152. novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg +0 -4
  153. novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +0 -4
  154. novelwriter/assets/icons/typicons_dark/nw_deco-h2.svg +0 -4
  155. novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +0 -4
  156. novelwriter/assets/icons/typicons_dark/nw_deco-h3.svg +0 -4
  157. novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +0 -4
  158. novelwriter/assets/icons/typicons_dark/nw_deco-h4.svg +0 -4
  159. novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +0 -4
  160. novelwriter/assets/icons/typicons_dark/nw_deco-noveltree-more.svg +0 -4
  161. novelwriter/assets/icons/typicons_dark/nw_font.svg +0 -4
  162. novelwriter/assets/icons/typicons_dark/nw_panel.svg +0 -4
  163. novelwriter/assets/icons/typicons_dark/nw_quote.svg +0 -4
  164. novelwriter/assets/icons/typicons_dark/nw_search-case.svg +0 -4
  165. novelwriter/assets/icons/typicons_dark/nw_search-preserve.svg +0 -4
  166. novelwriter/assets/icons/typicons_dark/nw_search-regex.svg +0 -4
  167. novelwriter/assets/icons/typicons_dark/nw_search-word.svg +0 -4
  168. novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +0 -4
  169. novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +0 -6
  170. novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +0 -4
  171. novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +0 -6
  172. novelwriter/assets/icons/typicons_dark/nw_tb-mark.svg +0 -7
  173. novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +0 -4
  174. novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +0 -6
  175. novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +0 -7
  176. novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +0 -7
  177. novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +0 -7
  178. novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +0 -5
  179. novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg +0 -4
  180. novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg +0 -4
  181. novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg +0 -4
  182. novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg +0 -4
  183. novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg +0 -4
  184. novelwriter/assets/icons/typicons_dark/typ_book-grey.svg +0 -4
  185. novelwriter/assets/icons/typicons_dark/typ_book.svg +0 -6
  186. novelwriter/assets/icons/typicons_dark/typ_bookmark.svg +0 -4
  187. novelwriter/assets/icons/typicons_dark/typ_calendar.svg +0 -4
  188. novelwriter/assets/icons/typicons_dark/typ_cancel-grey.svg +0 -4
  189. novelwriter/assets/icons/typicons_dark/typ_cancel.svg +0 -4
  190. novelwriter/assets/icons/typicons_dark/typ_chart-bar-grey.svg +0 -4
  191. novelwriter/assets/icons/typicons_dark/typ_chevron-down.svg +0 -4
  192. novelwriter/assets/icons/typicons_dark/typ_chevron-left.svg +0 -4
  193. novelwriter/assets/icons/typicons_dark/typ_chevron-right.svg +0 -4
  194. novelwriter/assets/icons/typicons_dark/typ_chevron-up.svg +0 -4
  195. novelwriter/assets/icons/typicons_dark/typ_cog.svg +0 -4
  196. novelwriter/assets/icons/typicons_dark/typ_delete-full.svg +0 -4
  197. novelwriter/assets/icons/typicons_dark/typ_delete.svg +0 -4
  198. novelwriter/assets/icons/typicons_dark/typ_directions-full.svg +0 -4
  199. novelwriter/assets/icons/typicons_dark/typ_document-add.svg +0 -4
  200. novelwriter/assets/icons/typicons_dark/typ_document-text.svg +0 -8
  201. novelwriter/assets/icons/typicons_dark/typ_document.svg +0 -4
  202. novelwriter/assets/icons/typicons_dark/typ_export-grey.svg +0 -4
  203. novelwriter/assets/icons/typicons_dark/typ_export.svg +0 -4
  204. novelwriter/assets/icons/typicons_dark/typ_eye.svg +0 -4
  205. novelwriter/assets/icons/typicons_dark/typ_flag.svg +0 -4
  206. novelwriter/assets/icons/typicons_dark/typ_folder-open.svg +0 -4
  207. novelwriter/assets/icons/typicons_dark/typ_folder.svg +0 -5
  208. novelwriter/assets/icons/typicons_dark/typ_globe-grey.svg +0 -4
  209. novelwriter/assets/icons/typicons_dark/typ_key.svg +0 -4
  210. novelwriter/assets/icons/typicons_dark/typ_lightbulb-full.svg +0 -4
  211. novelwriter/assets/icons/typicons_dark/typ_location.svg +0 -4
  212. novelwriter/assets/icons/typicons_dark/typ_media-pause-grey.svg +0 -4
  213. novelwriter/assets/icons/typicons_dark/typ_media-record-outline.svg +0 -4
  214. novelwriter/assets/icons/typicons_dark/typ_media-record.svg +0 -4
  215. novelwriter/assets/icons/typicons_dark/typ_minus.svg +0 -4
  216. novelwriter/assets/icons/typicons_dark/typ_pencil.svg +0 -5
  217. novelwriter/assets/icons/typicons_dark/typ_pin-outline.svg +0 -4
  218. novelwriter/assets/icons/typicons_dark/typ_pin.svg +0 -4
  219. novelwriter/assets/icons/typicons_dark/typ_plus.svg +0 -4
  220. novelwriter/assets/icons/typicons_dark/typ_puzzle-outline.svg +0 -4
  221. novelwriter/assets/icons/typicons_dark/typ_puzzle.svg +0 -4
  222. novelwriter/assets/icons/typicons_dark/typ_refresh-flipped.svg +0 -4
  223. novelwriter/assets/icons/typicons_dark/typ_refresh.svg +0 -4
  224. novelwriter/assets/icons/typicons_dark/typ_search-grey.svg +0 -4
  225. novelwriter/assets/icons/typicons_dark/typ_search.svg +0 -4
  226. novelwriter/assets/icons/typicons_dark/typ_star.svg +0 -4
  227. novelwriter/assets/icons/typicons_dark/typ_stopwatch-grey.svg +0 -4
  228. novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +0 -4
  229. novelwriter/assets/icons/typicons_dark/typ_th-dot-more.svg +0 -4
  230. novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg +0 -4
  231. novelwriter/assets/icons/typicons_dark/typ_th-list.svg +0 -9
  232. novelwriter/assets/icons/typicons_dark/typ_times.svg +0 -4
  233. novelwriter/assets/icons/typicons_dark/typ_trash.svg +0 -5
  234. novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +0 -4
  235. novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +0 -4
  236. novelwriter/assets/icons/typicons_dark/typ_user.svg +0 -5
  237. novelwriter/assets/icons/typicons_dark/typ_warning-full.svg +0 -4
  238. novelwriter/assets/icons/typicons_light/README.md +0 -29
  239. novelwriter/assets/icons/typicons_light/icons.conf +0 -134
  240. novelwriter/assets/icons/typicons_light/mixed_copy.svg +0 -4
  241. novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg +0 -12
  242. novelwriter/assets/icons/typicons_light/mixed_document-new.svg +0 -6
  243. novelwriter/assets/icons/typicons_light/mixed_document-note.svg +0 -12
  244. novelwriter/assets/icons/typicons_light/mixed_document-scene.svg +0 -12
  245. novelwriter/assets/icons/typicons_light/mixed_document-section.svg +0 -12
  246. novelwriter/assets/icons/typicons_light/mixed_document-title.svg +0 -12
  247. novelwriter/assets/icons/typicons_light/mixed_edit.svg +0 -4
  248. novelwriter/assets/icons/typicons_light/mixed_import.svg +0 -5
  249. novelwriter/assets/icons/typicons_light/mixed_input-checked.svg +0 -5
  250. novelwriter/assets/icons/typicons_light/mixed_input-none.svg +0 -5
  251. novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg +0 -5
  252. novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +0 -6
  253. novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +0 -6
  254. novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +0 -6
  255. novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +0 -6
  256. novelwriter/assets/icons/typicons_light/mixed_search-replace.svg +0 -6
  257. novelwriter/assets/icons/typicons_light/mixed_size-height.svg +0 -6
  258. novelwriter/assets/icons/typicons_light/mixed_size-width.svg +0 -6
  259. novelwriter/assets/icons/typicons_light/nw_deco-h0.svg +0 -4
  260. novelwriter/assets/icons/typicons_light/nw_deco-h1.svg +0 -4
  261. novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +0 -4
  262. novelwriter/assets/icons/typicons_light/nw_deco-h2.svg +0 -4
  263. novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +0 -4
  264. novelwriter/assets/icons/typicons_light/nw_deco-h3.svg +0 -4
  265. novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +0 -4
  266. novelwriter/assets/icons/typicons_light/nw_deco-h4.svg +0 -4
  267. novelwriter/assets/icons/typicons_light/nw_deco-note.svg +0 -4
  268. novelwriter/assets/icons/typicons_light/nw_deco-noveltree-more.svg +0 -4
  269. novelwriter/assets/icons/typicons_light/nw_font.svg +0 -4
  270. novelwriter/assets/icons/typicons_light/nw_panel.svg +0 -4
  271. novelwriter/assets/icons/typicons_light/nw_quote.svg +0 -4
  272. novelwriter/assets/icons/typicons_light/nw_search-case.svg +0 -4
  273. novelwriter/assets/icons/typicons_light/nw_search-preserve.svg +0 -4
  274. novelwriter/assets/icons/typicons_light/nw_search-regex.svg +0 -4
  275. novelwriter/assets/icons/typicons_light/nw_search-word.svg +0 -4
  276. novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +0 -4
  277. novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +0 -6
  278. novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +0 -4
  279. novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +0 -6
  280. novelwriter/assets/icons/typicons_light/nw_tb-mark.svg +0 -7
  281. novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +0 -4
  282. novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +0 -6
  283. novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +0 -7
  284. novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +0 -7
  285. novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +0 -7
  286. novelwriter/assets/icons/typicons_light/nw_toolbar.svg +0 -5
  287. novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg +0 -4
  288. novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg +0 -4
  289. novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg +0 -4
  290. novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg +0 -4
  291. novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg +0 -4
  292. novelwriter/assets/icons/typicons_light/typ_book-grey.svg +0 -4
  293. novelwriter/assets/icons/typicons_light/typ_book.svg +0 -6
  294. novelwriter/assets/icons/typicons_light/typ_bookmark.svg +0 -4
  295. novelwriter/assets/icons/typicons_light/typ_calendar.svg +0 -4
  296. novelwriter/assets/icons/typicons_light/typ_cancel-grey.svg +0 -4
  297. novelwriter/assets/icons/typicons_light/typ_cancel.svg +0 -4
  298. novelwriter/assets/icons/typicons_light/typ_chart-bar-grey.svg +0 -4
  299. novelwriter/assets/icons/typicons_light/typ_chevron-down.svg +0 -4
  300. novelwriter/assets/icons/typicons_light/typ_chevron-left.svg +0 -4
  301. novelwriter/assets/icons/typicons_light/typ_chevron-right.svg +0 -4
  302. novelwriter/assets/icons/typicons_light/typ_chevron-up.svg +0 -4
  303. novelwriter/assets/icons/typicons_light/typ_cog.svg +0 -4
  304. novelwriter/assets/icons/typicons_light/typ_delete-full.svg +0 -4
  305. novelwriter/assets/icons/typicons_light/typ_delete.svg +0 -4
  306. novelwriter/assets/icons/typicons_light/typ_directions-full.svg +0 -4
  307. novelwriter/assets/icons/typicons_light/typ_document-add.svg +0 -4
  308. novelwriter/assets/icons/typicons_light/typ_document-text.svg +0 -5
  309. novelwriter/assets/icons/typicons_light/typ_document.svg +0 -4
  310. novelwriter/assets/icons/typicons_light/typ_export-grey.svg +0 -4
  311. novelwriter/assets/icons/typicons_light/typ_export.svg +0 -4
  312. novelwriter/assets/icons/typicons_light/typ_eye.svg +0 -4
  313. novelwriter/assets/icons/typicons_light/typ_flag.svg +0 -4
  314. novelwriter/assets/icons/typicons_light/typ_folder-open.svg +0 -4
  315. novelwriter/assets/icons/typicons_light/typ_folder.svg +0 -5
  316. novelwriter/assets/icons/typicons_light/typ_globe-grey.svg +0 -4
  317. novelwriter/assets/icons/typicons_light/typ_key.svg +0 -4
  318. novelwriter/assets/icons/typicons_light/typ_lightbulb-full.svg +0 -4
  319. novelwriter/assets/icons/typicons_light/typ_location.svg +0 -4
  320. novelwriter/assets/icons/typicons_light/typ_media-pause-grey.svg +0 -4
  321. novelwriter/assets/icons/typicons_light/typ_media-record-outline.svg +0 -4
  322. novelwriter/assets/icons/typicons_light/typ_media-record.svg +0 -4
  323. novelwriter/assets/icons/typicons_light/typ_minus.svg +0 -4
  324. novelwriter/assets/icons/typicons_light/typ_pencil.svg +0 -5
  325. novelwriter/assets/icons/typicons_light/typ_pin-outline.svg +0 -4
  326. novelwriter/assets/icons/typicons_light/typ_pin.svg +0 -4
  327. novelwriter/assets/icons/typicons_light/typ_plus.svg +0 -4
  328. novelwriter/assets/icons/typicons_light/typ_puzzle-outline.svg +0 -4
  329. novelwriter/assets/icons/typicons_light/typ_puzzle.svg +0 -4
  330. novelwriter/assets/icons/typicons_light/typ_refresh-flipped.svg +0 -4
  331. novelwriter/assets/icons/typicons_light/typ_refresh.svg +0 -4
  332. novelwriter/assets/icons/typicons_light/typ_search-grey.svg +0 -4
  333. novelwriter/assets/icons/typicons_light/typ_search.svg +0 -4
  334. novelwriter/assets/icons/typicons_light/typ_star.svg +0 -4
  335. novelwriter/assets/icons/typicons_light/typ_stopwatch-grey.svg +0 -4
  336. novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +0 -4
  337. novelwriter/assets/icons/typicons_light/typ_th-dot-more.svg +0 -4
  338. novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg +0 -4
  339. novelwriter/assets/icons/typicons_light/typ_th-list.svg +0 -9
  340. novelwriter/assets/icons/typicons_light/typ_times.svg +0 -4
  341. novelwriter/assets/icons/typicons_light/typ_trash.svg +0 -5
  342. novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +0 -4
  343. novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +0 -4
  344. novelwriter/assets/icons/typicons_light/typ_user.svg +0 -5
  345. novelwriter/assets/icons/typicons_light/typ_warning-full.svg +0 -4
  346. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/entry_points.txt +0 -0
  347. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info/licenses}/LICENSE.md +0 -0
  348. {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/top_level.txt +0 -0
@@ -29,12 +29,11 @@ import logging
29
29
  from datetime import datetime
30
30
  from typing import TYPE_CHECKING
31
31
 
32
- from PyQt5.QtCore import Qt, pyqtSlot
33
- from PyQt5.QtGui import QCloseEvent, QCursor, QPixmap
34
- from PyQt5.QtWidgets import (
35
- QAction, QApplication, QDialogButtonBox, QFileDialog, QGridLayout,
36
- QGroupBox, QHBoxLayout, QLabel, QMenu, QSpinBox, QTreeWidget,
37
- QTreeWidgetItem
32
+ from PyQt6.QtCore import Qt, pyqtSlot
33
+ from PyQt6.QtGui import QAction, QCloseEvent, QCursor, QPixmap
34
+ from PyQt6.QtWidgets import (
35
+ QApplication, QDialogButtonBox, QFileDialog, QGridLayout, QGroupBox,
36
+ QHBoxLayout, QLabel, QMenu, QSpinBox, QTreeWidget, QTreeWidgetItem
38
37
  )
39
38
 
40
39
  from novelwriter import CONFIG, SHARED
@@ -48,7 +47,7 @@ from novelwriter.types import (
48
47
  QtDialogClose, QtRoleAction
49
48
  )
50
49
 
51
- if TYPE_CHECKING: # pragma: no cover
50
+ if TYPE_CHECKING:
52
51
  from novelwriter.guimain import GuiMain
53
52
 
54
53
  logger = logging.getLogger(__name__)
@@ -83,26 +82,18 @@ class GuiWritingStats(NToolDialog):
83
82
  pOptions = SHARED.project.options
84
83
 
85
84
  self.setWindowTitle(self.tr("Writing Statistics"))
86
- self.setMinimumWidth(CONFIG.pxInt(420))
87
- self.setMinimumHeight(CONFIG.pxInt(400))
85
+ self.setMinimumWidth(420)
86
+ self.setMinimumHeight(400)
88
87
  self.resize(
89
- CONFIG.pxInt(pOptions.getInt("GuiWritingStats", "winWidth", 550)),
90
- CONFIG.pxInt(pOptions.getInt("GuiWritingStats", "winHeight", 500))
88
+ pOptions.getInt("GuiWritingStats", "winWidth", 550),
89
+ pOptions.getInt("GuiWritingStats", "winHeight", 500),
91
90
  )
92
91
 
93
92
  # List Box
94
- wCol0 = CONFIG.pxInt(
95
- pOptions.getInt("GuiWritingStats", "widthCol0", 180)
96
- )
97
- wCol1 = CONFIG.pxInt(
98
- pOptions.getInt("GuiWritingStats", "widthCol1", 80)
99
- )
100
- wCol2 = CONFIG.pxInt(
101
- pOptions.getInt("GuiWritingStats", "widthCol2", 80)
102
- )
103
- wCol3 = CONFIG.pxInt(
104
- pOptions.getInt("GuiWritingStats", "widthCol3", 80)
105
- )
93
+ wCol0 = pOptions.getInt("GuiWritingStats", "widthCol0", 180)
94
+ wCol1 = pOptions.getInt("GuiWritingStats", "widthCol1", 80)
95
+ wCol2 = pOptions.getInt("GuiWritingStats", "widthCol2", 80)
96
+ wCol3 = pOptions.getInt("GuiWritingStats", "widthCol3", 80)
106
97
 
107
98
  self.listBox = QTreeWidget(self)
108
99
  self.listBox.setHeaderLabels([
@@ -124,18 +115,16 @@ class GuiWritingStats(NToolDialog):
124
115
  hHeader.setTextAlignment(self.C_IDLE, QtAlignRight)
125
116
  hHeader.setTextAlignment(self.C_COUNT, QtAlignRight)
126
117
 
127
- sDec = Qt.SortOrder.DescendingOrder
128
- sAsc = Qt.SortOrder.AscendingOrder
129
118
  sortCol = minmax(pOptions.getInt("GuiWritingStats", "sortCol", 0), 0, 2)
130
119
  sortOrder = checkIntTuple(
131
- pOptions.getInt("GuiWritingStats", "sortOrder", sDec), (sAsc, sDec), sDec
120
+ pOptions.getInt("GuiWritingStats", "sortOrder", 1), (0, 1), 1
132
121
  )
133
- self.listBox.sortByColumn(sortCol, sortOrder) # type: ignore
122
+ sortOrders = (Qt.SortOrder.AscendingOrder, Qt.SortOrder.DescendingOrder)
123
+ self.listBox.sortByColumn(sortCol, sortOrders[sortOrder])
134
124
  self.listBox.setSortingEnabled(True)
135
125
 
136
126
  # Word Bar
137
- self.barHeight = int(round(0.5*SHARED.theme.fontPixelSize))
138
- self.barWidth = CONFIG.pxInt(200)
127
+ self.barHeight = round(0.5*SHARED.theme.fontPixelSize)
139
128
  self.barImage = QPixmap(self.barHeight, self.barHeight)
140
129
  self.barImage.fill(self.palette().highlight().color())
141
130
 
@@ -194,59 +183,82 @@ class GuiWritingStats(NToolDialog):
194
183
  # Filter Options
195
184
  iPx = SHARED.theme.baseIconHeight
196
185
 
197
- self.filterBox = QGroupBox(self.tr("Filters"), self)
198
186
  self.filterForm = QGridLayout(self)
187
+ self.filterForm.setRowStretch(6, 1)
188
+ self.filterBox = QGroupBox(self.tr("Filters"), self)
199
189
  self.filterBox.setLayout(self.filterForm)
200
190
 
201
- self.incNovel = NSwitch(self, height=iPx)
202
- self.incNovel.setChecked(
191
+ # Include Novel Files
192
+ self.swtIncNovel = NSwitch(self, height=iPx)
193
+ self.swtIncNovel.setChecked(
203
194
  pOptions.getBool("GuiWritingStats", "incNovel", True)
204
195
  )
205
- self.incNovel.clicked.connect(self._updateListBox)
196
+ self.swtIncNovel.clicked.connect(self._updateListBox)
197
+ self.lblIncNovel = QLabel(self.tr("Count novel files"), self)
198
+ self.lblIncNovel.setBuddy(self.swtIncNovel)
206
199
 
207
- self.incNotes = NSwitch(self, height=iPx)
208
- self.incNotes.setChecked(
200
+ self.filterForm.addWidget(self.lblIncNovel, 0, 0)
201
+ self.filterForm.addWidget(self.swtIncNovel, 0, 1)
202
+
203
+ # Include Note Files
204
+ self.swtIncNotes = NSwitch(self, height=iPx)
205
+ self.swtIncNotes.setChecked(
209
206
  pOptions.getBool("GuiWritingStats", "incNotes", True)
210
207
  )
211
- self.incNotes.clicked.connect(self._updateListBox)
208
+ self.swtIncNotes.clicked.connect(self._updateListBox)
209
+ self.lblIncNotes = QLabel(self.tr("Count note files"), self)
210
+ self.lblIncNotes.setBuddy(self.swtIncNotes)
211
+
212
+ self.filterForm.addWidget(self.lblIncNotes, 1, 0)
213
+ self.filterForm.addWidget(self.swtIncNotes, 1, 1)
212
214
 
213
- self.hideZeros = NSwitch(self, height=iPx)
214
- self.hideZeros.setChecked(
215
+ # Hide Zero Counts
216
+ self.swtHideZeros = NSwitch(self, height=iPx)
217
+ self.swtHideZeros.setChecked(
215
218
  pOptions.getBool("GuiWritingStats", "hideZeros", True)
216
219
  )
217
- self.hideZeros.clicked.connect(self._updateListBox)
220
+ self.swtHideZeros.clicked.connect(self._updateListBox)
221
+ self.lblHideZeros = QLabel(self.tr("Hide zero word count"), self)
222
+ self.lblHideZeros.setBuddy(self.swtHideZeros)
218
223
 
219
- self.hideNegative = NSwitch(self, height=iPx)
220
- self.hideNegative.setChecked(
224
+ self.filterForm.addWidget(self.lblHideZeros, 2, 0)
225
+ self.filterForm.addWidget(self.swtHideZeros, 2, 1)
226
+
227
+ # Hide Negative Counts
228
+ self.swtHideNegative = NSwitch(self, height=iPx)
229
+ self.swtHideNegative.setChecked(
221
230
  pOptions.getBool("GuiWritingStats", "hideNegative", False)
222
231
  )
223
- self.hideNegative.clicked.connect(self._updateListBox)
232
+ self.swtHideNegative.clicked.connect(self._updateListBox)
233
+ self.lblHideNegative = QLabel(self.tr("Hide negative word count"), self)
234
+ self.lblHideNegative.setBuddy(self.swtHideNegative)
235
+
236
+ self.filterForm.addWidget(self.lblHideNegative, 3, 0)
237
+ self.filterForm.addWidget(self.swtHideNegative, 3, 1)
224
238
 
225
- self.groupByDay = NSwitch(self, height=iPx)
226
- self.groupByDay.setChecked(
239
+ # Group Entries
240
+ self.swtGroupByDay = NSwitch(self, height=iPx)
241
+ self.swtGroupByDay.setChecked(
227
242
  pOptions.getBool("GuiWritingStats", "groupByDay", False)
228
243
  )
229
- self.groupByDay.clicked.connect(self._updateListBox)
244
+ self.swtGroupByDay.clicked.connect(self._updateListBox)
245
+ self.lblGroupByDay = QLabel(self.tr("Group entries by day"), self)
246
+ self.lblGroupByDay.setBuddy(self.swtGroupByDay)
247
+
248
+ self.filterForm.addWidget(self.lblGroupByDay, 4, 0)
249
+ self.filterForm.addWidget(self.swtGroupByDay, 4, 1)
230
250
 
231
- self.showIdleTime = NSwitch(self, height=iPx)
232
- self.showIdleTime.setChecked(
251
+ # Show Idle
252
+ self.swtShowIdleTime = NSwitch(self, height=iPx)
253
+ self.swtShowIdleTime.setChecked(
233
254
  pOptions.getBool("GuiWritingStats", "showIdleTime", False)
234
255
  )
235
- self.showIdleTime.clicked.connect(self._updateListBox)
236
-
237
- self.filterForm.addWidget(QLabel(self.tr("Count novel files"), self), 0, 0)
238
- self.filterForm.addWidget(QLabel(self.tr("Count note files"), self), 1, 0)
239
- self.filterForm.addWidget(QLabel(self.tr("Hide zero word count"), self), 2, 0)
240
- self.filterForm.addWidget(QLabel(self.tr("Hide negative word count"), self), 3, 0)
241
- self.filterForm.addWidget(QLabel(self.tr("Group entries by day"), self), 4, 0)
242
- self.filterForm.addWidget(QLabel(self.tr("Show idle time"), self), 5, 0)
243
- self.filterForm.addWidget(self.incNovel, 0, 1)
244
- self.filterForm.addWidget(self.incNotes, 1, 1)
245
- self.filterForm.addWidget(self.hideZeros, 2, 1)
246
- self.filterForm.addWidget(self.hideNegative, 3, 1)
247
- self.filterForm.addWidget(self.groupByDay, 4, 1)
248
- self.filterForm.addWidget(self.showIdleTime, 5, 1)
249
- self.filterForm.setRowStretch(6, 1)
256
+ self.swtShowIdleTime.clicked.connect(self._updateListBox)
257
+ self.lblShowIdleTime = QLabel(self.tr("Show idle time"), self)
258
+ self.lblShowIdleTime.setBuddy(self.swtShowIdleTime)
259
+
260
+ self.filterForm.addWidget(self.lblShowIdleTime, 5, 0)
261
+ self.filterForm.addWidget(self.swtShowIdleTime, 5, 1)
250
262
 
251
263
  # Settings
252
264
  self.histMax = QSpinBox(self)
@@ -264,26 +276,28 @@ class GuiWritingStats(NToolDialog):
264
276
  self.optsBox.addWidget(self.histMax, 0)
265
277
 
266
278
  # Buttons
267
- self.buttonBox = QDialogButtonBox(self)
268
- self.buttonBox.rejected.connect(self._doClose)
269
-
270
- self.btnClose = self.buttonBox.addButton(QtDialogClose)
271
- self.btnClose.setAutoDefault(False)
272
-
273
- self.btnSave = self.buttonBox.addButton(self.tr("Save As"), QtRoleAction)
274
- self.btnSave.setAutoDefault(False)
275
-
276
- self.saveMenu = QMenu(self)
277
- self.btnSave.setMenu(self.saveMenu)
278
-
279
279
  self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self)
280
280
  self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON))
281
- self.saveMenu.addAction(self.saveJSON)
282
281
 
283
282
  self.saveCSV = QAction(self.tr("CSV Data File (.csv)"), self)
284
283
  self.saveCSV.triggered.connect(qtLambda(self._saveData, self.FMT_CSV))
284
+
285
+ self.saveMenu = QMenu(self)
286
+ self.saveMenu.addAction(self.saveJSON)
285
287
  self.saveMenu.addAction(self.saveCSV)
286
288
 
289
+ self.buttonBox = QDialogButtonBox(self)
290
+ self.buttonBox.rejected.connect(self._doClose)
291
+
292
+ self.btnClose = self.buttonBox.addButton(QtDialogClose)
293
+ if self.btnClose:
294
+ self.btnClose.setAutoDefault(False)
295
+
296
+ self.btnSave = self.buttonBox.addButton(self.tr("Save As"), QtRoleAction)
297
+ if self.btnSave:
298
+ self.btnSave.setAutoDefault(False)
299
+ self.btnSave.setMenu(self.saveMenu)
300
+
287
301
  # Assemble
288
302
  self.outerBox = QGridLayout()
289
303
  self.outerBox.addWidget(self.listBox, 0, 0, 1, 2)
@@ -330,30 +344,26 @@ class GuiWritingStats(NToolDialog):
330
344
  """Save the state of the window, clear cache, end close."""
331
345
  self.logData = []
332
346
 
333
- winWidth = CONFIG.rpxInt(self.width())
334
- winHeight = CONFIG.rpxInt(self.height())
335
- widthCol0 = CONFIG.rpxInt(self.listBox.columnWidth(0))
336
- widthCol1 = CONFIG.rpxInt(self.listBox.columnWidth(1))
337
- widthCol2 = CONFIG.rpxInt(self.listBox.columnWidth(2))
338
- widthCol3 = CONFIG.rpxInt(self.listBox.columnWidth(3))
347
+ header = self.listBox.header()
348
+
339
349
  sortCol = self.listBox.sortColumn()
340
- sortOrder = self.listBox.header().sortIndicatorOrder()
341
- incNovel = self.incNovel.isChecked()
342
- incNotes = self.incNotes.isChecked()
343
- hideZeros = self.hideZeros.isChecked()
344
- hideNegative = self.hideNegative.isChecked()
345
- groupByDay = self.groupByDay.isChecked()
346
- showIdleTime = self.showIdleTime.isChecked()
350
+ sortOrder = header.sortIndicatorOrder() if header else 0
351
+ incNovel = self.swtIncNovel.isChecked()
352
+ incNotes = self.swtIncNotes.isChecked()
353
+ hideZeros = self.swtHideZeros.isChecked()
354
+ hideNegative = self.swtHideNegative.isChecked()
355
+ groupByDay = self.swtGroupByDay.isChecked()
356
+ showIdleTime = self.swtShowIdleTime.isChecked()
347
357
  histMax = self.histMax.value()
348
358
 
349
359
  logger.debug("Saving State: GuiWritingStats")
350
360
  pOptions = SHARED.project.options
351
- pOptions.setValue("GuiWritingStats", "winWidth", winWidth)
352
- pOptions.setValue("GuiWritingStats", "winHeight", winHeight)
353
- pOptions.setValue("GuiWritingStats", "widthCol0", widthCol0)
354
- pOptions.setValue("GuiWritingStats", "widthCol1", widthCol1)
355
- pOptions.setValue("GuiWritingStats", "widthCol2", widthCol2)
356
- pOptions.setValue("GuiWritingStats", "widthCol3", widthCol3)
361
+ pOptions.setValue("GuiWritingStats", "winWidth", self.width())
362
+ pOptions.setValue("GuiWritingStats", "winHeight", self.height())
363
+ pOptions.setValue("GuiWritingStats", "widthCol0", self.listBox.columnWidth(0))
364
+ pOptions.setValue("GuiWritingStats", "widthCol1", self.listBox.columnWidth(1))
365
+ pOptions.setValue("GuiWritingStats", "widthCol2", self.listBox.columnWidth(2))
366
+ pOptions.setValue("GuiWritingStats", "widthCol3", self.listBox.columnWidth(3))
357
367
  pOptions.setValue("GuiWritingStats", "sortCol", sortCol)
358
368
  pOptions.setValue("GuiWritingStats", "sortOrder", sortOrder)
359
369
  pOptions.setValue("GuiWritingStats", "incNovel", incNovel)
@@ -460,7 +470,7 @@ class GuiWritingStats(NToolDialog):
460
470
  rType = record.get("type")
461
471
  if rType == "initial":
462
472
  self.wordOffset = checkInt(record.get("offset"), 0)
463
- logger.debug("Initial word count when log was started is %d" % self.wordOffset)
473
+ logger.debug("Initial word count when log was started is %d", self.wordOffset)
464
474
  elif rType == "record":
465
475
  try:
466
476
  dStart = datetime.fromisoformat(str(record.get("start")))
@@ -500,11 +510,11 @@ class GuiWritingStats(NToolDialog):
500
510
  self.listBox.clear()
501
511
  self.timeFilter = 0.0
502
512
 
503
- incNovel = self.incNovel.isChecked()
504
- incNotes = self.incNotes.isChecked()
505
- hideZeros = self.hideZeros.isChecked()
506
- hideNegative = self.hideNegative.isChecked()
507
- groupByDay = self.groupByDay.isChecked()
513
+ incNovel = self.swtIncNovel.isChecked()
514
+ incNotes = self.swtIncNotes.isChecked()
515
+ hideZeros = self.swtHideZeros.isChecked()
516
+ hideNegative = self.swtHideNegative.isChecked()
517
+ groupByDay = self.swtGroupByDay.isChecked()
508
518
  histMax = self.histMax.value()
509
519
 
510
520
  # Group the data
@@ -576,14 +586,14 @@ class GuiWritingStats(NToolDialog):
576
586
  # Populate the list
577
587
  mTrans = Qt.TransformationMode.FastTransformation
578
588
  mAspect = Qt.AspectRatioMode.IgnoreAspectRatio
579
- showIdleTime = self.showIdleTime.isChecked()
589
+ showIdleTime = self.swtShowIdleTime.isChecked()
580
590
  for _, sStart, sDiff, nWords, _, _, sIdle in self.filterData:
581
591
 
582
592
  if showIdleTime:
583
593
  idleEntry = formatTime(sIdle)
584
594
  else:
585
595
  sRatio = sIdle/sDiff if sDiff > 0.0 else 0.0
586
- idleEntry = "%d %%" % round(100.0 * sRatio)
596
+ idleEntry = f"{round(100.0 * sRatio)} %"
587
597
 
588
598
  newItem = QTreeWidgetItem()
589
599
  newItem.setText(self.C_TIME, sStart)
novelwriter/types.py CHANGED
@@ -23,12 +23,9 @@ 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 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
26
+ from PyQt6.QtCore import Qt
27
+ from PyQt6.QtGui import QColor, QFont, QPainter, QTextCharFormat, QTextCursor, QTextFormat
28
+ from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QHeaderView, QSizePolicy, QStyle
32
29
 
33
30
  # Qt Alignment Flags
34
31
 
@@ -56,7 +53,7 @@ QtVAlignSuper = QTextCharFormat.VerticalAlignment.AlignSuperScript
56
53
  QtPageBreakBefore = QTextFormat.PageBreakFlag.PageBreak_AlwaysBefore
57
54
  QtPageBreakAfter = QTextFormat.PageBreakFlag.PageBreak_AlwaysAfter
58
55
 
59
- QtPropLineHeight = QTextBlockFormat.LineHeightTypes.ProportionalHeight
56
+ QtPropLineHeight = 1 # QTextBlockFormat.LineHeightTypes.ProportionalHeight
60
57
 
61
58
  # Qt Painter Types
62
59
 
@@ -73,6 +70,7 @@ QtSelected = QStyle.StateFlag.State_Selected
73
70
  # Qt Colour Types
74
71
 
75
72
  QtHexRgb = QColor.NameFormat.HexRgb
73
+ QtHexArgb = QColor.NameFormat.HexArgb
76
74
 
77
75
  # Qt Tree and Table Types
78
76
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: novelWriter
3
- Version: 2.6.3
3
+ Version: 2.7
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
@@ -9,7 +9,6 @@ Project-URL: Documentation, https://docs.novelwriter.io
9
9
  Project-URL: Repository, https://github.com/vkbo/novelWriter
10
10
  Project-URL: Issues, https://github.com/vkbo/novelWriter/issues
11
11
  Classifier: Programming Language :: Python :: 3 :: Only
12
- Classifier: Programming Language :: Python :: 3.9
13
12
  Classifier: Programming Language :: Python :: 3.10
14
13
  Classifier: Programming Language :: Python :: 3.11
15
14
  Classifier: Programming Language :: Python :: 3.12
@@ -21,11 +20,12 @@ Classifier: Operating System :: OS Independent
21
20
  Classifier: Intended Audience :: End Users/Desktop
22
21
  Classifier: Natural Language :: English
23
22
  Classifier: Topic :: Text Editors
24
- Requires-Python: >=3.9
23
+ Requires-Python: >=3.10
25
24
  Description-Content-Type: text/markdown
26
25
  License-File: LICENSE.md
27
- Requires-Dist: pyqt5>=5.15
26
+ Requires-Dist: pyqt6>=6.4
28
27
  Requires-Dist: pyenchant>=3.0.0
28
+ Dynamic: license-file
29
29
 
30
30
  <img src="https://raw.githubusercontent.com/vkbo/novelWriter/main/setup/novelwriter_text.png">
31
31
 
@@ -39,7 +39,7 @@ synchronisation tools. All text is saved as plain text files with a meta data he
39
39
  project structure is stored in a single project XML file, and other meta data is primarily saved as
40
40
  JSON files.
41
41
 
42
- The application is written with Python 3 (3.9+) using Qt5 and PyQt5 (5.10+). It is developed on
42
+ The application is written with Python 3 (3.10+) using Qt6 and PyQt6 (5.10+). It is developed on
43
43
  Linux, but should in principle work fine on other operating systems as well as long as dependencies
44
44
  are met. It is regularly tested on Debian and Ubuntu Linux, Windows, and MacOS.
45
45
 
@@ -0,0 +1,162 @@
1
+ novelwriter/__init__.py,sha256=oD5gbh87q7Q-s7PvgHzfvEekFRmjoxSlPfQJ90tmp0E,9564
2
+ novelwriter/common.py,sha256=Z2n4CNZMotBYNNOqGPzXFfyAALh5eHtV3VtSyJaeBIU,22135
3
+ novelwriter/config.py,sha256=frdBJFPhR3tCUkc2dPmk930En0rANy1Om94IWHJtj-M,44665
4
+ novelwriter/constants.py,sha256=yDXImT9FTlMWi-sHCAp-UqILus4Ppg7o776ooudWGG0,28661
5
+ novelwriter/enum.py,sha256=_T1Un3H1SmpfHUw1CEPZuXSKJNT6RQWeN6N5p8yBx8E,3724
6
+ novelwriter/error.py,sha256=HPKDJb0NPTyVRsrPNG_I1-XfLXlvYAJuE2Xi7maWvXM,6828
7
+ novelwriter/guimain.py,sha256=luIw3434s92wEuU4gKkerp0MQGtD_hDlCVY6ioZu0LQ,50293
8
+ novelwriter/shared.py,sha256=8JTkFi7QXmQddGNVaSBIvKPfDXLaJ9XWNmUJblpfXvs,17795
9
+ novelwriter/splash.py,sha256=rK71vO7NG2NETTf1vvQiWRHfkHonf2Z0xhLj_LF_wj8,2237
10
+ novelwriter/types.py,sha256=wehbzAD13D2Ky4fqH3z7jK82uS4dNr19mH94AuLoIOA,5111
11
+ novelwriter/assets/manual.pdf,sha256=PC0s_zb-QSt29bLT44knwEztGJC0vRV31Nd5H8vFNr4,2126686
12
+ novelwriter/assets/manual_fr.pdf,sha256=a1_rjWyz9Tfn5Iud0jWWc_ciccOsU-7FSkbXc25z4RI,2184745
13
+ novelwriter/assets/sample.zip,sha256=K3yTbsvCb-PMTguu6aKAp9gF_Lo1BJkbs7aq9xXpkvM,13976
14
+ novelwriter/assets/i18n/nw_cs_CZ.qm,sha256=GvK8g8DiQKOLcNW6vR8aJRm3lRrD-1BWPMAliEQuUvY,96564
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=0A71su1wmPrGD1DD3FruFqnoWQqo4XaggWp5NJKT9lc,2861
28
+ novelwriter/assets/i18n/project_de_DE.json,sha256=flm9XAftVXNHddhcJEm1MhpsK7yWmnOmh6H12Byk6GA,2925
29
+ novelwriter/assets/i18n/project_en_GB.json,sha256=sioYhKDpqyuqgSwoyt4CVu6eUNS3ZB_Pr9z7_ufHoPo,2595
30
+ novelwriter/assets/i18n/project_en_US.json,sha256=sioYhKDpqyuqgSwoyt4CVu6eUNS3ZB_Pr9z7_ufHoPo,2595
31
+ novelwriter/assets/i18n/project_es_419.json,sha256=NQa1iAyQaoNyFSAfrPXNaoKyStyw7nexnGUHf-UMkOo,2792
32
+ novelwriter/assets/i18n/project_fr_FR.json,sha256=6ATiNU0YGEXwx_c2LpDvP7eCUDdUiGxtrssCVTiiyC8,2859
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
+ novelwriter/assets/i18n/project_nl_NL.json,sha256=wlXDfy4rMKyXP0X3r22qSNFuseO33bePAHqvIVk_tHQ,2742
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
+ novelwriter/assets/icons/font_awesome.icons,sha256=xe54nRX90DbcA2DGTYUEPagbGgrLQlusuJa0TvBmUbg,50737
43
+ novelwriter/assets/icons/material_filled_bold.icons,sha256=RBlkfnJ46uVq3HZbj7Wdfktc8wSexktao1E_H2puKH8,83050
44
+ novelwriter/assets/icons/material_filled_normal.icons,sha256=CTsuQKjph62heUboAIqin5LGZogFWbQ7gW--rvZDz_I,52676
45
+ novelwriter/assets/icons/material_filled_thin.icons,sha256=nXKFTAdcKw804Ans6pzSMMRbp2NUB57rG0I3NTHZBhg,77811
46
+ novelwriter/assets/icons/material_rounded_bold.icons,sha256=AEPa7O1SE3LGB_R-y1TVaFCCHzo3JormUwiqAlUksUY,88989
47
+ novelwriter/assets/icons/material_rounded_normal.icons,sha256=-_sqmHopUjX3BOpU4OiX0gSfUxrRbaVTFv8JNYLMp7E,56332
48
+ novelwriter/assets/icons/material_rounded_thin.icons,sha256=4Q0UoMOPfGCF0F7Oli10k7i1X7vQLFznbS4Wt8mOa7s,87020
49
+ novelwriter/assets/icons/none.svg,sha256=NRN9vMzohg7Ner71GwPthrCG0uA81TpY8UmKb8-L-pM,251
50
+ novelwriter/assets/icons/novelwriter.ico,sha256=OJRIeeUcmS7Di51NA3uF5_Ov4V8T47gQ9qWv6C7qDeA,171059
51
+ novelwriter/assets/icons/novelwriter.svg,sha256=Ad_SgOdXSDJtFR3DLCx6Afme15I78r38_YxCfO9F2z4,8511
52
+ novelwriter/assets/icons/remix_filled.icons,sha256=4SpKuFtm9im2JlA0l0CmjBO-UB252eJw2uQ0X7jo3OY,43052
53
+ novelwriter/assets/icons/remix_outline.icons,sha256=6O_1TpSVvGI56lUdq-5Ycn9CHM6844W5PG5yQvUgG4w,47132
54
+ novelwriter/assets/icons/x-novelwriter-project.ico,sha256=MXdZSYi3j95aIsT5bZo6CkhxmS75cThP9O_38UR7sjg,170697
55
+ novelwriter/assets/icons/x-novelwriter-project.svg,sha256=VHf1aClkA91tZVYb3LFk9bi_Dw25QBVSjUJAjSD-YX4,5143
56
+ novelwriter/assets/images/novelwriter-text-dark.svg,sha256=gbbDiXd92OV5c6qGREDkAnTnEApxYPbqyrbUHB8mtiM,5976
57
+ novelwriter/assets/images/novelwriter-text-light.svg,sha256=ziTrfrr0WO9JWBzSfuuKBlYFCkENfEBp3MyOYTNGUYQ,5983
58
+ novelwriter/assets/images/splash.png,sha256=HusX02pWFgs5pYj3T5WgYgVIIgTQSi7ndK0GU1Zemt0,28806
59
+ novelwriter/assets/images/welcome-dark.jpg,sha256=MPRYUI1yEjzee1uHGWlrR352U1LFSSV92awDheFtmZo,299007
60
+ novelwriter/assets/images/welcome-light.jpg,sha256=FcS5GA5G6o9KgmADYHktyR3GHquNlPNIUQeQQiscQzA,279989
61
+ novelwriter/assets/syntax/cyberpunk_night.conf,sha256=la_KtpSkuQvP9LoCNlKjK5tsqGrT9MYl--CTlzOm2Ks,826
62
+ novelwriter/assets/syntax/default_dark.conf,sha256=2aczHlskobF6c6VQOaucrkygBbTK6jIyc9UlP8_TcMk,1258
63
+ novelwriter/assets/syntax/default_light.conf,sha256=jmUmG1EO0yOyBbr-2DM4VW56MlBnMfaAaVaeLVECF-c,1259
64
+ novelwriter/assets/syntax/dracula.conf,sha256=fWA2tVAvCH9PPYZV0yTriA_9O5SLqamqTnJQnddJ8Mc,1323
65
+ novelwriter/assets/syntax/grey_dark.conf,sha256=L075no7vkh8ErukXVMIQVFe8zDfPQa2wdcYRQ-S80tI,877
66
+ novelwriter/assets/syntax/grey_light.conf,sha256=KulyqCZYTCSY_c8FMI3VSylDNpuYwrsWAS8vCipiHsY,878
67
+ novelwriter/assets/syntax/light_owl.conf,sha256=5sF7omkEIAs0inQCghbwIL-NmfN4vVNglzUP24zPU_Q,1529
68
+ novelwriter/assets/syntax/night_owl.conf,sha256=Tb_urqMBytO2fiy7Bo4ikVis6KT0nzwj22vVeBUsfqM,1529
69
+ novelwriter/assets/syntax/snazzy.conf,sha256=JNyqBCX3RhhpjaLozfmNGAunIJovQxO5xp1fyWX3zT0,1304
70
+ novelwriter/assets/syntax/solarized_dark.conf,sha256=BE9KAIcjiWKKY0blggVDqWkkMyD2AS0GbfwPXWYjLvQ,865
71
+ novelwriter/assets/syntax/solarized_light.conf,sha256=E9sA87QmRNp2mzYZM3O9bHzyaVhXX-z9nhhpm3NOFlc,866
72
+ novelwriter/assets/syntax/tango.conf,sha256=9ITFNN2iS0DOTr7NB-w5vlc_XPD32Oc4j5PeXhptsXQ,1124
73
+ novelwriter/assets/syntax/tomorrow.conf,sha256=Oj0TGfnzwvlVBA52CC9xU0BBK_M4NwBHLBeEhbvsTzM,1527
74
+ novelwriter/assets/syntax/tomorrow_night.conf,sha256=mWPneIV_6tszLEK4-Eo-kcJmUbrkzMJHohgKBFKnpaE,1539
75
+ novelwriter/assets/syntax/tomorrow_night_blue.conf,sha256=L42gcekFfNpCCB45m9Lhzmz8Y6Lvbpik3AADi_1Aao8,1549
76
+ novelwriter/assets/syntax/tomorrow_night_bright.conf,sha256=h8_775Ed8hl2XhfCoxAY2kT43vi-UvG8UHik1aI4eRw,1554
77
+ novelwriter/assets/syntax/tomorrow_night_eighties.conf,sha256=stO_xH5RzMN0jaZeYr53LVXbpqSmIXALBFGVLlJBDLA,1557
78
+ novelwriter/assets/text/credits_en.htm,sha256=MIDbAovnNUt-prTImuC5mDnVTqUknwPtj43tqFL9gPQ,3119
79
+ novelwriter/assets/text/lipsum.txt,sha256=sGA6AC_p4jrUifxLxy3cSODeRwkpBNXDPGgX6YRTm2s,62937
80
+ novelwriter/assets/themes/cyberpunk_night.conf,sha256=UT4tm03jBc-JRDrUKb6aLBJVF2JkQl-fha4_iHGpAs4,1331
81
+ novelwriter/assets/themes/default.conf,sha256=K0LZ64lODpCtUg3pISTAP4UKvEYMvPkmIYN9RDEaWwk,72
82
+ novelwriter/assets/themes/default_dark.conf,sha256=H9ZC8F0dKcflGOcNkwGqB4ioS3FR_60ZGIU79oReBwg,1397
83
+ novelwriter/assets/themes/default_light.conf,sha256=SJpcNl1qsy85j9moalEDncHQh6LpgBKBAZZHqxCV9oI,1399
84
+ novelwriter/assets/themes/dracula.conf,sha256=c0yNTVaI2vTQIyS1BL6XqJjsnRX0N1sMfaW14FH4iV4,1833
85
+ novelwriter/assets/themes/snazzy.conf,sha256=-Qg6-6UxTXyq6pyFCFGNSeGQEVb2pjX9hErCgB58DuE,1381
86
+ novelwriter/assets/themes/solarized_dark.conf,sha256=17Ylx-hA4zS92MWgWxiTqchUCYVCMvqIwNEiSOJEc-0,1325
87
+ novelwriter/assets/themes/solarized_light.conf,sha256=zb9M41VnPjR0nx6ZP-YcY-cb-TgS_oIHlok-L3HfJek,1326
88
+ novelwriter/core/buildsettings.py,sha256=9dqXlV6oVYe2UmqSrx54PFqvRYcjOJmJEIaFmqjvaFs,25045
89
+ novelwriter/core/coretools.py,sha256=u82B7foOTbkoRXDVshL_Htlup6svTQU6eiIWeJsfsEA,21515
90
+ novelwriter/core/docbuild.py,sha256=D7YF2aGhpDZ1gGkL8mzXxH1SSilfhoZDy9PVCGZf6s0,14173
91
+ novelwriter/core/document.py,sha256=AA6Fhwi9Q-UtAFYXjMUXSU-cQF2jogScqPJ5sNaRbEI,12139
92
+ novelwriter/core/index.py,sha256=lDmRyy-Kjb4gSjaYFj5vAzI40oMQr_xCAtb4XLmOVBQ,40964
93
+ novelwriter/core/indexdata.py,sha256=ywfbKZEzK2cKWXepM2M8YoAr-G2qSF9L_GV4GIvQB5s,13177
94
+ novelwriter/core/item.py,sha256=-2HQAjjl9fYvgGWp2B5fDeuVb6ZbdU8Tb4QPPUS6Iak,19687
95
+ novelwriter/core/itemmodel.py,sha256=wVRUjT_0FGEAzkZFNo4fgCMR4hlQfny2og3gPE3kd8Q,18472
96
+ novelwriter/core/novelmodel.py,sha256=lAtxerg-BuRydJTqwNggPFoYamTrJc4Z-GVXwq_2zwo,7414
97
+ novelwriter/core/options.py,sha256=CTHf2RclRBiZM9No-fZ2x6XyJ1oRPvEoPuujQR8wE0I,7462
98
+ novelwriter/core/project.py,sha256=i_Et1-uy_16nCEliX8LxikJjdHZuwYURJ-McAxdZwVI,20945
99
+ novelwriter/core/projectdata.py,sha256=r7-i9zUCwl3PH_HwxJICjD50G9Fm9Kkh_GoV-wmMKEg,10732
100
+ novelwriter/core/projectxml.py,sha256=dhV61IoXHLEXv-_IVoXd2E-KRFA1esmQoquIMRstNK0,22340
101
+ novelwriter/core/sessions.py,sha256=oHUyT_AUmzE79PIXBWAm92NW4_UIJY4HoVE1VyeMUZk,4857
102
+ novelwriter/core/spellcheck.py,sha256=W3GvFduzo4Ys5WYKu7Q4AhmMs_hvFQGSTauE-hHfewg,7161
103
+ novelwriter/core/status.py,sha256=Yy-maybHw42JvAcfpc4HwHXmvmf3ceoV0aJ2pbbmoio,12113
104
+ novelwriter/core/storage.py,sha256=O6HN0L6_WQOfq651KFA216hjax9phCZeyXekiFjL3Mc,20931
105
+ novelwriter/core/tree.py,sha256=0Ufa9lUlKsLPJoavlQBSJ2pPZhcRsXrBp_V1VCxF6fQ,20603
106
+ novelwriter/dialogs/about.py,sha256=hDoXF8kRwwAUBJaZmYqnOggA6zgdZJH8aYLYhWntK7Q,4524
107
+ novelwriter/dialogs/docmerge.py,sha256=HaXD5bEfd2AL7JEiXKjSDZklAL1_uaJtbFihMLBlqV8,6082
108
+ novelwriter/dialogs/docsplit.py,sha256=WLQMB1BdqLEFxEcZ63GSSba7yJb5xBFfaiCdzbC9aK0,9380
109
+ novelwriter/dialogs/editlabel.py,sha256=SPXp_52HZcYVks_Ap818MKw4nsDme8mmaXi_T1lfJjI,2968
110
+ novelwriter/dialogs/preferences.py,sha256=PIKcOFS-hrj97TbimFMdwTk_FMKnXW86DKkudl6DQTA,41923
111
+ novelwriter/dialogs/projectsettings.py,sha256=gTo9w6-WxTMk533BIPFu4O-3bHpNoVYU1hBhnAC2uJQ,29963
112
+ novelwriter/dialogs/quotes.py,sha256=X_LIHktkn7r-UgRwv2FalZ3n5_a8FKTW0ceS3iWOmgU,4553
113
+ novelwriter/dialogs/wordlist.py,sha256=lPZi5fwqOhr12KsvnO4CC1BFtSnjSuTMCbZm5S0JRzk,8507
114
+ novelwriter/extensions/configlayout.py,sha256=K6hWukzwI3uQk3e-GW2db1_YoxewSs3DPGWO7HUq9PY,10871
115
+ novelwriter/extensions/eventfilters.py,sha256=JKhcLGcBALljL3Rtu0zyoZrOajAfeOymgid9MWNlDQs,2601
116
+ novelwriter/extensions/modified.py,sha256=z-u-HQV3zBYiAVd70IS-ydYBjD3RuCfAwCYu_LKwF6w,6980
117
+ novelwriter/extensions/novelselector.py,sha256=Ou8Hu5Bdp1pFLWmIBc7sEg6dvbgm3bfV0Zovdr1hMoM,4283
118
+ novelwriter/extensions/pagedsidebar.py,sha256=Wj9c1WcCbawgE8Ib29GTzLySJ0gqY_xpW-TtEYHd-8s,6925
119
+ novelwriter/extensions/progressbars.py,sha256=sbCUx0pTJGj-bsYimcDcZizZqoi6AfVaQ9y8Yi10Fq0,4655
120
+ novelwriter/extensions/statusled.py,sha256=QeVYlmNn1GcT6CnL1zMIxaYyRSZZMLGONhm46wseovc,2738
121
+ novelwriter/extensions/switch.py,sha256=dfsZtJsXvqzkgkCQHRSjNfT6S4P3zy4UmTJ3CKpYJok,3984
122
+ novelwriter/extensions/switchbox.py,sha256=QIBgy75OeVwmu53A1sOhlrarSlRH6TxSQNkIyoqFc9Q,4311
123
+ novelwriter/extensions/versioninfo.py,sha256=8DTvtu4sFPCioY7L-3rK1_sAN1qod3XwXl3F4LtKbDY,5046
124
+ novelwriter/formats/shared.py,sha256=I_MfvU9ZuN23WblDXdggiV282cXuPDpkq72M3MyK-G8,4666
125
+ novelwriter/formats/todocx.py,sha256=WNIW2RJst7ai3C8IKHcQjwbh-KRzoZnhjWwVmjug_yc,40342
126
+ novelwriter/formats/tohtml.py,sha256=04OjlD_kZJyWBIuUc2olX-jSVh89_lLctST89gWIQMw,17153
127
+ novelwriter/formats/tokenizer.py,sha256=UiucWH3OFAyoqNEQMc_IQ5p6egemhMTf5PZrsvyh3lk,48648
128
+ novelwriter/formats/tomarkdown.py,sha256=CN9mJRwqoit1c9rOHwsqBZEpPjEWYvh81IVgttUxtEU,7044
129
+ novelwriter/formats/toodt.py,sha256=LuzN8vE46mclcfpOs9QZcElXDVOx14wjyKPkOQE6KYQ,58672
130
+ novelwriter/formats/toqdoc.py,sha256=-drPu62rVw_velHTkEEToKiM6-B8PvozX4PPnlDuu_k,18159
131
+ novelwriter/formats/toraw.py,sha256=6qLNvDc87t6c25j1H2IL9whajp1u-SOnHFk9c4gV_7E,2903
132
+ novelwriter/gui/doceditor.py,sha256=w9MjT-puO9Yc-EMYZ0yr5QTTqj4hgwAzcjWcyZFi10A,117508
133
+ novelwriter/gui/dochighlight.py,sha256=DDCEK9iKUBd5miScrJCj9NlRj3sdOgD_bY8_4ARsSMg,19576
134
+ novelwriter/gui/docviewer.py,sha256=5xRmA0Fng7c5Y0hnwHFKzlvLdgoKkg3JxDajylkPW5I,34438
135
+ novelwriter/gui/docviewerpanel.py,sha256=m5e9hO5dgV729RnOEJzNzCOU2CB3vPzp4TB4HKgTjGA,19361
136
+ novelwriter/gui/editordocument.py,sha256=SPWulwJEsG_m_d7cJzAa8fhWmNKLGNPfI-Lsq_mF9CU,4774
137
+ novelwriter/gui/itemdetails.py,sha256=3mwtSGmOwKkFsFQi6ydmkaPaT4Eecg4fetkG6TduPWk,9605
138
+ novelwriter/gui/mainmenu.py,sha256=toBoa8tuSKuFrCClGdyI2jVF82kp3V2ZWC3W4xzrfFU,42043
139
+ novelwriter/gui/noveltree.py,sha256=-r5SHTKnIpsp-EZ7-JMFnQXzgApLBArsmsKnz-16bg0,20698
140
+ novelwriter/gui/outline.py,sha256=T4hxb_qjn_tl3e_mcBvr5X-PUZjBRYJo4Oga4nQ3FHg,41786
141
+ novelwriter/gui/projtree.py,sha256=ACteHsSp0Od6s3d9nMxsJwpsCfWCEiewIMZhTujxWH0,53760
142
+ novelwriter/gui/search.py,sha256=UsqOoDBdgFNxIN2hOSBJppTiJ31OTuoscNpQarNtnDo,13107
143
+ novelwriter/gui/sidebar.py,sha256=-H81QNrBC-BJ-cCNHsvlo8_IEYH7EMpS60x72kffcR8,6040
144
+ novelwriter/gui/statusbar.py,sha256=R8ubJydj6-r7G2VWA7b1BT2rVCcXxYDVQp4I3SA8gEQ,9837
145
+ novelwriter/gui/theme.py,sha256=_RELMH1vXFWb5PpYok3f5MC5LmtvIk8p6NTU3qQiYrc,36436
146
+ novelwriter/text/comments.py,sha256=bkmWdQ2MJ7N_ym_F9TBWN7wZc8SOe-Af1K-r3nxFyEM,2265
147
+ novelwriter/text/counting.py,sha256=JEU-kv5BCdiFfTQc8Uk5Sym2WbRgJ4AKtixlwQIZe1M,4407
148
+ novelwriter/text/patterns.py,sha256=ewlKV9IiKMlLZj4tJk2noSh8V5fzyDK9Cn_vmXo7eEk,7735
149
+ novelwriter/tools/dictionaries.py,sha256=ItM080yCoB5lgcovwUU1AO6usDFBRQpcV1UG0KGFvek,8932
150
+ novelwriter/tools/lipsum.py,sha256=tYSKrrtqCFlpCzXizgiVcG75Zud1hRhoPwtFpKPLL-0,4842
151
+ novelwriter/tools/manusbuild.py,sha256=FcM36eukyaWTI7G5Yb5bOShoZhoqSHCvJtmmhYng4Eo,13814
152
+ novelwriter/tools/manuscript.py,sha256=j9uWJkvMSV8UuSG6gnwflby9GFFaODiqcA7B9EUrxaI,39559
153
+ novelwriter/tools/manussettings.py,sha256=Fi1WXCc0LYt4ryR4ae0HAy2Goqzi4WNH0cGxJZ8yPYs,62448
154
+ novelwriter/tools/noveldetails.py,sha256=4BVi3Pc6HNJlYcYnyHKiIuR23uKZ9elNZOcJJOoLlAw,18067
155
+ novelwriter/tools/welcome.py,sha256=f657EWmQxe3l2sRL3Wq1A9R5mnFciivAF5TDbsUlsRc,27431
156
+ novelwriter/tools/writingstats.py,sha256=3U4dUlaeNR16E_Kxo5am8ov3ICH0j6S48FLJ-IptHDI,23161
157
+ novelwriter-2.7.dist-info/licenses/LICENSE.md,sha256=2GirkkLrPfQqx7fACKRJjtKJUegKc8067erGvcDVQHM,32197
158
+ novelwriter-2.7.dist-info/METADATA,sha256=Jb4Q-GvTht8q_H4eoVFRdf_GQxEj7Q5-ju7pYnnW91o,2552
159
+ novelwriter-2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
160
+ novelwriter-2.7.dist-info/entry_points.txt,sha256=YDUG1w361LtLsjD3YhxoTDTwM17JA5-nigjC6j5C74A,45
161
+ novelwriter-2.7.dist-info/top_level.txt,sha256=wFFEucjEeNC_Ap5ULBuEutg5a1Uc0-YO9uFT5L2naNI,12
162
+ novelwriter-2.7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5