novelWriter 2.7rc1__tar.gz → 2.7.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.7rc1 → novelwriter-2.7.2}/CHANGELOG.md +107 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/CREDITS.md +4 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/PKG-INFO +3 -4
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelWriter.egg-info/PKG-INFO +3 -4
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelWriter.egg-info/SOURCES.txt +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/__init__.py +3 -3
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_cs_CZ.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_de_DE.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_en_US.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_es_419.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_it_IT.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_cs_CZ.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_de_DE.json +3 -1
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_en_US.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_it_IT.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_ja_JP.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_nb_NO.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_nn_NO.json +5 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_pl_PL.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_pt_BR.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_ru_RU.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_zh_CN.json +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/manual.pdf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/manual_fr.pdf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/sample.zip +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/text/credits_en.htm +6 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/config.py +2 -2
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/constants.py +16 -19
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/buildsettings.py +1 -1
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/index.py +24 -16
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/indexdata.py +9 -3
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/item.py +1 -1
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/todocx.py +2 -2
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/tokenizer.py +45 -39
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/toqdoc.py +10 -8
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/doceditor.py +8 -7
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/docviewer.py +2 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/noveltree.py +1 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/manuscript.py +4 -7
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/manussettings.py +33 -22
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/types.py +1 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/pkgutils.py +6 -18
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/pyproject.toml +4 -4
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/appimage_launcher.sh +1 -1
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/novelwriter.desktop +1 -1
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/debian/control +1 -7
- novelwriter-2.7.2/setup/icons/novelwriter.png +0 -0
- novelwriter-2.7.2/setup/icons/x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/Info.plist.template +1 -1
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/build.sh +4 -4
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/make_pip.sh +1 -1
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/LICENSE.md +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/MANIFEST.in +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/README.md +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelWriter.egg-info/dependency_links.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelWriter.egg-info/entry_points.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelWriter.egg-info/requires.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelWriter.egg-info/top_level.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_en_GB.json +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_es_419.json +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_fr_FR.json +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/i18n/project_nl_NL.json +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/font_awesome.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/material_filled_bold.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/material_filled_normal.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/material_filled_thin.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/material_rounded_bold.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/material_rounded_normal.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/material_rounded_thin.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/none.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/novelwriter.ico +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/novelwriter.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/remix_filled.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/remix_outline.icons +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/x-novelwriter-project.ico +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/icons/x-novelwriter-project.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/images/novelwriter-text-dark.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/images/novelwriter-text-light.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/images/splash.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/images/welcome-dark.jpg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/images/welcome-light.jpg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/cyberpunk_night.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/default_dark.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/default_light.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/dracula.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/grey_dark.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/grey_light.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/light_owl.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/night_owl.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/snazzy.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/solarized_dark.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/solarized_light.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/tango.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/tomorrow.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/tomorrow_night.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/tomorrow_night_blue.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/tomorrow_night_bright.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/syntax/tomorrow_night_eighties.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/text/lipsum.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/cyberpunk_night.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/default.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/default_dark.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/default_light.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/dracula.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/snazzy.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/solarized_dark.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/assets/themes/solarized_light.conf +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/common.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/coretools.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/docbuild.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/document.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/itemmodel.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/novelmodel.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/options.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/project.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/projectdata.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/projectxml.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/sessions.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/spellcheck.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/status.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/storage.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/core/tree.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/about.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/docmerge.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/docsplit.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/editlabel.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/preferences.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/projectsettings.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/quotes.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/dialogs/wordlist.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/enum.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/error.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/configlayout.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/eventfilters.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/modified.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/novelselector.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/pagedsidebar.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/progressbars.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/statusled.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/switch.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/switchbox.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/extensions/versioninfo.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/shared.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/tohtml.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/tomarkdown.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/toodt.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/formats/toraw.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/dochighlight.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/docviewerpanel.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/editordocument.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/itemdetails.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/mainmenu.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/outline.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/projtree.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/search.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/sidebar.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/statusbar.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/gui/theme.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/guimain.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/shared.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/splash.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/text/comments.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/text/counting.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/text/patterns.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/dictionaries.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/lipsum.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/manusbuild.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/noveldetails.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/welcome.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/novelwriter/tools/writingstats.py +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/128x128/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/128x128/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/16x16/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/16x16/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/24x24/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/24x24/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/256x256/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/256x256/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/32x32/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/32x32/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/48x48/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/48x48/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/512x512/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/512x512/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/64x64/apps/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/64x64/mimetypes/application-x-novelwriter-project.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/scalable/apps/novelwriter.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/hicolor/scalable/mimetypes/application-x-novelwriter-project.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/novelwriter.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/data/x-novelwriter-project.xml +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/debian/compat +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/debian/copyright +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/debian/install +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/debian/py3dist-overrides +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/debian/rules +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/debian/source/format +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/description_pypi.md +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/description_short.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/icons/novelwriter.ico +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/icons/novelwriter.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/icons/x-novelwriter-project.ico +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/icons/x-novelwriter-project.svg +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/iss_license.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/App.entitlements +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_128x128.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_128x128@2x.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_16x16.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_16x16@2x.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_256x256.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_256x256@2x.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_32x32.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_32x32@2x.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_512x512.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/macos/novelwriter.iconset/icon_512x512@2x.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/make_clean.sh +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/make_release.sh +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/novelwriter.appdata.xml +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/novelwriter_readme.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/novelwriter_text.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/screenshot.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/signpath_logo.png +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/win_setup_embed.iss +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/windows/CMakeLists.txt +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/windows/launcher.rc +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/windows/main.cpp +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/windows/make.ps1 +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/windows/novelWriter.exe +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup/windows/novelWriter.ico +0 -0
- {novelwriter-2.7rc1 → novelwriter-2.7.2}/setup.cfg +0 -0
@@ -1,5 +1,112 @@
|
|
1
1
|
# novelWriter Changelog
|
2
2
|
|
3
|
+
## Version 2.7.2 [2025-06-24]
|
4
|
+
|
5
|
+
### Release Notes
|
6
|
+
|
7
|
+
This is a patch release that fixes several issues related to DocX and PDF manuscript documents,
|
8
|
+
improves how line breaks, alignment and indentation is processed, and fixes some issues with
|
9
|
+
displaying tags for novel documents on the user interface.
|
10
|
+
|
11
|
+
### Detailed Changelog
|
12
|
+
|
13
|
+
**Bugfixes**
|
14
|
+
|
15
|
+
* Fixed an issue where escaped markup characters were not replaced properly in DocX and PDF
|
16
|
+
documents, and in previews. Issue #2410. PR #2411.
|
17
|
+
* Fixed an issue where titles with line breaks in them would have page breaks applied to both lines
|
18
|
+
for preview and PDF documents. Issue #2415. PR #2416.
|
19
|
+
* Fixed an issue where the justified text setting would not be properly applied to a paragraph in a
|
20
|
+
manuscript document if there was a line break in the paragraph, but single line breaks were set
|
21
|
+
to be ignored. Issue #2426. PR #2427.
|
22
|
+
* Fixed an issue where the "Tag" field of the Outline View details panel remained blank even if a
|
23
|
+
tag was set for the novel document. Issue #2428. PR #2429.
|
24
|
+
|
25
|
+
**Improvements**
|
26
|
+
|
27
|
+
* When comments are enabled in the viewer, story comments should also be visible. A separate filter
|
28
|
+
button will be added for this in 2.8. PR #2420.
|
29
|
+
* When a paragraph has line breaks in it, the alignment tag will now override first line
|
30
|
+
indentation even if the alignment tag is not on the first line. This is more consistent with the
|
31
|
+
alignment behaviour for multi-line paragraphs in general. Issue #2425. PR #2427.
|
32
|
+
* Tags will now be shown in the Novel View tooltip pop-out under the triangle button, together with
|
33
|
+
all the other meta data collected about a document or heading. PR #2429.
|
34
|
+
|
35
|
+
**Documentation**
|
36
|
+
|
37
|
+
* The documentation on how alignment and first line indentation works in conjunction with
|
38
|
+
in-paragraph line breaks, the setting to keep or ignore such line breaks, and the forced line
|
39
|
+
break shortcode, has been improved. Issue #2425. PR #2427.
|
40
|
+
|
41
|
+
----
|
42
|
+
|
43
|
+
## Version 2.7.1 [2025-06-09]
|
44
|
+
|
45
|
+
### Release Notes
|
46
|
+
|
47
|
+
This is a patch release that fixes some issues with tags and references, an issue with the
|
48
|
+
auto-complete menu on Windows, and some issues with the AppImage on Linux. The Czech translation
|
49
|
+
for 2.7 has also been completed.
|
50
|
+
|
51
|
+
### Detailed Changelog
|
52
|
+
|
53
|
+
**Bugfixes**
|
54
|
+
|
55
|
+
* Fix a bug where tags would be listed in the auto-complete menu for mentions even if the file
|
56
|
+
defining it had been moved to Archive or Trash. Issue #2387. PR #2389.
|
57
|
+
* Fixed a bug that seems to only have occurred on Windows where the auto-complete menu would hold
|
58
|
+
on to the return and arrow keys even when it was hidden. Issue #2386. PR #2389.
|
59
|
+
|
60
|
+
**Improvements**
|
61
|
+
|
62
|
+
* The auto-complete menu in the editor no longer shows any suggestions when defining the tag.
|
63
|
+
This never made sense anyway. PR #2389.
|
64
|
+
|
65
|
+
**Internationalisation**
|
66
|
+
|
67
|
+
* Updated the Czech. PR #2393.
|
68
|
+
|
69
|
+
**Packaging**
|
70
|
+
|
71
|
+
* Fixed an issue with the AppImage release where on some platforms `libxcb-cursor0` was missing.
|
72
|
+
The library is now included in the AppImage. Issue #2374. PR #2392.
|
73
|
+
|
74
|
+
----
|
75
|
+
|
76
|
+
## Version 2.7 [2025-06-01]
|
77
|
+
|
78
|
+
### Release Notes
|
79
|
+
|
80
|
+
The 2.7 release updates the 2.7 RC 1 release and makes an improvement to the build settings tool.
|
81
|
+
It also updates most translations and updates the French version of the documentation.
|
82
|
+
|
83
|
+
See the website for complete [Release Notes](https://novelwriter.io/releases/release_2_7.html).
|
84
|
+
|
85
|
+
### Detailed Changelog
|
86
|
+
|
87
|
+
**Improvement**
|
88
|
+
|
89
|
+
* The Manuscript Build Settings dialog now works on a copy of the settings so that if the dialog
|
90
|
+
box is closed without saving, all changes are discarded. It should also now detect any change
|
91
|
+
made to properly raise a confirmation prompt when closing without saving. Issue #2350. PR #2351.
|
92
|
+
|
93
|
+
**Documentation**
|
94
|
+
|
95
|
+
* The user documentation has been restructured, and the Getting Started section has been made less
|
96
|
+
technical. The install instructions have been moved out and into the main website. The technical
|
97
|
+
and in-depth parts of the documentation have been kept, but moved further back so that the
|
98
|
+
documentation can be read from the start and to the point where the user has enough information.
|
99
|
+
The larger sections have also been split up so that it should be easier to find the wanted
|
100
|
+
information directly from the menu. Issue #2345. PR #2355.
|
101
|
+
|
102
|
+
**Internationalisation**
|
103
|
+
|
104
|
+
* Updated US English, Japanese, Norwegian. German, Italian, Polish, Brazilian Portuguese and
|
105
|
+
Chinese translation files. PR #2353.
|
106
|
+
* French documentation updated by @Karduin. Issue #2360. PR #2361.
|
107
|
+
|
108
|
+
----
|
109
|
+
|
3
110
|
## Version 2.7 RC 1 [2025-05-19]
|
4
111
|
|
5
112
|
### Release Notes
|
@@ -39,6 +39,10 @@ Additional larger translation contributions:
|
|
39
39
|
* **French:** Albert Aribaud (aaribaud)
|
40
40
|
* **Portuguese:** Oli Maia (olimaia)
|
41
41
|
|
42
|
+
Translations of the documentation:
|
43
|
+
|
44
|
+
* **French:** Jean-Michel Heras (Karduin)
|
45
|
+
|
42
46
|
Translations are managed on [Crowdin](https://crowdin.com/project/novelwriter), and more
|
43
47
|
contributions are listed on the project's Members page.
|
44
48
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: novelWriter
|
3
|
-
Version: 2.
|
4
|
-
Summary: A
|
3
|
+
Version: 2.7.2
|
4
|
+
Summary: A plain text editor for planning and writing novels
|
5
5
|
Author-email: Veronica Berglyd Olsen <code@vkbo.net>
|
6
|
-
License:
|
6
|
+
License-Expression: GPL-3.0
|
7
7
|
Project-URL: Homepage, https://novelwriter.io
|
8
8
|
Project-URL: Documentation, https://docs.novelwriter.io
|
9
9
|
Project-URL: Repository, https://github.com/vkbo/novelWriter
|
@@ -14,7 +14,6 @@ Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
16
16
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
17
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
18
17
|
Classifier: Development Status :: 5 - Production/Stable
|
19
18
|
Classifier: Operating System :: OS Independent
|
20
19
|
Classifier: Intended Audience :: End Users/Desktop
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: novelWriter
|
3
|
-
Version: 2.
|
4
|
-
Summary: A
|
3
|
+
Version: 2.7.2
|
4
|
+
Summary: A plain text editor for planning and writing novels
|
5
5
|
Author-email: Veronica Berglyd Olsen <code@vkbo.net>
|
6
|
-
License:
|
6
|
+
License-Expression: GPL-3.0
|
7
7
|
Project-URL: Homepage, https://novelwriter.io
|
8
8
|
Project-URL: Documentation, https://docs.novelwriter.io
|
9
9
|
Project-URL: Repository, https://github.com/vkbo/novelWriter
|
@@ -14,7 +14,6 @@ Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
16
16
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
17
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
18
17
|
Classifier: Development Status :: 5 - Production/Stable
|
19
18
|
Classifier: Operating System :: OS Independent
|
20
19
|
Classifier: Intended Audience :: End Users/Desktop
|
@@ -209,8 +209,10 @@ setup/debian/py3dist-overrides
|
|
209
209
|
setup/debian/rules
|
210
210
|
setup/debian/source/format
|
211
211
|
setup/icons/novelwriter.ico
|
212
|
+
setup/icons/novelwriter.png
|
212
213
|
setup/icons/novelwriter.svg
|
213
214
|
setup/icons/x-novelwriter-project.ico
|
215
|
+
setup/icons/x-novelwriter-project.png
|
214
216
|
setup/icons/x-novelwriter-project.svg
|
215
217
|
setup/macos/App.entitlements
|
216
218
|
setup/macos/Info.plist.template
|
@@ -49,9 +49,9 @@ __license__ = "GPLv3"
|
|
49
49
|
__author__ = "Veronica Berglyd Olsen"
|
50
50
|
__maintainer__ = "Veronica Berglyd Olsen"
|
51
51
|
__email__ = "code@vkbo.net"
|
52
|
-
__version__ = "2.
|
53
|
-
__hexversion__ = "
|
54
|
-
__date__ = "2025-
|
52
|
+
__version__ = "2.7.2"
|
53
|
+
__hexversion__ = "0x020702f0"
|
54
|
+
__date__ = "2025-06-24"
|
55
55
|
__status__ = "Stable"
|
56
56
|
__domain__ = "novelwriter.io"
|
57
57
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,8 +1,10 @@
|
|
1
1
|
{
|
2
|
-
"Synopsis": "
|
2
|
+
"Synopsis": "Zusammenfassung",
|
3
3
|
"Short Description": "Kurzbeschreibung",
|
4
4
|
"Footnotes": "Fußnoten",
|
5
5
|
"Comment": "Kommentar",
|
6
|
+
"Story Structure": "Struktur",
|
7
|
+
"Note": "Notiz",
|
6
8
|
"Notes": "Notizen",
|
7
9
|
"Tag": "Schlagwort",
|
8
10
|
"Point of View": "Perspektive",
|
@@ -1,6 +1,10 @@
|
|
1
1
|
{
|
2
2
|
"Synopsis": "Samandrag",
|
3
|
+
"Short Description": "Kort beskriving",
|
4
|
+
"Footnotes": "Fotnotar",
|
3
5
|
"Comment": "Kommentar",
|
6
|
+
"Story Structure": "Tekst-element",
|
7
|
+
"Note": "Notat",
|
4
8
|
"Notes": "Notat",
|
5
9
|
"Tag": "Knagg",
|
6
10
|
"Point of View": "Perspektiv",
|
@@ -12,6 +16,7 @@
|
|
12
16
|
"Objects": "Objekt",
|
13
17
|
"Entities": "Eining",
|
14
18
|
"Custom": "Anna",
|
19
|
+
"New Page": "Ny side",
|
15
20
|
"0": "null",
|
16
21
|
"1": "ein",
|
17
22
|
"2": "to",
|
@@ -1,6 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"Synopsis": "Сводка",
|
3
3
|
"Short Description": "Краткое описание",
|
4
|
+
"Footnotes": "Примечания",
|
4
5
|
"Comment": "Комментарий",
|
5
6
|
"Notes": "Заметки",
|
6
7
|
"Tag": "Тэг",
|
@@ -13,6 +14,7 @@
|
|
13
14
|
"Objects": "Объекты",
|
14
15
|
"Entities": "Сущности",
|
15
16
|
"Custom": "Другое",
|
17
|
+
"New Page": "Новая страница",
|
16
18
|
"0": "Ноль",
|
17
19
|
"1": "Один",
|
18
20
|
"2": "Два",
|
Binary file
|
Binary file
|
Binary file
|
@@ -47,6 +47,12 @@ translators for the languages currently available:</p>
|
|
47
47
|
<li><b>Portuguese:</b> Oli Maia (olimaia)</li>
|
48
48
|
</ul>
|
49
49
|
|
50
|
+
<p>Translations of the documentation:</p>
|
51
|
+
|
52
|
+
<ul>
|
53
|
+
<li><b>French:</b> Jean-Michel Heras (Karduin)</li>
|
54
|
+
</ul>
|
55
|
+
|
50
56
|
<p>Translations are managed on <a href="https://crowdin.com/project/novelwriter">Crowdin</a>, and
|
51
57
|
more contributions are listed on the project's Members page.</p>
|
52
58
|
|
@@ -44,7 +44,7 @@ from novelwriter.common import (
|
|
44
44
|
NWConfigParser, checkInt, checkPath, describeFont, fontMatcher,
|
45
45
|
formatTimeStamp, processDialogSymbols, simplified
|
46
46
|
)
|
47
|
-
from novelwriter.constants import nwFiles,
|
47
|
+
from novelwriter.constants import nwFiles, nwQuotes, nwUnicode
|
48
48
|
from novelwriter.error import formatException, logException
|
49
49
|
|
50
50
|
if TYPE_CHECKING:
|
@@ -892,7 +892,7 @@ class Config:
|
|
892
892
|
"""
|
893
893
|
self.splashMessage(f"Initialising {kind} font: {font.family()}")
|
894
894
|
metrics = QFontMetrics(font)
|
895
|
-
for char in
|
895
|
+
for char in nwUnicode.UI_SYMBOLS:
|
896
896
|
if not metrics.inFont(char): # type: ignore
|
897
897
|
logger.warning("No glyph U+%04x in font", ord(char)) # pragma: no cover
|
898
898
|
return
|
@@ -184,6 +184,10 @@ class nwKeyWords:
|
|
184
184
|
POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY,
|
185
185
|
OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY,
|
186
186
|
]
|
187
|
+
CAN_LOOKUP: Final[list[str]] = [
|
188
|
+
POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY,
|
189
|
+
OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY, STORY_KEY, MENTION_KEY,
|
190
|
+
]
|
187
191
|
|
188
192
|
# Set of Valid Keys
|
189
193
|
VALID_KEYS: Final[set[str]] = set(ALL_KEYS)
|
@@ -582,21 +586,14 @@ class nwUnicode:
|
|
582
586
|
U_TIMES = "\u00d7" # Multiplication sign
|
583
587
|
U_DIVIDE = "\u00f7" # Division sign
|
584
588
|
|
585
|
-
# Arrows
|
586
|
-
U_UTRI = "\u25b2" # Up-pointing triangle
|
587
|
-
U_UTRIS = "\u25b4" # Up-pointing triangle, small
|
588
|
-
U_RTRI = "\u25b6" # Right-pointing triangle
|
589
|
-
U_RTRIS = "\u25b8" # Right-pointing triangle, small
|
590
|
-
U_DTRI = "\u25bc" # Down-pointing triangle
|
591
|
-
U_DTRIS = "\u25be" # Down-pointing triangle, small
|
592
|
-
U_LTRI = "\u25c0" # Left-pointing triangle
|
593
|
-
U_LTRIS = "\u25c2" # Left-pointing triangle, small
|
594
|
-
|
595
589
|
# Special
|
596
590
|
U_UNKN = "\ufffd" # Unknown character
|
597
591
|
U_NAC1 = "\ufffe" # Not a character
|
598
592
|
U_NAC2 = "\uffff" # Not a character
|
599
593
|
|
594
|
+
# Placeholders
|
595
|
+
U_LBREAK = "\u21b2" # Downwards Arrow With Tip Leftwards
|
596
|
+
|
600
597
|
# HTML Equivalents
|
601
598
|
# ================
|
602
599
|
|
@@ -651,15 +648,15 @@ class nwUnicode:
|
|
651
648
|
H_TIMES = "×"
|
652
649
|
H_DIVIDE = "÷"
|
653
650
|
|
654
|
-
#
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
651
|
+
# Unicode symbols expected to be used on the UI
|
652
|
+
UI_SYMBOLS: Final[list[str]] = [
|
653
|
+
U_QUOT, U_APOS, U_LAQUO, U_RAQUO, U_LSQUO, U_RSQUO, U_SBQUO, U_SUQUO,
|
654
|
+
U_LDQUO, U_RDQUO, U_BDQUO, U_UDQUO, U_LSAQUO, U_RSAQUO, U_BDRQUO,
|
655
|
+
U_LCQUO, U_RCQUO, U_LWCQUO, U_RWCQUO, U_FGDASH, U_ENDASH, U_EMDASH,
|
656
|
+
U_HBAR, U_HELLIP, U_MAPOS, U_PRIME, U_DPRIME, U_NBSP, U_THSP, U_THNBSP,
|
657
|
+
U_ENSP, U_EMSP, U_MMSP, U_CHECK, U_CROSS, U_BULL, U_TRBULL, U_HYBULL,
|
658
|
+
U_FLOWER, U_PERMIL, U_DEGREE, U_MINUS, U_TIMES, U_DIVIDE, U_LBREAK,
|
659
|
+
]
|
663
660
|
|
664
661
|
|
665
662
|
class nwHtmlUnicode:
|
@@ -390,7 +390,7 @@ class BuildSettings:
|
|
390
390
|
def setValue(self, key: str, value: T_BuildValue) -> None:
|
391
391
|
"""Set a specific value for a build setting."""
|
392
392
|
if (d := SETTINGS_TEMPLATE.get(key)) and len(d) == 2 and isinstance(value, d[0]):
|
393
|
-
self._changed
|
393
|
+
self._changed |= (value != self._settings[key])
|
394
394
|
self._settings[key] = value
|
395
395
|
return
|
396
396
|
|
@@ -131,12 +131,6 @@ class Index:
|
|
131
131
|
self._novelExtra = extra
|
132
132
|
return
|
133
133
|
|
134
|
-
def setItemClass(self, tHandle: str, itemClass: nwItemClass) -> None:
|
135
|
-
"""Update the class for all tags of a handle."""
|
136
|
-
logger.info("Updating class for '%s'", tHandle)
|
137
|
-
self._tagsIndex.updateClass(tHandle, itemClass.name)
|
138
|
-
return
|
139
|
-
|
140
134
|
##
|
141
135
|
# Public Methods
|
142
136
|
##
|
@@ -183,6 +177,16 @@ class Index:
|
|
183
177
|
self.scanText(tHandle, self._project.storage.getDocumentText(tHandle))
|
184
178
|
return
|
185
179
|
|
180
|
+
def refreshHandle(self, tHandle: str) -> None:
|
181
|
+
"""Update the class for all tags of a handle."""
|
182
|
+
if item := self._project.tree[tHandle]:
|
183
|
+
logger.info("Updating class for '%s'", tHandle)
|
184
|
+
if item.isInactiveClass():
|
185
|
+
self.deleteHandle(tHandle)
|
186
|
+
else:
|
187
|
+
self._tagsIndex.updateClass(tHandle, item.itemClass.name)
|
188
|
+
return
|
189
|
+
|
186
190
|
def indexChangedSince(self, checkTime: int | float) -> bool:
|
187
191
|
"""Check if the index has changed since a given time."""
|
188
192
|
return self._indexChange > float(checkTime)
|
@@ -704,17 +708,19 @@ class Index:
|
|
704
708
|
return 0, 0, 0
|
705
709
|
|
706
710
|
def getReferences(self, tHandle: str, sTitle: str | None = None) -> dict[str, list[str]]:
|
707
|
-
"""Extract all references made in a file, and
|
708
|
-
section.
|
711
|
+
"""Extract all tags and references made in a file, and
|
712
|
+
optionally title section.
|
709
713
|
"""
|
710
|
-
|
714
|
+
refs = {x: [] for x in nwKeyWords.VALID_KEYS}
|
711
715
|
for rTitle, hItem in self._itemIndex.iterItemHeaders(tHandle):
|
712
716
|
if sTitle is None or sTitle == rTitle:
|
713
717
|
for aTag, refTypes in hItem.references.items():
|
714
718
|
for refType in refTypes:
|
715
|
-
if refType in
|
716
|
-
|
717
|
-
|
719
|
+
if refType in refs:
|
720
|
+
refs[refType].append(self._tagsIndex.tagName(aTag))
|
721
|
+
if tag := hItem.tag:
|
722
|
+
refs[nwKeyWords.TAG_KEY] = [self._tagsIndex.tagName(tag)]
|
723
|
+
return refs
|
718
724
|
|
719
725
|
def getReferenceForHeader(self, tHandle: str, nHead: int, keyClass: str) -> list[str]:
|
720
726
|
"""Get the display names for a tags class for insertion into a
|
@@ -753,10 +759,12 @@ class Index:
|
|
753
759
|
"""Return all tags used by a specific document."""
|
754
760
|
return self._itemIndex.allItemTags(tHandle) if tHandle else []
|
755
761
|
|
756
|
-
def
|
757
|
-
"""Return all tags
|
758
|
-
|
759
|
-
|
762
|
+
def getKeyWordTags(self, keyWord: str) -> list[str]:
|
763
|
+
"""Return all tags usable for a specific keyword."""
|
764
|
+
if keyWord in nwKeyWords.CAN_LOOKUP:
|
765
|
+
itemClass = nwKeyWords.KEY_CLASS.get(keyWord)
|
766
|
+
return self._tagsIndex.filterTagNames(itemClass.name if itemClass else None)
|
767
|
+
return []
|
760
768
|
|
761
769
|
def getTagsData(
|
762
770
|
self, activeOnly: bool = True
|
@@ -342,20 +342,26 @@ class IndexHeading:
|
|
342
342
|
##
|
343
343
|
|
344
344
|
def getReferences(self) -> dict[str, list[str]]:
|
345
|
-
"""Extract all references for this heading."""
|
345
|
+
"""Extract all tags and references for this heading."""
|
346
346
|
refs = {x: [] for x in nwKeyWords.VALID_KEYS}
|
347
347
|
for tag, types in self._refs.items():
|
348
348
|
for keyword in types:
|
349
349
|
if keyword in refs and (name := self._cache.tags.tagName(tag)):
|
350
350
|
refs[keyword].append(name)
|
351
|
+
if name := self._cache.tags.tagName(self._tag):
|
352
|
+
refs[nwKeyWords.TAG_KEY] = [name]
|
351
353
|
return refs
|
352
354
|
|
353
355
|
def getReferencesByKeyword(self, keyword: str) -> list[str]:
|
354
356
|
"""Extract all references for this heading."""
|
355
357
|
refs = []
|
356
|
-
|
357
|
-
if
|
358
|
+
if keyword == nwKeyWords.TAG_KEY:
|
359
|
+
if name := self._cache.tags.tagName(self._tag):
|
358
360
|
refs.append(name)
|
361
|
+
else:
|
362
|
+
for tag, types in self._refs.items():
|
363
|
+
if keyword in types and (name := self._cache.tags.tagName(tag)):
|
364
|
+
refs.append(name)
|
359
365
|
return refs
|
360
366
|
|
361
367
|
##
|
@@ -439,7 +439,7 @@ class NWItem:
|
|
439
439
|
self.setClass(itemClass)
|
440
440
|
if self._type == nwItemType.FILE:
|
441
441
|
# Notify the index of the class change
|
442
|
-
self._project.index.
|
442
|
+
self._project.index.refreshHandle(self._handle)
|
443
443
|
|
444
444
|
if self._layout == nwItemLayout.NO_LAYOUT:
|
445
445
|
# If no layout is set, pick one
|
@@ -37,7 +37,7 @@ from PyQt6.QtCore import QMargins, QSize
|
|
37
37
|
from novelwriter import __version__
|
38
38
|
from novelwriter.common import firstFloat, xmlElement, xmlSubElem
|
39
39
|
from novelwriter.constants import nwHeadFmt, nwStyles
|
40
|
-
from novelwriter.formats.shared import BlockFmt, BlockTyp, T_Formats, TextFmt
|
40
|
+
from novelwriter.formats.shared import BlockFmt, BlockTyp, T_Formats, TextFmt, stripEscape
|
41
41
|
from novelwriter.formats.tokenizer import Tokenizer
|
42
42
|
from novelwriter.types import QtHexRgb
|
43
43
|
|
@@ -480,7 +480,7 @@ class ToDocX(Tokenizer):
|
|
480
480
|
xmlSubElem(rPr, _wTag("color"), attrib={W_VAL: _docXCol(color)})
|
481
481
|
|
482
482
|
if isinstance(text, str):
|
483
|
-
for segment in RX_TEXT.split(text):
|
483
|
+
for segment in RX_TEXT.split(stripEscape(text)):
|
484
484
|
if segment == "\n":
|
485
485
|
xmlSubElem(xR, _wTag("br"))
|
486
486
|
elif segment == "\t":
|