novelWriter 2.6.2__py3-none-any.whl → 2.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- novelwriter/__init__.py +98 -75
- novelwriter/assets/i18n/nw_cs_CZ.qm +0 -0
- novelwriter/assets/i18n/nw_de_DE.qm +0 -0
- novelwriter/assets/i18n/nw_en_US.qm +0 -0
- novelwriter/assets/i18n/nw_es_419.qm +0 -0
- novelwriter/assets/i18n/nw_fr_FR.qm +0 -0
- novelwriter/assets/i18n/nw_it_IT.qm +0 -0
- novelwriter/assets/i18n/nw_ja_JP.qm +0 -0
- novelwriter/assets/i18n/nw_nb_NO.qm +0 -0
- novelwriter/assets/i18n/nw_nl_NL.qm +0 -0
- novelwriter/assets/i18n/nw_pl_PL.qm +0 -0
- novelwriter/assets/i18n/nw_pt_BR.qm +0 -0
- novelwriter/assets/i18n/nw_ru_RU.qm +0 -0
- novelwriter/assets/i18n/nw_zh_CN.qm +0 -0
- novelwriter/assets/i18n/project_de_DE.json +3 -1
- novelwriter/assets/i18n/project_en_GB.json +2 -0
- novelwriter/assets/i18n/project_en_US.json +2 -0
- novelwriter/assets/i18n/project_it_IT.json +2 -0
- novelwriter/assets/i18n/project_ja_JP.json +2 -0
- novelwriter/assets/i18n/project_nb_NO.json +2 -0
- novelwriter/assets/i18n/project_nn_NO.json +5 -0
- novelwriter/assets/i18n/project_pl_PL.json +2 -0
- novelwriter/assets/i18n/project_pt_BR.json +2 -0
- novelwriter/assets/i18n/project_ru_RU.json +2 -0
- novelwriter/assets/i18n/project_zh_CN.json +2 -0
- novelwriter/assets/icons/font_awesome.icons +109 -0
- novelwriter/assets/icons/material_filled_bold.icons +109 -0
- novelwriter/assets/icons/material_filled_normal.icons +109 -0
- novelwriter/assets/icons/material_filled_thin.icons +109 -0
- novelwriter/assets/icons/material_rounded_bold.icons +109 -0
- novelwriter/assets/icons/material_rounded_normal.icons +109 -0
- novelwriter/assets/icons/material_rounded_thin.icons +109 -0
- novelwriter/assets/icons/remix_filled.icons +109 -0
- novelwriter/assets/icons/remix_outline.icons +109 -0
- novelwriter/assets/images/splash.png +0 -0
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/{manual_fr_FR.pdf → manual_fr.pdf} +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/assets/syntax/cyberpunk_night.conf +1 -1
- novelwriter/assets/syntax/snazzy.conf +3 -3
- novelwriter/assets/text/credits_en.htm +12 -6
- novelwriter/assets/themes/cyberpunk_night.conf +23 -7
- novelwriter/assets/themes/default_dark.conf +20 -4
- novelwriter/assets/themes/default_light.conf +21 -5
- novelwriter/assets/themes/dracula.conf +20 -4
- novelwriter/assets/themes/snazzy.conf +48 -0
- novelwriter/assets/themes/solarized_dark.conf +24 -8
- novelwriter/assets/themes/solarized_light.conf +22 -6
- novelwriter/common.py +43 -27
- novelwriter/config.py +201 -139
- novelwriter/constants.py +92 -56
- novelwriter/core/buildsettings.py +26 -17
- novelwriter/core/coretools.py +52 -41
- novelwriter/core/docbuild.py +20 -13
- novelwriter/core/document.py +2 -2
- novelwriter/core/index.py +166 -432
- novelwriter/core/indexdata.py +406 -0
- novelwriter/core/item.py +50 -32
- novelwriter/core/itemmodel.py +43 -38
- novelwriter/core/novelmodel.py +225 -0
- novelwriter/core/options.py +1 -1
- novelwriter/core/project.py +24 -25
- novelwriter/core/projectdata.py +47 -29
- novelwriter/core/projectxml.py +18 -8
- novelwriter/core/sessions.py +32 -15
- novelwriter/core/spellcheck.py +4 -3
- novelwriter/core/status.py +12 -15
- novelwriter/core/storage.py +1 -1
- novelwriter/core/tree.py +55 -13
- novelwriter/dialogs/about.py +19 -22
- novelwriter/dialogs/docmerge.py +23 -24
- novelwriter/dialogs/docsplit.py +26 -26
- novelwriter/dialogs/editlabel.py +19 -20
- novelwriter/dialogs/preferences.py +143 -69
- novelwriter/dialogs/projectsettings.py +51 -54
- novelwriter/dialogs/quotes.py +14 -19
- novelwriter/dialogs/wordlist.py +25 -30
- novelwriter/enum.py +8 -0
- novelwriter/error.py +16 -16
- novelwriter/extensions/configlayout.py +24 -20
- novelwriter/extensions/eventfilters.py +9 -5
- novelwriter/extensions/modified.py +34 -15
- novelwriter/extensions/novelselector.py +18 -5
- novelwriter/extensions/pagedsidebar.py +39 -49
- novelwriter/extensions/progressbars.py +10 -8
- novelwriter/extensions/statusled.py +6 -13
- novelwriter/extensions/switch.py +31 -41
- novelwriter/extensions/switchbox.py +8 -3
- novelwriter/extensions/versioninfo.py +4 -4
- novelwriter/formats/shared.py +1 -1
- novelwriter/formats/todocx.py +14 -10
- novelwriter/formats/tohtml.py +7 -5
- novelwriter/formats/tokenizer.py +37 -33
- novelwriter/formats/tomarkdown.py +6 -2
- novelwriter/formats/toodt.py +27 -22
- novelwriter/formats/toqdoc.py +19 -14
- novelwriter/formats/toraw.py +6 -2
- novelwriter/gui/doceditor.py +314 -305
- novelwriter/gui/dochighlight.py +46 -45
- novelwriter/gui/docviewer.py +102 -104
- novelwriter/gui/docviewerpanel.py +47 -51
- novelwriter/gui/editordocument.py +8 -5
- novelwriter/gui/itemdetails.py +15 -18
- novelwriter/gui/mainmenu.py +147 -146
- novelwriter/gui/noveltree.py +246 -406
- novelwriter/gui/outline.py +145 -76
- novelwriter/gui/projtree.py +139 -132
- novelwriter/gui/search.py +34 -31
- novelwriter/gui/sidebar.py +13 -18
- novelwriter/gui/statusbar.py +27 -21
- novelwriter/gui/theme.py +554 -436
- novelwriter/guimain.py +56 -38
- novelwriter/shared.py +32 -23
- novelwriter/splash.py +74 -0
- novelwriter/text/comments.py +70 -0
- novelwriter/text/patterns.py +4 -4
- novelwriter/tools/dictionaries.py +20 -29
- novelwriter/tools/lipsum.py +18 -18
- novelwriter/tools/manusbuild.py +39 -42
- novelwriter/tools/manuscript.py +114 -127
- novelwriter/tools/manussettings.py +129 -102
- novelwriter/tools/noveldetails.py +60 -72
- novelwriter/tools/welcome.py +57 -75
- novelwriter/tools/writingstats.py +112 -102
- novelwriter/types.py +5 -7
- {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/METADATA +6 -6
- novelwriter-2.7.dist-info/RECORD +162 -0
- {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/WHEEL +1 -1
- novelWriter-2.6.2.dist-info/RECORD +0 -363
- novelwriter/assets/icons/typicons_dark/README.md +0 -29
- novelwriter/assets/icons/typicons_dark/icons.conf +0 -134
- novelwriter/assets/icons/typicons_dark/mixed_copy.svg +0 -4
- novelwriter/assets/icons/typicons_dark/mixed_document-chapter.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-new.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_document-note.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-scene.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-section.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_document-title.svg +0 -12
- novelwriter/assets/icons/typicons_dark/mixed_edit.svg +0 -4
- novelwriter/assets/icons/typicons_dark/mixed_import.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-checked.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-none.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_input-unchecked.svg +0 -5
- novelwriter/assets/icons/typicons_dark/mixed_margin-bottom.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-left.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-right.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_margin-top.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_search-replace.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_size-height.svg +0 -6
- novelwriter/assets/icons/typicons_dark/mixed_size-width.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_deco-h0.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h1.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h2.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h3.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-h4.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_deco-noveltree-more.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_font.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_panel.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_quote.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-case.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-preserve.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-regex.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_search-word.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-bold-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-italic-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-mark.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-strike-md.svg +0 -4
- novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +0 -6
- novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +0 -7
- novelwriter/assets/icons/typicons_dark/nw_toolbar.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_arrow-down-thick-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-forward.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-maximise.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-minimise.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_arrow-repeat-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_book-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_book.svg +0 -6
- novelwriter/assets/icons/typicons_dark/typ_bookmark.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_calendar.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cancel-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cancel.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chart-bar-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-down.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-left.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-right.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_chevron-up.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_cog.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_delete-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_delete.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_directions-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_document-add.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_document-text.svg +0 -8
- novelwriter/assets/icons/typicons_dark/typ_document.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_export-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_export.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_eye.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_flag.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_folder-open.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_folder.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_globe-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_key.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_lightbulb-full.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_location.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-pause-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-record-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_media-record.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_minus.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_pencil.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_pin-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_pin.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_plus.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_puzzle-outline.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_puzzle.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_refresh-flipped.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_refresh.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_search-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_search.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_star.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_stopwatch-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-dot-more.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-list-grey.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-list.svg +0 -9
- novelwriter/assets/icons/typicons_dark/typ_times.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_trash.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_unfold-hidden.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_unfold-visible.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_user.svg +0 -5
- novelwriter/assets/icons/typicons_dark/typ_warning-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/README.md +0 -29
- novelwriter/assets/icons/typicons_light/icons.conf +0 -134
- novelwriter/assets/icons/typicons_light/mixed_copy.svg +0 -4
- novelwriter/assets/icons/typicons_light/mixed_document-chapter.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-new.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_document-note.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-scene.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-section.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_document-title.svg +0 -12
- novelwriter/assets/icons/typicons_light/mixed_edit.svg +0 -4
- novelwriter/assets/icons/typicons_light/mixed_import.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-checked.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-none.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_input-unchecked.svg +0 -5
- novelwriter/assets/icons/typicons_light/mixed_margin-bottom.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-left.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-right.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_margin-top.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_search-replace.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_size-height.svg +0 -6
- novelwriter/assets/icons/typicons_light/mixed_size-width.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_deco-h0.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h1.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h2.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h3.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-h4.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-note.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_deco-noveltree-more.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_font.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_panel.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_quote.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-case.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-preserve.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-regex.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_search-word.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-bold-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-italic-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-mark.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-strike-md.svg +0 -4
- novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +0 -6
- novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +0 -7
- novelwriter/assets/icons/typicons_light/nw_toolbar.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_arrow-down-thick-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-forward.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-maximise.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-minimise.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_arrow-repeat-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_book-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_book.svg +0 -6
- novelwriter/assets/icons/typicons_light/typ_bookmark.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_calendar.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cancel-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cancel.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chart-bar-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-down.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-left.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-right.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_chevron-up.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_cog.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_delete-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_delete.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_directions-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_document-add.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_document-text.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_document.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_export-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_export.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_eye.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_flag.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_folder-open.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_folder.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_globe-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_key.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_lightbulb-full.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_location.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-pause-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-record-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_media-record.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_minus.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_pencil.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_pin-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_pin.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_plus.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_puzzle-outline.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_puzzle.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_refresh-flipped.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_refresh.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_search-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_search.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_star.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_stopwatch-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-dot-more.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-list-grey.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-list.svg +0 -9
- novelwriter/assets/icons/typicons_light/typ_times.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_trash.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_unfold-hidden.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_unfold-visible.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_user.svg +0 -5
- novelwriter/assets/icons/typicons_light/typ_warning-full.svg +0 -4
- {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info/licenses}/LICENSE.md +0 -0
- {novelWriter-2.6.2.dist-info → novelwriter-2.7.dist-info}/top_level.txt +0 -0
novelwriter/core/coretools.py
CHANGED
@@ -30,20 +30,24 @@ import logging
|
|
30
30
|
import re
|
31
31
|
import shutil
|
32
32
|
|
33
|
-
from collections.abc import Iterable
|
34
33
|
from functools import partial
|
35
34
|
from pathlib import Path
|
35
|
+
from typing import TYPE_CHECKING
|
36
36
|
from zipfile import ZipFile, is_zipfile
|
37
37
|
|
38
|
-
from
|
38
|
+
from PyQt6.QtCore import QCoreApplication
|
39
39
|
|
40
40
|
from novelwriter import CONFIG, SHARED
|
41
41
|
from novelwriter.common import isHandle, minmax, simplified
|
42
42
|
from novelwriter.constants import nwConst, nwFiles, nwItemClass, nwStats
|
43
|
-
from novelwriter.core.item import NWItem
|
44
43
|
from novelwriter.core.project import NWProject
|
45
44
|
from novelwriter.core.storage import NWStorageCreate
|
46
45
|
|
46
|
+
if TYPE_CHECKING:
|
47
|
+
from collections.abc import Iterable
|
48
|
+
|
49
|
+
from novelwriter.core.item import NWItem
|
50
|
+
|
47
51
|
logger = logging.getLogger(__name__)
|
48
52
|
|
49
53
|
|
@@ -284,7 +288,7 @@ class DocDuplicator:
|
|
284
288
|
class DocSearch:
|
285
289
|
|
286
290
|
def __init__(self) -> None:
|
287
|
-
self._regEx = re.compile("")
|
291
|
+
self._regEx = re.compile(r"")
|
288
292
|
self._opts = re.UNICODE | re.IGNORECASE
|
289
293
|
self._words = False
|
290
294
|
self._escape = True
|
@@ -379,10 +383,12 @@ class ProjectBuilder:
|
|
379
383
|
"""Build or copy a project from a data dictionary."""
|
380
384
|
if isinstance(data, dict):
|
381
385
|
path = data.get("path", None) or None
|
382
|
-
if
|
386
|
+
if author := data.get("author"):
|
387
|
+
CONFIG.setLastAuthor(author)
|
388
|
+
if isinstance(path, str | Path):
|
383
389
|
self._path = Path(path).resolve()
|
384
|
-
if data.get("sample"
|
385
|
-
return self._extractSampleProject(self._path)
|
390
|
+
if data.get("sample"):
|
391
|
+
return self._extractSampleProject(self._path, data)
|
386
392
|
elif data.get("template"):
|
387
393
|
return self._copyProject(self._path, data)
|
388
394
|
else:
|
@@ -412,20 +418,21 @@ class ProjectBuilder:
|
|
412
418
|
|
413
419
|
self._path = project.storage.storagePath
|
414
420
|
|
415
|
-
|
416
|
-
|
421
|
+
trName = self.tr("New Project")
|
422
|
+
trAuthor = self.tr("Author Name")
|
423
|
+
trTitlePage = self.tr("Title Page")
|
417
424
|
|
418
425
|
# Settings
|
419
426
|
project.data.setUuid(None)
|
420
|
-
project.data.setName(data.get("name",
|
421
|
-
project.data.setAuthor(data.get("author",
|
427
|
+
project.data.setName(data.get("name", trName))
|
428
|
+
project.data.setAuthor(data.get("author", trAuthor))
|
422
429
|
project.data.setLanguage(CONFIG.guiLocale)
|
423
430
|
project.setDefaultStatusImport()
|
424
431
|
project.session.startSession()
|
425
432
|
|
426
433
|
# Add Root Folders
|
427
434
|
hNovelRoot = project.newRoot(nwItemClass.NOVEL)
|
428
|
-
hTitlePage = project.newFile(
|
435
|
+
hTitlePage = project.newFile(trTitlePage, hNovelRoot)
|
429
436
|
|
430
437
|
# Generate Title Page
|
431
438
|
aDoc = project.storage.getDocument(hTitlePage)
|
@@ -442,25 +449,21 @@ class ProjectBuilder:
|
|
442
449
|
"\n"
|
443
450
|
">> {count}: [field:{field}] <<\n"
|
444
451
|
).format(
|
445
|
-
author=project.data.author or
|
446
|
-
address=self.tr("Address"),
|
447
|
-
title=project.data.name or
|
452
|
+
author=project.data.author or trAuthor,
|
453
|
+
address=self.tr("Address Line"),
|
454
|
+
title=project.data.name or trName,
|
448
455
|
by=self.tr("By"),
|
449
456
|
count=self.tr("Word Count"),
|
450
457
|
field=nwStats.WORDS_TEXT,
|
451
458
|
))
|
452
459
|
|
453
|
-
# Create a project structure based on selected root folders
|
454
|
-
# and a number of chapters and scenes selected in the
|
455
|
-
# wizard's custom page.
|
456
|
-
|
457
460
|
# Create chapters and scenes
|
458
461
|
numChapters = data.get("chapters", 0)
|
459
462
|
numScenes = data.get("scenes", 0)
|
460
463
|
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
+
trChSynop = self.tr("Summary of the chapter.")
|
465
|
+
trScSynop = self.tr("Summary of the scene.")
|
466
|
+
trNoteDesc = self.tr("A short description.")
|
464
467
|
|
465
468
|
# Create chapters
|
466
469
|
if numChapters > 0:
|
@@ -468,7 +471,7 @@ class ProjectBuilder:
|
|
468
471
|
chTitle = self.tr("Chapter {0}").format(f"{ch+1:d}")
|
469
472
|
cHandle = project.newFile(chTitle, hNovelRoot)
|
470
473
|
aDoc = project.storage.getDocument(cHandle)
|
471
|
-
aDoc.writeDocument(f"## {chTitle}\n\n%Synopsis: {
|
474
|
+
aDoc.writeDocument(f"## {chTitle}\n\n%Synopsis: {trChSynop}\n\n")
|
472
475
|
|
473
476
|
# Create chapter scenes
|
474
477
|
if numScenes > 0 and cHandle:
|
@@ -476,7 +479,7 @@ class ProjectBuilder:
|
|
476
479
|
scTitle = self.tr("Scene {0}").format(f"{ch+1:d}.{sc+1:d}")
|
477
480
|
sHandle = project.newFile(scTitle, cHandle)
|
478
481
|
aDoc = project.storage.getDocument(sHandle)
|
479
|
-
aDoc.writeDocument(f"### {scTitle}\n\n%Synopsis: {
|
482
|
+
aDoc.writeDocument(f"### {scTitle}\n\n%Synopsis: {trScSynop}\n\n")
|
480
483
|
|
481
484
|
# Create scenes (no chapters)
|
482
485
|
elif numScenes > 0:
|
@@ -484,7 +487,7 @@ class ProjectBuilder:
|
|
484
487
|
scTitle = self.tr("Scene {0}").format(f"{sc+1:d}")
|
485
488
|
sHandle = project.newFile(scTitle, hNovelRoot)
|
486
489
|
aDoc = project.storage.getDocument(sHandle)
|
487
|
-
aDoc.writeDocument(f"### {scTitle}\n\n%Synopsis: {
|
490
|
+
aDoc.writeDocument(f"### {scTitle}\n\n%Synopsis: {trScSynop}\n\n")
|
488
491
|
|
489
492
|
# Create notes folders
|
490
493
|
noteTitles = {
|
@@ -504,12 +507,12 @@ class ProjectBuilder:
|
|
504
507
|
aDoc.writeDocument(
|
505
508
|
f"# {noteTitles[newRoot]}\n\n"
|
506
509
|
f"@tag: {ntTag}\n\n"
|
507
|
-
f"%Short: {
|
510
|
+
f"%Short: {trNoteDesc}\n\n"
|
508
511
|
)
|
509
512
|
|
510
513
|
# Also add the archive and trash folders
|
511
514
|
project.newRoot(nwItemClass.ARCHIVE)
|
512
|
-
project.tree.trash # Triggers the creation of Trash
|
515
|
+
_ = project.tree.trash # Triggers the creation of Trash
|
513
516
|
|
514
517
|
project.saveProject()
|
515
518
|
project.closeProject()
|
@@ -559,23 +562,11 @@ class ProjectBuilder:
|
|
559
562
|
return False
|
560
563
|
|
561
564
|
# Open the copied project and update settings
|
562
|
-
|
563
|
-
project.openProject(dstPath)
|
564
|
-
project.data.setUuid("") # Creates a fresh uuid
|
565
|
-
project.data.setName(data.get("name", "None"))
|
566
|
-
project.data.setAuthor(data.get("author", ""))
|
567
|
-
project.data.setSpellCheck(True)
|
568
|
-
project.data.setSpellLang(None)
|
569
|
-
project.data.setDoBackup(True)
|
570
|
-
project.data.setSaveCount(0)
|
571
|
-
project.data.setAutoCount(0)
|
572
|
-
project.data.setEditTime(0)
|
573
|
-
project.saveProject()
|
574
|
-
project.closeProject()
|
565
|
+
self._resetProject(dstPath, data)
|
575
566
|
|
576
567
|
return True
|
577
568
|
|
578
|
-
def _extractSampleProject(self, path: Path) -> bool:
|
569
|
+
def _extractSampleProject(self, path: Path, data: dict) -> bool:
|
579
570
|
"""Make a copy of the sample project by extracting the
|
580
571
|
sample.zip file to the new path.
|
581
572
|
"""
|
@@ -589,6 +580,7 @@ class ProjectBuilder:
|
|
589
580
|
if (sample := CONFIG.assetPath("sample.zip")).is_file():
|
590
581
|
try:
|
591
582
|
shutil.unpack_archive(sample, path)
|
583
|
+
self._resetProject(path, data)
|
592
584
|
except Exception as exc:
|
593
585
|
SHARED.error(self.tr("Failed to create a new example project."), exc=exc)
|
594
586
|
return False
|
@@ -601,3 +593,22 @@ class ProjectBuilder:
|
|
601
593
|
return False
|
602
594
|
|
603
595
|
return True
|
596
|
+
|
597
|
+
def _resetProject(self, path: Path, data: dict) -> None:
|
598
|
+
"""Open a project and reset/update its settings."""
|
599
|
+
project = NWProject()
|
600
|
+
project.openProject(path)
|
601
|
+
project.data.setUuid("") # Creates a fresh uuid
|
602
|
+
if name := data.get("name", ""):
|
603
|
+
project.data.setName(name)
|
604
|
+
if author := data.get("author", ""):
|
605
|
+
project.data.setAuthor(author)
|
606
|
+
project.data.setSpellCheck(True)
|
607
|
+
project.data.setSpellLang(None)
|
608
|
+
project.data.setDoBackup(True)
|
609
|
+
project.data.setSaveCount(0)
|
610
|
+
project.data.setAutoCount(0)
|
611
|
+
project.data.setEditTime(0)
|
612
|
+
project.saveProject()
|
613
|
+
project.closeProject()
|
614
|
+
return
|
novelwriter/core/docbuild.py
CHANGED
@@ -25,26 +25,30 @@ from __future__ import annotations
|
|
25
25
|
|
26
26
|
import logging
|
27
27
|
|
28
|
-
from
|
29
|
-
from pathlib import Path
|
28
|
+
from typing import TYPE_CHECKING
|
30
29
|
|
31
|
-
from
|
30
|
+
from PyQt6.QtGui import QFont
|
32
31
|
|
33
32
|
from novelwriter import CONFIG
|
34
33
|
from novelwriter.constants import nwLabels
|
35
|
-
from novelwriter.core.buildsettings import BuildSettings
|
36
34
|
from novelwriter.core.item import NWItem
|
37
|
-
from novelwriter.
|
38
|
-
from novelwriter.enum import nwBuildFmt
|
35
|
+
from novelwriter.enum import nwBuildFmt, nwComment
|
39
36
|
from novelwriter.error import formatException, logException
|
40
37
|
from novelwriter.formats.todocx import ToDocX
|
41
38
|
from novelwriter.formats.tohtml import ToHtml
|
42
|
-
from novelwriter.formats.tokenizer import Tokenizer
|
43
39
|
from novelwriter.formats.tomarkdown import ToMarkdown
|
44
40
|
from novelwriter.formats.toodt import ToOdt
|
45
41
|
from novelwriter.formats.toqdoc import ToQTextDocument
|
46
42
|
from novelwriter.formats.toraw import ToRaw
|
47
43
|
|
44
|
+
if TYPE_CHECKING:
|
45
|
+
from collections.abc import Iterable
|
46
|
+
from pathlib import Path
|
47
|
+
|
48
|
+
from novelwriter.core.buildsettings import BuildSettings
|
49
|
+
from novelwriter.core.project import NWProject
|
50
|
+
from novelwriter.formats.tokenizer import Tokenizer
|
51
|
+
|
48
52
|
logger = logging.getLogger(__name__)
|
49
53
|
|
50
54
|
|
@@ -56,8 +60,8 @@ class NWBuildDocument:
|
|
56
60
|
"""
|
57
61
|
|
58
62
|
__slots__ = (
|
59
|
-
"
|
60
|
-
"
|
63
|
+
"_build", "_cache", "_count", "_error", "_outline", "_project",
|
64
|
+
"_queue",
|
61
65
|
)
|
62
66
|
|
63
67
|
def __init__(self, project: NWProject, build: BuildSettings) -> None:
|
@@ -307,22 +311,25 @@ class NWBuildDocument:
|
|
307
311
|
)
|
308
312
|
|
309
313
|
bldObj.setBodyText(self._build.getBool("text.includeBodyText"))
|
310
|
-
bldObj.setSynopsis(self._build.getBool("text.includeSynopsis"))
|
311
|
-
bldObj.setComments(self._build.getBool("text.includeComments"))
|
312
314
|
bldObj.setKeywords(self._build.getBool("text.includeKeywords"))
|
313
315
|
bldObj.setIgnoredKeywords(self._build.getStr("text.ignoredKeywords"))
|
316
|
+
bldObj.setCommentType(nwComment.PLAIN, self._build.getBool("text.includeComments"))
|
317
|
+
bldObj.setCommentType(nwComment.SYNOPSIS, self._build.getBool("text.includeSynopsis"))
|
318
|
+
bldObj.setCommentType(nwComment.SHORT, self._build.getBool("text.includeSynopsis"))
|
319
|
+
bldObj.setCommentType(nwComment.STORY, self._build.getBool("text.includeStory"))
|
320
|
+
bldObj.setCommentType(nwComment.NOTE, self._build.getBool("text.includeNotes"))
|
314
321
|
|
315
322
|
if isinstance(bldObj, ToHtml):
|
316
323
|
bldObj.setStyles(self._build.getBool("html.addStyles"))
|
317
324
|
bldObj.setReplaceUnicode(self._build.getBool("format.stripUnicode"))
|
318
325
|
|
319
|
-
if isinstance(bldObj,
|
326
|
+
if isinstance(bldObj, ToOdt | ToDocX):
|
320
327
|
bldObj.setHeaderFormat(
|
321
328
|
self._build.getStr("doc.pageHeader"),
|
322
329
|
self._build.getInt("doc.pageCountOffset"),
|
323
330
|
)
|
324
331
|
|
325
|
-
if isinstance(bldObj,
|
332
|
+
if isinstance(bldObj, ToOdt | ToDocX | ToQTextDocument):
|
326
333
|
scale = nwLabels.UNIT_SCALE.get(self._build.getStr("format.pageUnit"), 1.0)
|
327
334
|
pW, pH = nwLabels.PAPER_SIZE.get(self._build.getStr("format.pageSize"), (-1.0, -1.0))
|
328
335
|
bldObj.setPageLayout(
|
novelwriter/core/document.py
CHANGED
@@ -31,11 +31,11 @@ from time import time
|
|
31
31
|
from typing import TYPE_CHECKING
|
32
32
|
|
33
33
|
from novelwriter.common import formatTimeStamp, isHandle
|
34
|
-
from novelwriter.core.item import NWItem
|
35
34
|
from novelwriter.enum import nwItemClass, nwItemLayout
|
36
35
|
from novelwriter.error import formatException, logException
|
37
36
|
|
38
|
-
if TYPE_CHECKING:
|
37
|
+
if TYPE_CHECKING:
|
38
|
+
from novelwriter.core.item import NWItem
|
39
39
|
from novelwriter.core.project import NWProject
|
40
40
|
|
41
41
|
logger = logging.getLogger(__name__)
|