novelWriter 2.4rc1__tar.gz → 2.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/CHANGELOG.md +110 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/PKG-INFO +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/README.md +4 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelWriter.egg-info/PKG-INFO +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelWriter.egg-info/SOURCES.txt +1 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/__init__.py +13 -6
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_de_DE.qm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_en_US.qm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_es_419.qm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_it_IT.qm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
- novelwriter-2.4.2/novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- novelwriter-2.4.2/novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
- novelwriter-2.4.2/novelwriter/assets/manual.pdf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/sample.zip +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/common.py +5 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/config.py +4 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/buildsettings.py +7 -7
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/docbuild.py +2 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/projectxml.py +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/spellcheck.py +3 -3
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/tokenizer.py +3 -3
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/toodt.py +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/preferences.py +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/projectsettings.py +2 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/wordlist.py +2 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/error.py +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/doceditor.py +30 -27
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/dochighlight.py +22 -5
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/docviewer.py +3 -3
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/mainmenu.py +2 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/noveltree.py +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/outline.py +9 -9
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/projtree.py +1 -1
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/search.py +2 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/theme.py +15 -5
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/guimain.py +2 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/shared.py +16 -4
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/text/counting.py +1 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/dictionaries.py +2 -2
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/manusbuild.py +12 -11
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/manuscript.py +49 -44
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/manussettings.py +27 -29
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/welcome.py +4 -5
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/pkgutils.py +78 -53
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/pyproject.toml +19 -0
- novelwriter-2.4.2/setup/launchpad_setup.cfg +48 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/build.sh +22 -9
- novelWriter-2.4rc1/novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- novelWriter-2.4rc1/novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
- novelWriter-2.4rc1/novelwriter/assets/manual.pdf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/CREDITS.md +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/LICENSE.md +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/MANIFEST.in +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelWriter.egg-info/dependency_links.txt +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelWriter.egg-info/entry_points.txt +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelWriter.egg-info/requires.txt +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelWriter.egg-info/top_level.txt +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_de_DE.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_en_GB.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_en_US.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_es_419.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_fr_FR.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_it_IT.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_ja_JP.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_nb_NO.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_nl_NL.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_nn_NO.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_pt_BR.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_ru_RU.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/i18n/project_zh_CN.json +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/none.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/novelwriter.ico +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/novelwriter.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/README.md +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/icons.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_document-new.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_document-note.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_document-scene.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_document-section.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_document-title.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_edit.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_import.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_input-none.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h2.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h3.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-h4.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_deco-noveltree-more.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_panel.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_search-case.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_search-preserve.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_search-regex.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_search-word.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-mark.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_book-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_book.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_bookmark.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_calendar.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_cancel-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_cancel.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_chart-bar-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_chevron-down.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_chevron-left.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_chevron-right.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_chevron-up.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_cog.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_delete-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_delete.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_directions-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_document-add.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_document-text.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_document.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_export-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_export.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_eye.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_flag.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_folder-open.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_folder.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_globe-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_key.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_lightbulb-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_location.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_media-pause-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_media-record-outline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_media-record.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_minus.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_pencil.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_pin-outline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_pin.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_plus.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_puzzle-outline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_puzzle.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_refresh-flipped.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_refresh.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_search-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_search.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_star.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_stopwatch-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_th-dot-more.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_th-list.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_times.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_trash.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_user.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_dark/typ_warning-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/README.md +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/icons.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_document-new.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_document-note.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_document-scene.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_document-section.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_document-title.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_edit.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_import.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_input-checked.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_input-none.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/mixed_search-replace.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h0.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h1.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h2.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h3.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-h4.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-note.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_deco-noveltree-more.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_panel.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_search-case.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_search-preserve.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_search-regex.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_search-word.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-mark.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_book-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_book.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_bookmark.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_calendar.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_cancel-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_cancel.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_chart-bar-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_chevron-down.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_chevron-left.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_chevron-right.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_chevron-up.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_cog.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_delete-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_delete.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_directions-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_document-add.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_document-text.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_document.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_export-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_export.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_eye.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_flag.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_folder-open.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_folder.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_globe-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_key.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_lightbulb-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_location.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_media-pause-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_media-record-outline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_media-record.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_minus.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_pencil.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_pin-outline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_pin.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_plus.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_puzzle-outline.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_puzzle.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_refresh-flipped.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_refresh.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_search-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_search.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_star.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_stopwatch-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_th-dot-more.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_th-list.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_times.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_trash.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_user.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/typicons_light/typ_warning-full.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/x-novelwriter-project.ico +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/icons/x-novelwriter-project.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/images/novelwriter-text-dark.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/images/novelwriter-text-light.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/images/welcome-dark.jpg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/images/welcome-light.jpg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/cyberpunk_night.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/default_dark.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/default_light.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/grey_dark.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/grey_light.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/light_owl.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/night_owl.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/solarized_dark.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/solarized_light.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/tango.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/tomorrow.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/tomorrow_night.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/tomorrow_night_blue.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/tomorrow_night_bright.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/syntax/tomorrow_night_eighties.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/text/credits_en.htm +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/text/lipsum.txt +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/themes/cyberpunk_night.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/themes/default.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/themes/default_dark.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/themes/default_light.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/themes/solarized_dark.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/assets/themes/solarized_light.conf +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/constants.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/coretools.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/document.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/index.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/item.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/options.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/project.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/projectdata.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/sessions.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/status.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/storage.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/tohtml.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/tomd.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/core/tree.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/about.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/docmerge.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/docsplit.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/editlabel.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/dialogs/quotes.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/enum.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/circularprogress.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/configlayout.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/eventfilters.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/modified.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/novelselector.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/pagedsidebar.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/simpleprogress.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/statusled.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/switch.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/switchbox.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/extensions/versioninfo.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/docviewerpanel.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/editordocument.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/itemdetails.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/sidebar.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/gui/statusbar.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/lipsum.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/noveldetails.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/tools/writingstats.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/novelwriter/types.py +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/appimage_launcher.sh +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/128x128/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/128x128/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/16x16/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/16x16/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/24x24/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/24x24/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/256x256/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/256x256/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/32x32/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/32x32/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/48x48/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/48x48/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/512x512/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/512x512/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/64x64/apps/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/64x64/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/scalable/apps/novelwriter.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/hicolor/scalable/mimetypes/application-x-novelwriter-project.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/novelwriter.desktop +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/novelwriter.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/data/x-novelwriter-project.xml +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/debian/compat +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/debian/control +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/debian/copyright +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/debian/install +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/debian/py3dist-overrides +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/debian/rules +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/debian/source/format +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/description_pypi.md +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/description_short.txt +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/icons/novelwriter.ico +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/icons/novelwriter.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/icons/x-novelwriter-project.ico +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/icons/x-novelwriter-project.svg +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/iss_license.txt +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/App.entitlements +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/Info.plist.template +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_128x128.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_128x128@2x.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_16x16.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_16x16@2x.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_256x256.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_256x256@2x.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_32x32.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_32x32@2x.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_512x512.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/macos/novelwriter.iconset/icon_512x512@2x.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/make_clean.sh +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/make_pip.sh +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/make_release.sh +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/novelwriter.appdata.xml +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/novelwriter_readme.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/novelwriter_text.png +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/win_setup_embed.iss +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/windows_install.bat +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup/windows_uninstall.bat +0 -0
- {novelWriter-2.4rc1 → novelwriter-2.4.2}/setup.cfg +0 -0
@@ -1,5 +1,115 @@
|
|
1
1
|
# novelWriter Changelog
|
2
2
|
|
3
|
+
## Version 2.4.2 [2024-05-18]
|
4
|
+
|
5
|
+
### Release Notes
|
6
|
+
|
7
|
+
This is a patch release that fixes two minor font issues and updates the Dutch and Chinese
|
8
|
+
translations.
|
9
|
+
|
10
|
+
### Detailed Changelog
|
11
|
+
|
12
|
+
**Bugfixes**
|
13
|
+
|
14
|
+
* Change the preview widget in the Manuscript Build tool to use the document font only for the
|
15
|
+
document itself, not the yellow heading stating the age of the previewed text. PR #1863.
|
16
|
+
* Fixes the syntax highlighter so that it is re-initialised when the document editor is
|
17
|
+
re-initialised, so that changes to document font size regenerates the heading font sizes as well.
|
18
|
+
Issue #1865. PR #1866.
|
19
|
+
|
20
|
+
**Internationalisation**
|
21
|
+
|
22
|
+
* Dutch translation updated by Martijn van der Kleijn (@mvdkleijn). PR #1872.
|
23
|
+
* Chinese translation updated by @longqzh. PR #1872.
|
24
|
+
|
25
|
+
----
|
26
|
+
|
27
|
+
## Version 2.4.1 [2024-05-06]
|
28
|
+
|
29
|
+
### Release Notes
|
30
|
+
|
31
|
+
This is a patch release that fixes a number of minor issues with the Manuscript Build tool. The
|
32
|
+
only critical fix is related to a potential crash when deleting a build entry when its settings
|
33
|
+
dialog is still open.
|
34
|
+
|
35
|
+
### Detailed Changelog
|
36
|
+
|
37
|
+
**Bugfixes**
|
38
|
+
|
39
|
+
* Fixed an issue that could crash novelWriter if a build settings entry was deleted from the
|
40
|
+
Manuscript tool while its settings window was open. PR #1845.
|
41
|
+
|
42
|
+
**Improvements**
|
43
|
+
|
44
|
+
* Changed the font used for the document editor and viewer header and footer from the one used for
|
45
|
+
the document text to the one used for the user interface. Issue #1842. PR #1843.
|
46
|
+
* Added a save document step in the editor before running a manuscript build or a preview job. This
|
47
|
+
ensures that the text in the editor is included in the manuscript. Issue #1835. PR #1846.
|
48
|
+
* Restore preview panel scroll bar position after updating the preview on the Manuscript tool.
|
49
|
+
Issue #1837. PR #1846.
|
50
|
+
* Close all non-modal dialogs when a project is closed. PR #1848.
|
51
|
+
|
52
|
+
**Code Improvements**
|
53
|
+
|
54
|
+
* Fixed an issue with the Build Settings dialog that blocks the garbage collector from deleting the
|
55
|
+
dialog after it's been closed. PR #1843.
|
56
|
+
* Remove some deprecated translation entries from the translation files. PR #1850.
|
57
|
+
|
58
|
+
----
|
59
|
+
|
60
|
+
## Version 2.4 [2024-04-20]
|
61
|
+
|
62
|
+
### Release Notes
|
63
|
+
|
64
|
+
This release adds a new global search feature. The tool is still relatively basic, and will likely
|
65
|
+
be extended in later releases.
|
66
|
+
|
67
|
+
Among new text editing features is the ability to highlight text using `[m]text[/m]` shortcodes.
|
68
|
+
The code `[m]` is for "mark", which is the equivalent code in HTML.
|
69
|
+
|
70
|
+
A second feature added for text editing is the ability to add an alternatively formatted scene
|
71
|
+
heading by adding a `!` to the markup, like for chapters and main titles. This allows to
|
72
|
+
distinguish between two scene formatting styles, `### Title` and `###! Title`, which can for
|
73
|
+
instance be used for soft and hard scene breaks.
|
74
|
+
|
75
|
+
The **Manuscript Build** tool has also been extended with multiple new formatting options.
|
76
|
+
|
77
|
+
See the website for complete [Release Notes](https://novelwriter.io/releases/release_2_4.html).
|
78
|
+
|
79
|
+
### Detailed Changelog
|
80
|
+
|
81
|
+
**Bugfixes**
|
82
|
+
|
83
|
+
* Fixed background colour on some widgets on the new Project Search tool. PR #1800.
|
84
|
+
* Fixed a bug when using bold/italic/strike through toggle on an existing text selection in the
|
85
|
+
editor. Issue #1807. PR #1808.
|
86
|
+
* An index out of bounds error in the word counter has been fixed. It could only be triggered by a
|
87
|
+
single line only containing a ">" character. Issues #1816 and #1825. PR #1817.
|
88
|
+
* Fixed an issue where not all theme colours were completely reset before changing theme. PR #1820.
|
89
|
+
* Shortcodes are no longer passed to the spell checker. PR #1823.
|
90
|
+
|
91
|
+
**Improvements**
|
92
|
+
|
93
|
+
* Made placeholder text for search read as "Search for" and "Replace with". PR #1799.
|
94
|
+
* The initial count for adding chapter and scenes to new project in the Welcome dialog has been
|
95
|
+
changed to 0. The user must now select to add chapters and scenes. Issue #1811. PR #1815.
|
96
|
+
|
97
|
+
**Documentation**
|
98
|
+
|
99
|
+
* Updated the documentation for 2.4 features. PR #1818.
|
100
|
+
|
101
|
+
**Internationalisation**
|
102
|
+
|
103
|
+
* Norwegian and US English translations updated by Veronica Berglyd Olsen (@vkbo).
|
104
|
+
PRs #1799 and #1814.
|
105
|
+
* Latin American Spanish translation updated by Tommy Marplatt (@tmarplatt). PR #1814.
|
106
|
+
* Italian translation updated by Lou Cyper (loucyper1). PR #1814.
|
107
|
+
* Japanese translation updated by @hebekeg. PR #1814.
|
108
|
+
* French translation updated by Albert Aribaud (@aaribaud). PR #1821.
|
109
|
+
* German translation updated by Myian (@HeyMyian). PR #1821.
|
110
|
+
|
111
|
+
----
|
112
|
+
|
3
113
|
## Version 2.4 RC 1 [2024-04-06]
|
4
114
|
|
5
115
|
### Release Notes
|
@@ -49,6 +49,10 @@ code, please also read the full
|
|
49
49
|
|
50
50
|
Project credits are available in [CREDITS.md](https://github.com/vkbo/novelWriter/blob/main/CREDITS.md).
|
51
51
|
|
52
|
+
**Note:** As of April 2024 only pre-releases are made from the `main` branch. Full releases are
|
53
|
+
made from the `release` branch. So if you're submitting a fix to a current release, **including
|
54
|
+
changes to documentation**, they must be made to the `release` branch.
|
55
|
+
|
52
56
|
### Translations
|
53
57
|
|
54
58
|
New translations are always welcome. This project uses Crowdin to maintain translations, and you
|
@@ -23,16 +23,21 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
23
23
|
"""
|
24
24
|
from __future__ import annotations
|
25
25
|
|
26
|
-
import sys
|
27
26
|
import getopt
|
28
27
|
import logging
|
28
|
+
import sys
|
29
|
+
|
30
|
+
from typing import TYPE_CHECKING
|
29
31
|
|
30
32
|
from PyQt5.QtWidgets import QApplication, QErrorMessage
|
31
33
|
|
32
|
-
from novelwriter.error import exceptionHandler, logException
|
33
34
|
from novelwriter.config import Config
|
35
|
+
from novelwriter.error import exceptionHandler, logException
|
34
36
|
from novelwriter.shared import SharedData
|
35
37
|
|
38
|
+
if TYPE_CHECKING: # pragma: no cover
|
39
|
+
from novelwriter.guimain import GuiMain
|
40
|
+
|
36
41
|
# Package Meta
|
37
42
|
# ============
|
38
43
|
|
@@ -42,9 +47,9 @@ __license__ = "GPLv3"
|
|
42
47
|
__author__ = "Veronica Berglyd Olsen"
|
43
48
|
__maintainer__ = "Veronica Berglyd Olsen"
|
44
49
|
__email__ = "code@vkbo.net"
|
45
|
-
__version__ = "2.
|
46
|
-
__hexversion__ = "
|
47
|
-
__date__ = "2024-
|
50
|
+
__version__ = "2.4.2"
|
51
|
+
__hexversion__ = "0x020402f0"
|
52
|
+
__date__ = "2024-05-18"
|
48
53
|
__status__ = "Stable"
|
49
54
|
__domain__ = "novelwriter.io"
|
50
55
|
|
@@ -60,7 +65,7 @@ CONFIG = Config()
|
|
60
65
|
SHARED = SharedData()
|
61
66
|
|
62
67
|
|
63
|
-
def main(sysArgs: list | None = None):
|
68
|
+
def main(sysArgs: list | None = None) -> GuiMain | None:
|
64
69
|
"""Parse command line, set up logging, and launch main GUI."""
|
65
70
|
if sysArgs is None:
|
66
71
|
sysArgs = sys.argv[1:]
|
@@ -239,4 +244,6 @@ def main(sysArgs: list | None = None):
|
|
239
244
|
|
240
245
|
sys.exit(nwApp.exec())
|
241
246
|
|
247
|
+
return None
|
248
|
+
|
242
249
|
# END Function main
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -449,7 +449,7 @@ def xmlIndent(tree: ET.Element | ET.ElementTree) -> None:
|
|
449
449
|
|
450
450
|
indentations = ["\n"]
|
451
451
|
|
452
|
-
def indentChildren(elem, level):
|
452
|
+
def indentChildren(elem: ET.Element, level: int) -> None:
|
453
453
|
chLevel = level + 1
|
454
454
|
try:
|
455
455
|
chIndent = indentations[chLevel]
|
@@ -472,6 +472,8 @@ def xmlIndent(tree: ET.Element | ET.ElementTree) -> None:
|
|
472
472
|
if last is not None:
|
473
473
|
last.tail = indentations[level]
|
474
474
|
|
475
|
+
return
|
476
|
+
|
475
477
|
if len(tree):
|
476
478
|
indentChildren(tree, 0)
|
477
479
|
tree.tail = "\n"
|
@@ -534,8 +536,9 @@ class NWConfigParser(ConfigParser):
|
|
534
536
|
helper functions, and support for lists.
|
535
537
|
"""
|
536
538
|
|
537
|
-
def __init__(self):
|
539
|
+
def __init__(self) -> None:
|
538
540
|
super().__init__()
|
541
|
+
return
|
539
542
|
|
540
543
|
def rdStr(self, section: str, option: str, default: str) -> str:
|
541
544
|
"""Read string value."""
|
@@ -390,6 +390,10 @@ class Config:
|
|
390
390
|
"""Un-scale fixed gui sizes by the screen scale factor."""
|
391
391
|
return int(value/self.guiScale)
|
392
392
|
|
393
|
+
def homePath(self) -> Path:
|
394
|
+
"""The user's home folder."""
|
395
|
+
return self._homePath
|
396
|
+
|
393
397
|
def dataPath(self, target: str | None = None) -> Path:
|
394
398
|
"""Return a path in the data folder."""
|
395
399
|
if isinstance(target, str):
|
@@ -56,13 +56,13 @@ SETTINGS_TEMPLATE = {
|
|
56
56
|
"headings.fmtChapter": (str, nwHeadFmt.TITLE),
|
57
57
|
"headings.fmtUnnumbered": (str, nwHeadFmt.TITLE),
|
58
58
|
"headings.fmtScene": (str, "* * *"),
|
59
|
-
"headings.
|
59
|
+
"headings.fmtAltScene": (str, ""),
|
60
60
|
"headings.fmtSection": (str, ""),
|
61
61
|
"headings.hideTitle": (bool, False),
|
62
62
|
"headings.hideChapter": (bool, False),
|
63
63
|
"headings.hideUnnumbered": (bool, False),
|
64
64
|
"headings.hideScene": (bool, False),
|
65
|
-
"headings.
|
65
|
+
"headings.hideAltScene": (bool, False),
|
66
66
|
"headings.hideSection": (bool, True),
|
67
67
|
"headings.centerTitle": (bool, True),
|
68
68
|
"headings.centerChapter": (bool, False),
|
@@ -110,7 +110,7 @@ SETTINGS_LABELS = {
|
|
110
110
|
"headings.fmtChapter": QT_TRANSLATE_NOOP("Builds", "Chapter Format"),
|
111
111
|
"headings.fmtUnnumbered": QT_TRANSLATE_NOOP("Builds", "Unnumbered Format"),
|
112
112
|
"headings.fmtScene": QT_TRANSLATE_NOOP("Builds", "Scene Format"),
|
113
|
-
"headings.
|
113
|
+
"headings.fmtAltScene": QT_TRANSLATE_NOOP("Builds", "Alt. Scene Format"),
|
114
114
|
"headings.fmtSection": QT_TRANSLATE_NOOP("Builds", "Section Format"),
|
115
115
|
|
116
116
|
"text.grpContent": QT_TRANSLATE_NOOP("Builds", "Text Content"),
|
@@ -178,7 +178,7 @@ class BuildSettings:
|
|
178
178
|
def __init__(self) -> None:
|
179
179
|
self._name = ""
|
180
180
|
self._uuid = str(uuid.uuid4())
|
181
|
-
self._path =
|
181
|
+
self._path = CONFIG.homePath()
|
182
182
|
self._build = ""
|
183
183
|
self._order = 0
|
184
184
|
self._format = nwBuildFmt.ODT
|
@@ -220,7 +220,7 @@ class BuildSettings:
|
|
220
220
|
"""The last used build path."""
|
221
221
|
if self._path.is_dir():
|
222
222
|
return self._path
|
223
|
-
return
|
223
|
+
return CONFIG.homePath()
|
224
224
|
|
225
225
|
@property
|
226
226
|
def lastBuildName(self) -> str:
|
@@ -297,7 +297,7 @@ class BuildSettings:
|
|
297
297
|
if isinstance(path, Path) and path.is_dir():
|
298
298
|
self._path = path
|
299
299
|
else:
|
300
|
-
self._path =
|
300
|
+
self._path = CONFIG.homePath()
|
301
301
|
self._changed = True
|
302
302
|
return
|
303
303
|
|
@@ -382,7 +382,7 @@ class BuildSettings:
|
|
382
382
|
|
383
383
|
postponed = []
|
384
384
|
|
385
|
-
def allowRoot(rHandle):
|
385
|
+
def allowRoot(rHandle: str | None) -> None:
|
386
386
|
if rHandle in postponed and rHandle in result and rHandle is not None:
|
387
387
|
result[rHandle] = (True, FilterMode.ROOT)
|
388
388
|
postponed.remove(rHandle)
|
@@ -306,8 +306,8 @@ class NWBuildDocument:
|
|
306
306
|
self._build.getBool("headings.hideScene")
|
307
307
|
)
|
308
308
|
bldObj.setHardSceneFormat(
|
309
|
-
self._build.getStr("headings.
|
310
|
-
self._build.getBool("headings.
|
309
|
+
self._build.getStr("headings.fmtAltScene"),
|
310
|
+
self._build.getBool("headings.hideAltScene")
|
311
311
|
)
|
312
312
|
bldObj.setSectionFormat(
|
313
313
|
self._build.getStr("headings.fmtSection"),
|
@@ -449,7 +449,7 @@ class ProjectXMLReader:
|
|
449
449
|
result[xEntry.attrib["key"]] = checkString(xEntry.text, "")
|
450
450
|
return result
|
451
451
|
|
452
|
-
def _parseDictTagText(self, xItem) -> dict:
|
452
|
+
def _parseDictTagText(self, xItem: ET.Element) -> dict:
|
453
453
|
"""Parse a dictionary stored with key as the tag and the value
|
454
454
|
as the text property.
|
455
455
|
"""
|
@@ -74,7 +74,7 @@ class NWSpellEnchant:
|
|
74
74
|
# Setters
|
75
75
|
##
|
76
76
|
|
77
|
-
def setLanguage(self, language: str | None):
|
77
|
+
def setLanguage(self, language: str | None) -> None:
|
78
78
|
"""Load a dictionary for the language specified in the config.
|
79
79
|
If that fails, we load a mock dictionary so that lookups don't
|
80
80
|
crash. Note that enchant will allow loading an empty string as
|
@@ -182,10 +182,10 @@ class FakeEnchant:
|
|
182
182
|
def check(self, word: str) -> bool:
|
183
183
|
return True
|
184
184
|
|
185
|
-
def suggest(self, word) -> list[str]:
|
185
|
+
def suggest(self, word: str) -> list[str]:
|
186
186
|
return []
|
187
187
|
|
188
|
-
def add_to_session(self, word: str):
|
188
|
+
def add_to_session(self, word: str) -> None:
|
189
189
|
return
|
190
190
|
|
191
191
|
# END Class FakeEnchant
|
@@ -49,7 +49,7 @@ ESCAPES = {r"\*": "*", r"\~": "~", r"\_": "_", r"\[": "[", r"\]": "]", r"\ ": ""
|
|
49
49
|
RX_ESC = re.compile("|".join([re.escape(k) for k in ESCAPES.keys()]), flags=re.DOTALL)
|
50
50
|
|
51
51
|
|
52
|
-
def stripEscape(text) -> str:
|
52
|
+
def stripEscape(text: str) -> str:
|
53
53
|
"""Strip escaped Markdown characters from paragraph text."""
|
54
54
|
if "\\" in text:
|
55
55
|
return RX_ESC.sub(lambda x: ESCAPES[x.group(0)], text)
|
@@ -639,8 +639,8 @@ class Tokenizer(ABC):
|
|
639
639
|
tmpMarkdown.append(f"{aLine}\n")
|
640
640
|
|
641
641
|
elif aLine.startswith(("### ", "###! ")):
|
642
|
-
# (
|
643
|
-
#
|
642
|
+
# (Alternative) Scene Headings
|
643
|
+
# ============================
|
644
644
|
# Scene headings in novel documents are treated as centred
|
645
645
|
# separators if the formatting does not change the text. If the
|
646
646
|
# format is empty, the scene can be hidden or a blank paragraph
|
@@ -548,7 +548,7 @@ class ToOdt(Tokenizer):
|
|
548
548
|
oVers = _mkTag("office", "version")
|
549
549
|
xSett = ET.Element(oRoot, attrib={oVers: X_VERS})
|
550
550
|
|
551
|
-
def putInZip(name, xObj, zipObj):
|
551
|
+
def putInZip(name: str, xObj: ET.Element, zipObj: ZipFile) -> None:
|
552
552
|
with zipObj.open(name, mode="w") as fObj:
|
553
553
|
xml = ET.ElementTree(xObj)
|
554
554
|
xml.write(fObj, encoding="utf-8", xml_declaration=True)
|
@@ -795,7 +795,7 @@ class GuiPreferences(QDialog):
|
|
795
795
|
return
|
796
796
|
|
797
797
|
@pyqtSlot()
|
798
|
-
def _selectTextFont(self):
|
798
|
+
def _selectTextFont(self) -> None:
|
799
799
|
"""Open the QFontDialog and set a font for the font style."""
|
800
800
|
current = QFont()
|
801
801
|
current.setFamily(CONFIG.textFont)
|
@@ -257,17 +257,17 @@ class _SettingsPage(NScrollableForm):
|
|
257
257
|
)
|
258
258
|
|
259
259
|
# Project Language
|
260
|
+
projLang = data.language or CONFIG.guiLocale
|
260
261
|
self.projLang = NComboBox(self)
|
261
262
|
self.projLang.setMinimumWidth(xW)
|
262
263
|
for tag, language in CONFIG.listLanguages(CONFIG.LANG_PROJ):
|
263
264
|
self.projLang.addItem(language, tag)
|
265
|
+
self.projLang.setCurrentData(projLang, projLang)
|
264
266
|
self.addRow(
|
265
267
|
self.tr("Project language"), self.projLang,
|
266
268
|
self.tr("Only used when building the manuscript."),
|
267
269
|
stretch=(3, 2)
|
268
270
|
)
|
269
|
-
if (idx := self.projLang.findData(data.language)) != -1:
|
270
|
-
self.projLang.setCurrentIndex(idx)
|
271
271
|
|
272
272
|
# Spell Check Language
|
273
273
|
self.spellLang = NComboBox(self)
|
@@ -190,7 +190,7 @@ class GuiWordList(QDialog):
|
|
190
190
|
))
|
191
191
|
ffilter = formatFileFilter(["*.txt", "*"])
|
192
192
|
path, _ = QFileDialog.getOpenFileName(
|
193
|
-
self, self.tr("Import File"), str(
|
193
|
+
self, self.tr("Import File"), str(CONFIG.homePath()), filter=ffilter
|
194
194
|
)
|
195
195
|
if path:
|
196
196
|
try:
|
@@ -207,7 +207,7 @@ class GuiWordList(QDialog):
|
|
207
207
|
def _exportWords(self) -> None:
|
208
208
|
"""Export words to file."""
|
209
209
|
path, _ = QFileDialog.getSaveFileName(
|
210
|
-
self, self.tr("Export File"), str(
|
210
|
+
self, self.tr("Export File"), str(CONFIG.homePath())
|
211
211
|
)
|
212
212
|
if path:
|
213
213
|
try:
|
@@ -39,8 +39,8 @@ from time import time
|
|
39
39
|
from typing import TYPE_CHECKING
|
40
40
|
|
41
41
|
from PyQt5.QtCore import (
|
42
|
-
|
43
|
-
|
42
|
+
QObject, QPoint, QRegExp, QRegularExpression, QRunnable, Qt, QTimer,
|
43
|
+
pyqtSignal, pyqtSlot
|
44
44
|
)
|
45
45
|
from PyQt5.QtGui import (
|
46
46
|
QColor, QCursor, QFont, QKeyEvent, QKeySequence, QMouseEvent, QPalette,
|
@@ -65,7 +65,7 @@ from novelwriter.text.counting import standardCounter
|
|
65
65
|
from novelwriter.tools.lipsum import GuiLipsum
|
66
66
|
from novelwriter.types import (
|
67
67
|
QtAlignCenterTop, QtAlignJustify, QtAlignLeft, QtAlignLeftTop,
|
68
|
-
QtAlignRight, QtKeepAnchor, QtModCtrl,
|
68
|
+
QtAlignRight, QtKeepAnchor, QtModCtrl, QtModeNone, QtModShift, QtMouseLeft,
|
69
69
|
QtMoveAnchor, QtMoveLeft, QtMoveRight
|
70
70
|
)
|
71
71
|
|
@@ -301,8 +301,6 @@ class GuiDocEditor(QPlainTextEdit):
|
|
301
301
|
self.docHeader.matchColours()
|
302
302
|
self.docFooter.matchColours()
|
303
303
|
|
304
|
-
self._qDocument.syntaxHighlighter.initHighlighter()
|
305
|
-
|
306
304
|
return
|
307
305
|
|
308
306
|
def initEditor(self) -> None:
|
@@ -334,7 +332,10 @@ class GuiDocEditor(QPlainTextEdit):
|
|
334
332
|
font = QFont()
|
335
333
|
font.setFamily(CONFIG.textFont)
|
336
334
|
font.setPointSize(CONFIG.textSize)
|
337
|
-
self.
|
335
|
+
self._qDocument.setDefaultFont(font)
|
336
|
+
|
337
|
+
# Update highlighter settings
|
338
|
+
self._qDocument.syntaxHighlighter.initHighlighter()
|
338
339
|
|
339
340
|
# Set default text margins
|
340
341
|
# Due to cursor visibility, a part of the margin must be
|
@@ -381,7 +382,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
381
382
|
|
382
383
|
return
|
383
384
|
|
384
|
-
def loadText(self, tHandle: str, tLine=None) -> bool:
|
385
|
+
def loadText(self, tHandle: str, tLine: int | None = None) -> bool:
|
385
386
|
"""Load text from a document into the editor. If we have an I/O
|
386
387
|
error, we must handle this and clear the editor so that we don't
|
387
388
|
risk overwriting the file if it exists. This can for instance
|
@@ -497,6 +498,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
497
498
|
return False
|
498
499
|
|
499
500
|
self.setDocumentChanged(False)
|
501
|
+
self.docTextChanged.emit(self._docHandle, self._lastEdit)
|
500
502
|
|
501
503
|
oldHeader = self._nwItem.mainHeading
|
502
504
|
oldCount = SHARED.project.index.getHandleHeaderCount(tHandle)
|
@@ -1080,7 +1082,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1080
1082
|
return
|
1081
1083
|
|
1082
1084
|
@pyqtSlot()
|
1083
|
-
def _cursorMoved(self):
|
1085
|
+
def _cursorMoved(self) -> None:
|
1084
1086
|
"""Triggered when the cursor moved in the editor."""
|
1085
1087
|
self.docFooter.updateLineCount(self.textCursor())
|
1086
1088
|
return
|
@@ -1470,7 +1472,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1470
1472
|
# Internal Functions : Text Manipulation
|
1471
1473
|
##
|
1472
1474
|
|
1473
|
-
def _toggleFormat(self, fLen: int, fChar: str) ->
|
1475
|
+
def _toggleFormat(self, fLen: int, fChar: str) -> None:
|
1474
1476
|
"""Toggle the formatting of a specific type for a piece of text.
|
1475
1477
|
If more than one block is selected, the formatting is applied to
|
1476
1478
|
the first block.
|
@@ -1488,12 +1490,12 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1488
1490
|
|
1489
1491
|
posS = cursor.selectionStart()
|
1490
1492
|
posE = cursor.selectionEnd()
|
1491
|
-
if self._qDocument.characterAt(posO - 1) == fChar:
|
1493
|
+
if posS == posE and self._qDocument.characterAt(posO - 1) == fChar:
|
1492
1494
|
logger.warning("Format repetition, cancelling action")
|
1493
1495
|
cursor.clearSelection()
|
1494
1496
|
cursor.setPosition(posO)
|
1495
1497
|
self.setTextCursor(cursor)
|
1496
|
-
return
|
1498
|
+
return
|
1497
1499
|
|
1498
1500
|
blockS = self._qDocument.findBlock(posS)
|
1499
1501
|
blockE = self._qDocument.findBlock(posE)
|
@@ -1519,7 +1521,6 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1519
1521
|
break
|
1520
1522
|
|
1521
1523
|
if fLen == min(numA, numB):
|
1522
|
-
cursor.clearSelection()
|
1523
1524
|
cursor.beginEditBlock()
|
1524
1525
|
cursor.setPosition(posS)
|
1525
1526
|
for i in range(fLen):
|
@@ -1528,17 +1529,19 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1528
1529
|
for i in range(fLen):
|
1529
1530
|
cursor.deletePreviousChar()
|
1530
1531
|
cursor.endEditBlock()
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1532
|
+
|
1533
|
+
if select != _SelectAction.KEEP_SELECTION:
|
1534
|
+
cursor.clearSelection()
|
1535
|
+
cursor.setPosition(posO - fLen)
|
1536
|
+
self.setTextCursor(cursor)
|
1534
1537
|
|
1535
1538
|
else:
|
1536
1539
|
self._wrapSelection(fChar*fLen, pos=posO, select=select)
|
1537
1540
|
|
1538
|
-
return
|
1541
|
+
return
|
1539
1542
|
|
1540
1543
|
def _wrapSelection(self, before: str, after: str | None = None, pos: int | None = None,
|
1541
|
-
select: _SelectAction = _SelectAction.NO_DECISION) ->
|
1544
|
+
select: _SelectAction = _SelectAction.NO_DECISION) -> None:
|
1542
1545
|
"""Wrap the selected text in whatever is in tBefore and tAfter.
|
1543
1546
|
If there is no selection, the autoSelect setting decides the
|
1544
1547
|
action. AutoSelect will select the word under the cursor before
|
@@ -1578,21 +1581,21 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1578
1581
|
if select == _SelectAction.MOVE_AFTER:
|
1579
1582
|
cursor.setPosition(posE + len(before + after))
|
1580
1583
|
elif select == _SelectAction.KEEP_SELECTION:
|
1581
|
-
cursor.setPosition(
|
1582
|
-
cursor.setPosition(
|
1584
|
+
cursor.setPosition(posS + len(before), QtMoveAnchor)
|
1585
|
+
cursor.setPosition(posE + len(before), QtKeepAnchor)
|
1583
1586
|
elif select == _SelectAction.KEEP_POSITION:
|
1584
1587
|
cursor.setPosition(posO + len(before))
|
1585
1588
|
|
1586
1589
|
self.setTextCursor(cursor)
|
1587
1590
|
|
1588
|
-
return
|
1591
|
+
return
|
1589
1592
|
|
1590
|
-
def _replaceQuotes(self, sQuote: str, oQuote: str, cQuote: str) ->
|
1593
|
+
def _replaceQuotes(self, sQuote: str, oQuote: str, cQuote: str) -> None:
|
1591
1594
|
"""Replace all straight quotes in the selected text."""
|
1592
1595
|
cursor = self.textCursor()
|
1593
1596
|
if not cursor.hasSelection():
|
1594
1597
|
SHARED.error(self.tr("Please select some text before calling replace quotes."))
|
1595
|
-
return
|
1598
|
+
return
|
1596
1599
|
|
1597
1600
|
posS = cursor.selectionStart()
|
1598
1601
|
posE = cursor.selectionEnd()
|
@@ -1632,7 +1635,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|
1632
1635
|
|
1633
1636
|
self._allowAutoReplace(True)
|
1634
1637
|
|
1635
|
-
return
|
1638
|
+
return
|
1636
1639
|
|
1637
1640
|
def _processBlockFormat(
|
1638
1641
|
self, action: nwDocAction, text: str, toggle: bool = True
|
@@ -2185,7 +2188,7 @@ class MetaCompleter(QMenu):
|
|
2185
2188
|
# Internal Functions
|
2186
2189
|
##
|
2187
2190
|
|
2188
|
-
def _emitComplete(self, pos: int, length: int, value: str):
|
2191
|
+
def _emitComplete(self, pos: int, length: int, value: str) -> None:
|
2189
2192
|
"""Emit the signal to indicate a selection has been made."""
|
2190
2193
|
self.complete.emit(pos, length, value)
|
2191
2194
|
return
|
@@ -2408,12 +2411,12 @@ class GuiDocEditSearch(QFrame):
|
|
2408
2411
|
|
2409
2412
|
self.searchBox = QLineEdit(self)
|
2410
2413
|
self.searchBox.setFont(self.boxFont)
|
2411
|
-
self.searchBox.setPlaceholderText(self.tr("Search"))
|
2414
|
+
self.searchBox.setPlaceholderText(self.tr("Search for"))
|
2412
2415
|
self.searchBox.returnPressed.connect(self._doSearch)
|
2413
2416
|
|
2414
2417
|
self.replaceBox = QLineEdit(self)
|
2415
2418
|
self.replaceBox.setFont(self.boxFont)
|
2416
|
-
self.replaceBox.setPlaceholderText(self.tr("Replace"))
|
2419
|
+
self.replaceBox.setPlaceholderText(self.tr("Replace with"))
|
2417
2420
|
self.replaceBox.returnPressed.connect(self._doReplace)
|
2418
2421
|
|
2419
2422
|
self.searchOpt = QToolBar(self)
|
@@ -2966,7 +2969,7 @@ class GuiDocEditHeader(QWidget):
|
|
2966
2969
|
# Events
|
2967
2970
|
##
|
2968
2971
|
|
2969
|
-
def mousePressEvent(self, event: QMouseEvent):
|
2972
|
+
def mousePressEvent(self, event: QMouseEvent) -> None:
|
2970
2973
|
"""Capture a click on the title and ensure that the item is
|
2971
2974
|
selected in the project tree.
|
2972
2975
|
"""
|