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.
- novelwriter/__init__.py +98 -75
- novelwriter/assets/i18n/nw_cs_CZ.qm +0 -0
- novelwriter/assets/i18n/nw_de_DE.qm +0 -0
- novelwriter/assets/i18n/nw_en_US.qm +0 -0
- novelwriter/assets/i18n/nw_es_419.qm +0 -0
- novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
- novelwriter/assets/i18n/nw_it_IT.qm +0 -0
- novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
- novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
- novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
- novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
- novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
- novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
- novelwriter/assets/i18n/project_de_DE.json +3 -1
- novelwriter/assets/i18n/project_en_GB.json +2 -0
- novelwriter/assets/i18n/project_en_US.json +2 -0
- novelwriter/assets/i18n/project_it_IT.json +2 -0
- novelwriter/assets/i18n/project_ja_JP.json +2 -0
- novelwriter/assets/i18n/project_nb_NO.json +2 -0
- novelwriter/assets/i18n/project_nn_NO.json +5 -0
- novelwriter/assets/i18n/project_pl_PL.json +2 -0
- novelwriter/assets/i18n/project_pt_BR.json +2 -0
- novelwriter/assets/i18n/project_ru_RU.json +2 -0
- novelwriter/assets/i18n/project_zh_CN.json +2 -0
- novelwriter/assets/icons/font_awesome.icons +109 -0
- novelwriter/assets/icons/material_filled_bold.icons +109 -0
- novelwriter/assets/icons/material_filled_normal.icons +109 -0
- novelwriter/assets/icons/material_filled_thin.icons +109 -0
- novelwriter/assets/icons/material_rounded_bold.icons +109 -0
- novelwriter/assets/icons/material_rounded_normal.icons +109 -0
- novelwriter/assets/icons/material_rounded_thin.icons +109 -0
- novelwriter/assets/icons/remix_filled.icons +109 -0
- novelwriter/assets/icons/remix_outline.icons +109 -0
- novelwriter/assets/images/splash.png +0 -0
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/{manual_fr_FR.pdf → manual_fr.pdf} +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/assets/syntax/cyberpunk_night.conf +1 -1
- novelwriter/assets/syntax/snazzy.conf +3 -3
- novelwriter/assets/text/credits_en.htm +12 -6
- novelwriter/assets/themes/cyberpunk_night.conf +23 -7
- novelwriter/assets/themes/default_dark.conf +20 -4
- novelwriter/assets/themes/default_light.conf +21 -5
- novelwriter/assets/themes/dracula.conf +20 -4
- novelwriter/assets/themes/snazzy.conf +48 -0
- novelwriter/assets/themes/solarized_dark.conf +24 -8
- novelwriter/assets/themes/solarized_light.conf +22 -6
- novelwriter/common.py +43 -27
- novelwriter/config.py +201 -139
- novelwriter/constants.py +67 -36
- novelwriter/core/buildsettings.py +26 -17
- novelwriter/core/coretools.py +52 -41
- novelwriter/core/docbuild.py +20 -13
- novelwriter/core/document.py +2 -2
- novelwriter/core/index.py +166 -432
- novelwriter/core/indexdata.py +406 -0
- novelwriter/core/item.py +50 -32
- novelwriter/core/itemmodel.py +43 -38
- novelwriter/core/novelmodel.py +225 -0
- novelwriter/core/options.py +1 -1
- novelwriter/core/project.py +24 -25
- novelwriter/core/projectdata.py +47 -29
- novelwriter/core/projectxml.py +18 -8
- novelwriter/core/sessions.py +32 -15
- novelwriter/core/spellcheck.py +4 -3
- novelwriter/core/status.py +12 -15
- novelwriter/core/storage.py +1 -1
- novelwriter/core/tree.py +55 -13
- novelwriter/dialogs/about.py +19 -22
- novelwriter/dialogs/docmerge.py +23 -24
- novelwriter/dialogs/docsplit.py +26 -26
- novelwriter/dialogs/editlabel.py +19 -20
- novelwriter/dialogs/preferences.py +143 -69
- novelwriter/dialogs/projectsettings.py +51 -54
- novelwriter/dialogs/quotes.py +14 -19
- novelwriter/dialogs/wordlist.py +25 -30
- novelwriter/enum.py +8 -0
- novelwriter/error.py +16 -16
- novelwriter/extensions/configlayout.py +24 -20
- novelwriter/extensions/eventfilters.py +9 -5
- novelwriter/extensions/modified.py +34 -15
- novelwriter/extensions/novelselector.py +18 -5
- novelwriter/extensions/pagedsidebar.py +39 -49
- novelwriter/extensions/progressbars.py +10 -8
- novelwriter/extensions/statusled.py +6 -13
- novelwriter/extensions/switch.py +31 -41
- novelwriter/extensions/switchbox.py +8 -3
- novelwriter/extensions/versioninfo.py +4 -4
- novelwriter/formats/shared.py +1 -1
- novelwriter/formats/todocx.py +14 -10
- novelwriter/formats/tohtml.py +7 -5
- novelwriter/formats/tokenizer.py +37 -33
- novelwriter/formats/tomarkdown.py +6 -2
- novelwriter/formats/toodt.py +27 -22
- novelwriter/formats/toqdoc.py +19 -14
- novelwriter/formats/toraw.py +6 -2
- novelwriter/gui/doceditor.py +314 -305
- novelwriter/gui/dochighlight.py +46 -45
- novelwriter/gui/docviewer.py +102 -104
- novelwriter/gui/docviewerpanel.py +47 -51
- novelwriter/gui/editordocument.py +8 -5
- novelwriter/gui/itemdetails.py +11 -14
- novelwriter/gui/mainmenu.py +146 -145
- novelwriter/gui/noveltree.py +246 -406
- novelwriter/gui/outline.py +141 -72
- novelwriter/gui/projtree.py +139 -132
- novelwriter/gui/search.py +34 -31
- novelwriter/gui/sidebar.py +13 -18
- novelwriter/gui/statusbar.py +27 -21
- novelwriter/gui/theme.py +554 -436
- novelwriter/guimain.py +56 -38
- novelwriter/shared.py +32 -23
- novelwriter/splash.py +74 -0
- novelwriter/text/comments.py +70 -0
- novelwriter/text/patterns.py +4 -4
- novelwriter/tools/dictionaries.py +20 -29
- novelwriter/tools/lipsum.py +18 -18
- novelwriter/tools/manusbuild.py +39 -42
- novelwriter/tools/manuscript.py +102 -115
- novelwriter/tools/manussettings.py +129 -102
- novelwriter/tools/noveldetails.py +60 -72
- novelwriter/tools/welcome.py +57 -75
- novelwriter/tools/writingstats.py +112 -102
- novelwriter/types.py +5 -7
- {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/METADATA +6 -6
- novelwriter-2.7.dist-info/RECORD +162 -0
- {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/WHEEL +1 -1
- novelWriter-2.6.3.dist-info/RECORD +0 -363
- novelwriter/assets/icons/typicons_dark/README.md +0 -29
- novelwriter/assets/icons/typicons_dark/icons.conf +0 -134
- novelwriter/assets/icons/typicons_dark/mixed_copy.svg +0 -4
- novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-new.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_document-note.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-scene.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-section.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-title.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_edit.svg +0 -4
- novelwriter/assets/icons/typicons_dark/mixed_import.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-none.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h2.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h3.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h4.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-noveltree-more.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_font.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_panel.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_quote.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-case.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-preserve.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-regex.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-word.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-mark.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_book-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_book.svg +0 -6
- novelwriter/assets/icons/typicons_dark/typ_bookmark.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_calendar.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cancel-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cancel.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chart-bar-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-down.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-left.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-right.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-up.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cog.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_delete-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_delete.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_directions-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_document-add.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_document-text.svg +0 -8
- novelwriter/assets/icons/typicons_dark/typ_document.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_export-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_export.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_eye.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_flag.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_folder-open.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_folder.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_globe-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_key.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_lightbulb-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_location.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-pause-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-record-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-record.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_minus.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_pencil.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_pin-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_pin.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_plus.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_puzzle-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_puzzle.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_refresh-flipped.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_refresh.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_search-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_search.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_star.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_stopwatch-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-dot-more.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-list.svg +0 -9
- novelwriter/assets/icons/typicons_dark/typ_times.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_trash.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_user.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_warning-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/README.md +0 -29
- novelwriter/assets/icons/typicons_light/icons.conf +0 -134
- novelwriter/assets/icons/typicons_light/mixed_copy.svg +0 -4
- novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-new.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_document-note.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-scene.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-section.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-title.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_edit.svg +0 -4
- novelwriter/assets/icons/typicons_light/mixed_import.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-checked.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-none.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_search-replace.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_size-height.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_size-width.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_deco-h0.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h1.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h2.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h3.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h4.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-note.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-noveltree-more.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_font.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_panel.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_quote.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-case.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-preserve.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-regex.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-word.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-mark.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_toolbar.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_book-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_book.svg +0 -6
- novelwriter/assets/icons/typicons_light/typ_bookmark.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_calendar.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cancel-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cancel.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chart-bar-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-down.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-left.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-right.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-up.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cog.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_delete-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_delete.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_directions-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_document-add.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_document-text.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_document.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_export-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_export.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_eye.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_flag.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_folder-open.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_folder.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_globe-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_key.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_lightbulb-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_location.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-pause-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-record-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-record.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_minus.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_pencil.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_pin-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_pin.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_plus.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_puzzle-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_puzzle.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_refresh-flipped.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_refresh.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_search-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_search.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_star.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_stopwatch-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-dot-more.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-list.svg +0 -9
- novelwriter/assets/icons/typicons_light/typ_times.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_trash.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_user.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_warning-full.svg +0 -4
- {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.6.3.dist-info → novelwriter-2.7.dist-info/licenses}/LICENSE.md +0 -0
- {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
|
33
|
-
from
|
34
|
-
from
|
35
|
-
|
36
|
-
|
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:
|
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(
|
87
|
-
self.setMinimumHeight(
|
85
|
+
self.setMinimumWidth(420)
|
86
|
+
self.setMinimumHeight(400)
|
88
87
|
self.resize(
|
89
|
-
|
90
|
-
|
88
|
+
pOptions.getInt("GuiWritingStats", "winWidth", 550),
|
89
|
+
pOptions.getInt("GuiWritingStats", "winHeight", 500),
|
91
90
|
)
|
92
91
|
|
93
92
|
# List Box
|
94
|
-
wCol0 =
|
95
|
-
|
96
|
-
)
|
97
|
-
|
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",
|
120
|
+
pOptions.getInt("GuiWritingStats", "sortOrder", 1), (0, 1), 1
|
132
121
|
)
|
133
|
-
|
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 =
|
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
|
-
|
202
|
-
self.
|
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.
|
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.
|
208
|
-
self.
|
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.
|
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
|
-
|
214
|
-
self.
|
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.
|
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.
|
220
|
-
self.
|
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.
|
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
|
-
|
226
|
-
self.
|
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.
|
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
|
-
|
232
|
-
self.
|
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.
|
236
|
-
|
237
|
-
self.
|
238
|
-
|
239
|
-
self.filterForm.addWidget(
|
240
|
-
self.filterForm.addWidget(
|
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
|
-
|
334
|
-
|
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 =
|
341
|
-
incNovel = self.
|
342
|
-
incNotes = self.
|
343
|
-
hideZeros = self.
|
344
|
-
hideNegative = self.
|
345
|
-
groupByDay = self.
|
346
|
-
showIdleTime = self.
|
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",
|
352
|
-
pOptions.setValue("GuiWritingStats", "winHeight",
|
353
|
-
pOptions.setValue("GuiWritingStats", "widthCol0",
|
354
|
-
pOptions.setValue("GuiWritingStats", "widthCol1",
|
355
|
-
pOptions.setValue("GuiWritingStats", "widthCol2",
|
356
|
-
pOptions.setValue("GuiWritingStats", "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"
|
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.
|
504
|
-
incNotes = self.
|
505
|
-
hideZeros = self.
|
506
|
-
hideNegative = self.
|
507
|
-
groupByDay = self.
|
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.
|
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 = "
|
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
|
27
|
-
from
|
28
|
-
|
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.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: novelWriter
|
3
|
-
Version: 2.
|
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.
|
23
|
+
Requires-Python: >=3.10
|
25
24
|
Description-Content-Type: text/markdown
|
26
25
|
License-File: LICENSE.md
|
27
|
-
Requires-Dist:
|
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.
|
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,,
|