From 57f199ef176aa8c093edcf7efe67b0353a1fc05a Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 30 Jul 2020 00:18:08 +0200 Subject: [PATCH 01/21] Some updates to the docs config file --- docs/source/conf.py | 54 ++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 94530e5b..07022509 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -15,7 +15,7 @@ # import os # import sys # sys.path.insert(0, os.path.abspath(".")) - +import sphinx_rtd_theme # -- Project information ----------------------------------------------------- @@ -32,13 +32,13 @@ release = "0.10.2" # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. -# # needs_sphinx = "1.0" # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named "sphinx.ext.*") or your custom # ones. extensions = [ + "sphinx_rtd_theme", ] # Add any paths that contain templates here, relative to this directory. @@ -46,7 +46,6 @@ templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: -# # source_suffix = [".rst", ".md"] source_suffix = ".rst" @@ -55,7 +54,6 @@ master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. -# # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None @@ -73,28 +71,28 @@ pygments_style = None # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -# -html_theme = "default" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} +html_theme = "sphinx_rtd_theme" +html_theme_options = { + # Toc options + 'collapse_navigation': True, + 'sticky_navigation': True, + 'navigation_depth': 3, + 'includehidden': True, + 'titles_only': False +} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] +# html_static_path = ["_static"] +html_static_path = [] # Custom sidebar templates, must be a dictionary that maps document names # to template names. -# # The default sidebars (for documents that don"t match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``["localtoc.html", "relations.html", "sourcelink.html", # "searchbox.html"]``. -# # html_sidebars = {} @@ -127,20 +125,19 @@ latex_elements = { # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, "novelWriter.tex", "novelWriter Documentation", - "Veronica Berglyd Olsen", "manual"), -] +latex_documents = [( + master_doc, "novelWriter.tex", "novelWriter Documentation", + author, "manual" +)] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, "novelwriter", "novelWriter Documentation", - [author], 1) -] +man_pages = [( + master_doc, "novelwriter", "novelWriter Documentation", [author], 1 +)] # -- Options for Texinfo output ---------------------------------------------- @@ -148,11 +145,10 @@ man_pages = [ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) -texinfo_documents = [ - (master_doc, "novelWriter", "novelWriter Documentation", - author, "novelWriter", "Markdown-like editor for novels.", - "Miscellaneous"), -] +texinfo_documents = [( + master_doc, "novelWriter", "novelWriter Documentation", author, + "novelWriter", "Markdown-like editor for novels.", "Miscellaneous" +)] # -- Options for Epub output ------------------------------------------------- @@ -162,11 +158,9 @@ epub_title = project # The unique identifier of the text. This can be a ISBN number # or the project homepage. -# # epub_identifier = "" # A unique identification for the text. -# # epub_uid = "" # A list of files that should not be packed into the epub file. From d848827e5831dd2d6981f2a1d01c53fd7b6292ba Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 30 Jul 2020 21:53:57 +0200 Subject: [PATCH 02/21] Updating documentation --- docs/source/index.rst | 8 ++-- docs/source/interface.rst | 4 +- docs/source/introduction.rst | 77 ++++++++++++++++++++++++++---------- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 532aef70..2e1d982d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,13 +1,13 @@ -#################################### -Welcome to novelWriter Documentation -#################################### +######################################## +Welcome to the novelWriter Documentation +######################################## This is the documentation for novelWriter |version|. **Contents** .. toctree:: - :maxdepth: 2 + :maxdepth: 1 introduction started diff --git a/docs/source/interface.rst b/docs/source/interface.rst index ff694efd..e96783c8 100644 --- a/docs/source/interface.rst +++ b/docs/source/interface.rst @@ -3,7 +3,9 @@ User Interface *************** The user interface is kept as simple as possible to avoid distractions when writing. -The main window contains a tree view pane with the entire structure of the project, and a small details panel below it to display additional information about the currently selected item. + +The main window contains a tree view pane with the entire structure of the project, and a small +details panel below it to display additional information about the currently selected item. Edit View ========= diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index 13a83323..5b3d22d4 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -2,44 +2,79 @@ Introduction ************ -novelWriter is a simple, multi-document plain text editor using a modified markdown syntax to apply simple formatting. -Additional features that are not standard markdown are available through special meta data keywords. -These keywords make it possible to inter-link documents, and generate an overview of the entire novel project and how the various files are interconnected. +novelWriter is a simple, multi-document plain text editor using a modified markdown syntax to apply +simple formatting. It is designed for writing novels, and allow for the component documents to be +ordered freely to create the desired structure of the novel project. + +In addition, the project can contain notes on the various plot elements, characters, locations, etc, +that make up the story. These notes are organised in a set of category-specific folders, and each +entry can be tagged and cross referenced from within the novel files and other notes. These tags +make it possible to inter-link documents, and generate an overview of the entire novel project and +how the various files and plot elements are interconnected. + +These additional features are not standard in markdown, but are available through special meta +keywords. Syntax highlighting is provided to make it easier to verify that the markdown tags are +used correctly. Design Philosophy ----------------- -The user interface is intended to be as minimalistic as practically possible, while at the same time provide a complete set of features needed for writing a novel. +The user interface of novelWriter is intended to be as minimalistic as practically possible, while +at the same time provide a complete set of features needed for writing a novel. .. note:: - novelWriter is not intended to be a full office type word processor. - It doesn't support images, links, tables, and its formatting is limited to headers, and bold, italicised and underlined text. + novelWriter is not intended to be a full office type word processor. It doesn't support images, + links, tables, and its formatting is limited to headers, and bold, italicised and strikethrough + text. -Most features are accessible through the menu and through keyboard shortcuts. -The colour scheme of the user interface can be modified with various themes, and new themes are fairly straight forward to add. +The main window does not have a tool bar like most other applications do. This reduces clutter, and +since the documents are formatted with markdown tags, more or less redundant. However, all +formatting features supported are available through convenient keyboard shortcuts. They are also +available in the main menu. -The project itself is laid out in a tree view on the left hand side of the main window. -It has various sections, called *root folders*, for the various types of supporting files that the user may want to add to the project. -The novel itself lives under its own root folder. +The colour scheme of the user interface defaults to that of the host operating system. In addition, +a dark theme is provided, and can be enabled in Preferences. A number of syntax highlighting themes +are also available in Preferences. Coloured and grayscale icon themes are also available. + +The main window is split in two, or optionally three, panels. The left-most contains the project +tree and all the files in your project. The second panel is the document editor, and the optional +third panel is a document viewer which can view any document in your project. + +A second tab is also available on the main window. This is the Outline tab where the entire novel +structure can be displayed, with all the tags and references listed. Depending on how you structure +your novel project files, this outline can be quite different than your project tree. Project Layout -------------- -The layout of the novel itself is managed through the four supported heading levels, H1 through H4. -H1 is used for the book title, and for partitions. -H2 is used for chapter tiles. -H3 is reserved for scene titles. -H4 is for section titles within scenes, if such granularity is necessary. +You are free to structure your project files as you wish in subfolders and split between files. All +that matters to novelWriter is the linear order they appear in the project tree (top to bottom) and +the chapters, scenes and sections of the novel is determined by the headings within those files. -For the files designated as project notes, the usage of headers imply no structural meaning, and the user is free to do whatever they want. +The four heading levels (H1 to H4) are treated as follows: + +* H1 is used for the book title, and for partitions. +* H2 is used for chapter tiles. +* H3 is reserved for scene titles. +* H4 is for section titles within scenes, if such granularity is needed. + +This structure is only considered on novel files. For the files designated as project notes, the +usage of headers imply no structural meaning, and the user is free to do whatever they want. Project Export -------------- -The project can at any time be exported to a range of different formats. -Natively, novelWriter supports export to plain text file, HTML document, novelWriter flavoured markdown, standard markdown (requires Qt 5.14), and to a basic Open Document. -In addition, printing and printing to PDF is also possible. -The best supported export format is HTML, which can be imported or converted by a number of other tools like Pandoc, or simply imported into Libre Office and similar. +The project can at any time be exported to a range of different formats. Natively, novelWriter +supports export to plain text file, HTML document, novelWriter flavoured markdown, standard +markdown (requires Qt 5.14), and to a basic Open Document. + +In addition, printing and printing to PDF is also possible. The best supported export format is +HTML, which can be imported or converted by a number of other tools like Pandoc, or simply imported +into Libre Office and similar. + +It is also possible to export the content of the project to a JSON file. This is useful if you want +to write your own processing script in for instance Python, as the entire novel can be read into a +Python dictionary with a couple of lines of code. Screenshot ---------- From c6c47866d141e5137a363dac9466db3ec140d741 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Sun, 2 Aug 2020 22:26:01 +0200 Subject: [PATCH 03/21] Updated the getting started page --- docs/source/started.rst | 91 ++++++++++++++++++++++++++++------------- 1 file changed, 63 insertions(+), 28 deletions(-) diff --git a/docs/source/started.rst b/docs/source/started.rst index bd6684be..32298e9a 100644 --- a/docs/source/started.rst +++ b/docs/source/started.rst @@ -2,15 +2,39 @@ Getting Started *************** -You can download novelWriter from https://github.com/vkbo/novelWriter/releases +Latest version of novelWriter is |version|. -Latest version is |version|. +Installation +============ -Installing Dependencies -======================= +You can download the latest version of novelWriter from the source repository on GitHub_. You can +also install it directly from PyPi with ``pip install novelwriter``, or download the packages +directly from the PyPi_ project page. -If you already have Python installed, all you need to do is install the dependencies. -To do this, your need to open your command line tool, find the folder where you extracted novelWriter, and run: +.. _GitHub: https://github.com/vkbo/novelWriter/releases +.. _PyPi: https://pypi.org/project/novelWriter/ + + +Dependencies +============ + +novelWriter has been designed to rely on as few dependencies as possible. Aside from the package(s) +needed to communicate with the Qt GUI libraries, only one package is required for handling the XML +format of the main project file. Everything else is handled with standard Python libraries. + +Optionally, a package can be installed to interface with the Enchant spell checking libaries, but +this isn't required. If no external spell checking library is available, novelWriter falls back to +using the internal ``difflib`` of Python to check spelling. This is a much slower approach, and it +is less sophisticated than full spell checking libaries, but if you only work with small files, the +performance loss is not noticeable. + + +Package Installation +-------------------- + +If you already have Python installed, all you need to do is install the dependencies. To do this, +you need to open your command line tool, find the folder where you extracted novelWriter, and run +the following command: .. code-block:: console @@ -20,26 +44,33 @@ On some operating systems you need to use ``python3`` instead of ``python``. The following Python packages are required to run novelWriter: -* ``pyqt5`` for the GUI -* ``lxml`` for writing project files +* ``pyqt5``, needed for connecting with the Qt5 libraries. +* ``lxml``, needed full XML support. .. note:: - Sometimes the SVG graphics package for pyqt5 must be installed separately. - -The following are optional, but recommended: - -* ``pyenchant`` for spell checking + Sometimes the SVG graphics package for PyQt5 must be installed separately. It is usually called + something like ``python3-pyqt5.qtsvg``. PyQt/Qt should be at least 5.2.1, but ideally 5.10 or higher for nearly all features to work. -Exporting to standard Markdown requires PyQt/Qt 5.14. -There are no known minimum for package lxml, but the code was originally written with 4.2. -The optional spell check library must be at least 3.0.0 to work with Windows. -On Linux, 2.0.0 also works fine. +Exporting to standard Markdown, for instance, requires PyQt/Qt 5.14. Searching using regular +expressions requires 5.3, and for full Unicode support, 5.13. + +There are no known minimum for package ``lxml``, but the code was originally written with 4.2, +which is therefore set as the minimum. + +The spell checking extension is optional, but recommended: + +* ``pyenchant``, needed for efficient spell checking. + +The optional spell check library must be at least 3.0.0 to work with Windows. On Linux, 2.0.0 also +works fine. + Running novelWriter =================== -If all the required dependencies are met, you can run novelWriter from the command line in one of the following ways: +If all the required dependencies are met, you can run novelWriter from the command line in one of +the following ways: .. code-block:: console @@ -47,22 +78,25 @@ If all the required dependencies are met, you can run novelWriter from the comma python3 novelWriter.py ./novelWriter.py -A few switches are supported from the command line, mostly to assist in debugging if an error is encountered. -To list all options, run: +A few switches are supported from the command line, mostly to assist in debugging if an error is +encountered. To list all options, run: .. code-block:: console python novelWriter.py --help -There are also a couple of install scripts in the assets folder which will assist in setting up launch icon and the novelWriter project file mimetype for Gnome desktops on Linux. -Currently, there's one script for Debian and one for Ubuntu. +There are also a couple of install scripts in the assets folder which will assist in setting up +launch icon and the novelWriter project file mimetype for Gnome desktops on Linux. Currently, +there's one script for Debian and one for Ubuntu. + Building a Standalone Executable ================================ -A standalone executable can be built with pyinstaller, using the provided python script "install.py" in the source folder. -This script will automatically try to install all dependencies and build the standalone executable of novelWriter. -You can run the script by typing the following into your command prompt: +A standalone executable can be built with pyinstaller, using the provided python script +``install.py`` in the source folder. This script will automatically try to install all dependencies +and build the standalone executable of novelWriter. You can run the script by typing the following +into your command prompt: .. code-block:: console @@ -77,12 +111,13 @@ Additional Instructions for Windows If you don't have Python installed, you can download it from the python.org website. The installers for Windows are available at https://www.python.org/downloads/windows/ -novelWriter should work with Python 3.5 or higher, and the executable installer is the easiest to install. -Please note that the `pyenchant` package for spell checking does not currently work with the x86-64 version, so if you want spell checking, you must install the x86 version. +novelWriter should work with Python 3.6 or higher, and the executable installer is the easiest to +install. Also, make sure you select the "Add Python to PATH" option. .. image:: images/python_win_install.png :width: 600 -Once Python is set up and running, you can either run novelWriter from the folder where you extracted it, or you can build an executable and run that from a desktop icon instead. +Once Python is set up and running, you can either run novelWriter from the folder where you +extracted it, or you can build an executable and run that from a desktop icon instead. From 9e2fe92c83c471c3fbaa6c46d10e087d9c6e95e9 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Mon, 3 Aug 2020 22:46:43 +0200 Subject: [PATCH 04/21] Added custom css and rewrote the interfaces docs file --- .gitignore | 1 - docs/source/_static/css/custom.css | 23 ++ docs/source/conf.py | 21 +- docs/source/interface.rst | 446 +++++++++++++++++++---------- docs/source/projects.rst | 4 + docs/source/structure.rst | 6 + 6 files changed, 340 insertions(+), 161 deletions(-) create mode 100644 docs/source/_static/css/custom.css diff --git a/.gitignore b/.gitignore index 57c36a92..95c238c4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ # Documentation /docs/build/ -/docs/source/_* # Python Temp __pycache__ diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css new file mode 100644 index 00000000..683ca054 --- /dev/null +++ b/docs/source/_static/css/custom.css @@ -0,0 +1,23 @@ +/* + * Custom CSS Rules for Sphinx RTD Theme + */ + +.kbd { + background-color: #eeeeee; + border: 1px solid #b4b4b4; + border-radius: 3px; + color: #333333; + display: inline-block; + font-size: 0.85em; + font-weight: 400; + line-height: 1; + padding: 2px 4px; + margin-left: 1px; + margin-right: 1px; + white-space: nowrap; +} + +.tight-table td { + white-space: normal !important; + vertical-align: text-top; +} diff --git a/docs/source/conf.py b/docs/source/conf.py index 07022509..71cbf8db 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -69,23 +69,20 @@ pygments_style = None # -- Options for HTML output ------------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. html_theme = "sphinx_rtd_theme" html_theme_options = { # Toc options - 'collapse_navigation': True, - 'sticky_navigation': True, - 'navigation_depth': 3, - 'includehidden': True, - 'titles_only': False + "collapse_navigation": True, + "sticky_navigation": True, + "navigation_depth": 3, + "includehidden": True, + "titles_only": False } -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ["_static"] -html_static_path = [] +html_static_path = ["_static"] +html_css_files = [ + "css/custom.css", +] # Custom sidebar templates, must be a dictionary that maps document names # to template names. diff --git a/docs/source/interface.rst b/docs/source/interface.rst index e96783c8..f8362262 100644 --- a/docs/source/interface.rst +++ b/docs/source/interface.rst @@ -1,204 +1,354 @@ +.. _a_ui: + *************** User Interface *************** The user interface is kept as simple as possible to avoid distractions when writing. -The main window contains a tree view pane with the entire structure of the project, and a small -details panel below it to display additional information about the currently selected item. +.. _a_ui_tree: -Edit View -========= +The Project Tree +================ -Editing a document can be done by either double-clicking on it, or hitting the return key when a file is selected. -This will open the document editor, which uses a simplified markdown format, described in the section below. +The main window contains a Project Tree in the left-most panel. It shows the entire structure of the +project. It has four columns: -The document currently being edited can also be viewed in parallel in a right hand side view pane. -To view a document, simply press :kbd:`Ctrl-R`, or select a file and go to :menuselection:`Document --> View Document` in the menu. -The document viewed does not need to be the same document currently being edited. -If you are viewing the same document as the one you're editing, pressing :kbd:`Ctrl-R` again will update the document with your last changes. +Label + The first column shows the item icon and its label. The labels can be edited from the menu, or by + pressing :kbd:`F2` or :kbd:`Ctrl`:kbd:`E`. -References to tags can be opened in the view pane from the document editor by moving the cursor to a reference to a tag and hitting :kbd:`Ctrl-Enter`. -In the view panel, the references become clickable links, and the "Referenced By" panel at the bottom will show links to all documents referring back to it. +Words + The second column shows the word count of the file, or the sum of words in the child items if it + is a folder. If the counts seem incorrect, they can be updated by rebuilding the Project Index + from the menu, or by pressing :kbd:`F9`. + +Inc + The third column indicates whether the file is included in the final project build or not. You + may want to filter out files that you no longer want to keep in the final manuscript, but want to + keep in the project for reference. + +Flags + The fourth column shows various meta data flags for the item. The first is an icon indicating the + importance or status of the file. These are colour coded status levels that you control and + define. They can be changed in Project Settings. The first character after the icon indicates the + class of the item, that is ``N`` for **Novel**, ``C`` for **Character**, etc (see + :ref:`a_struct_tags`. The second character indicates the file layout type (see + :ref:`a_proj_roots`). + +Below the Project Tree is a small details panel showing the full information of the currently +selected item. This panel also includes the latest paragraph and character counts. + + +.. _a_ui_edit: + +Editing and Viewing Documents +============================= + +To edit a document, double-click the file in the tree view, or press the :kbd:`Return` key while +having it selected. This will open the document in the Editor. The Editor uses a simplified markdown +format. The format is described in the :ref:`a_ui_md` section below. The Editor has a maximise +button (activates Focus Mode) and a close button in the top-right corner. + +Any document in the Project Tree can also be viewed in parallel in a right hand side view panel or +the Viewer. To view a document, press :kbd:`Ctrl`:kbd:`R`, or select :menuselection:`View Document` +in the menu. The document viewed does not have to be the same document currently being edited. If +you *are* viewing the same document though, pressing :kbd:`Ctrl`:kbd:`R` again will update the +document with your latest changes. You can also press the little reload button in the top-right +corner of the view panel next to the close button. + +Both the Editor and the Viewer will show the label of the document in the document header at the +top of the edit or view panel. Optionally, the full project path to the file can be shown. This can +be set in Preferences dialog. Clicking on the document title bar will select and reveal the file +in the Project Tree, making it easier to find the project location of the file in a large project. + +Any reference to a tag in the Editor can be opened in the Viewer by moving the cursor to the label +and pressing :kbd:`Ctrl`:kbd:`Return`. In the Viewer, the references become clickable links. +Clicking them will replace the content of the Viewer with the content of the document the reference +points to. + +At the bottom of the Viewer's panel there is a References panel (click the icon if it is hidden) +that will show links to all documents referring back to it. The Sticky button will freeze the +content of the panel to the current document, even if you navigate to another document. This is +convenient if you want to quickly look through all documents in the list. .. note:: - The "Referenced By" panel relies on an up-to-date index of the project. - If anything is missing, or seems wrong, the index can always be rebuilt from :menuselection:`Tools --> Rebuild Index` or by pressing :kbd:`F9`. + The References panel relies on an up-to-date index of the project. If anything is missing, or + seems wrong, the index can always be rebuilt from :menuselection:`Tools --> Rebuild Index` or by + pressing :kbd:`F9`. -Both the document editor and the viewer will show the label of the document as set in the Project Tree. -Optionally, the full project path to the file can be shown. -This can be set the Preferences. -Clicking on the document title bar will select and reveal the file in the Project Tree, making it easier to find the project location of the file in a large project. +.. _a_ui_md: Markdown Format =============== -The document editor uses a simplified markdown format. -That is, it supports basic formatting like emphasis (italic), strong emphasis (bold) and strikethrough text, as well as four levels of headings. -It is commonly recommended style to differentiate between strong emphasis and emphasis by using ``**`` for strong emphasis and ``_`` for emphasis, although Markdown generally supports also ``__`` for strong emphasis and ``*`` fdr emphasis. -However, since the differentiation makes the highlighting and conversion significantly simpler and faster, in novelWriter this is a rule, not just a recommendation. +The Editor uses a simplified markdown format. That is, it supports basic formatting like emphasis +(italic), strong emphasis (bold) and strikethrough text, as well as four levels of headings. -In addition to these standard markdown features, the editor also allows for comments, that is text that is ignored by the word counter and not exported or, optionally, hidden in the document viewer. -If the first word of a comment is "Synopsis:" (with the colon), the comment is treated specially, and will show up in the Outline View. -The editor also has a minimal set of keywords used for setting tags and references between files. +Some non-standard markdown features have been added. For instance, novelWriter allows for comments, +a synopsis tag, and a set of keyword/value sets used for tags and references. -.. csv-table:: Formatting Syntax - :header: "Format", "Description" - :widths: 15, 50 - "``# Title``", "Heading level one. The space after the # is mandatory." - "``## Title``", "Heading level two. The space after the # is mandatory." - "``### Title``", "Heading level three. The space after the # is mandatory." - "``#### Title``", "Heading level four. The space after the # is mandatory." - "``_text_``", "The text is rendered as emphasised text (italicised)." - "``**text**``", "The text is rendered as strongly emphasised text (bold)." - "``~~text~~``", "Strikethrough text." - "``% text...``", "A comment. The text is not exported by default, seen in viewer, or counted towards word counts." - "``% Synopsis: text...``", "A synopsis comment. Shows up in the Synopsis column of the Outline View, but is otherwise treated as a comment." - "``@keyword: value``", "A keyword argument followed by a value, or a comma separated list of values." +.. _a_ui_md_head: -Some additional rules: +Headings +-------- -1. The emphasis and strikethrough formatting tags do not allow spaces between the words and the tag itself. - That is, ``**text**`` is valid, ``**text **`` is not. -2. More generally, the delimiters must be on the outer edge of words. - That is, ``some **text in bold** here`` is valid, ``some** text in bold** here`` is not. +Four levels of headings are allowed. For files of type "Note", they are free to be used as you see +fit, but for all other file layouts used for the novel text itself, they indicate the structural +level of the novel. See :ref:`a_struct_heads` for more details. + +``# Title`` + Heading level one. The space after the # is mandatory. If the file is a novel file, the header + level indicates the start of a new partition. + +``## Title`` + Heading level two. The space after the # is mandatory. If the file is a novel file, the header + level indicates the start of a new chapter. + +``### Title`` + Heading level three. The space after the # is mandatory. If the file is a novel file, the header + level indicates the start of a new scene. + +``#### Title`` + Heading level four. The space after the # is mandatory. If the file is a novel file, the header + level indicates the start of a new section. + + +.. _a_ui_md_emph: + +Text Emphasis +------------- + +In markdown it is often recommended to differentiate between strong emphasis and emphasis by using +``**`` for strong emphasis and ``_`` for emphasis, although markdown generally supports also ``__`` +for strong emphasis and ``*`` fdr emphasis. However, since the differentiation makes the +highlighting and conversion significantly simpler and faster, in novelWriter this is a rule, not +just a recommendation. + +``_text_`` + The text is rendered as emphasised text (italicised). + +``**text**`` + The text is rendered as strongly emphasised text (bold). + +``~~text~~`` + Strikethrough text. + +There are also some additional rules: + +1. The emphasis and strikethrough formatting tags do not allow spaces between the words and the tag + itself. That is, ``**text**`` is valid, ``**text **`` is not. +2. More generally, the delimiters must be on the outer edge of words. That is, ``some **text in + bold** here`` is valid, ``some** text in bold** here`` is not. 3. If using both ``**`` and ``_`` to wrap the same text, the underscore must be the inner wrapper. - This is due to the underscore also being a valid word character, so if they are on the outside, they violate rule 2. + This is due to the underscore also being a valid word character, so if they are on the outside, + they violate rule 2. -The editor and viewer also supports markdown standard hard line breaks, and preserves non-breaking spaces. -A hard line break is achieved by leaving two or more spaces at the end of the line. -Alternatively, the user can press :kbd:`Ctrl-K, Return` to insert this. -A non-breaking space is inserted with :kbd:`Ctrl-K, Space`. -Thin spaces are also supported, and can be inserted with :kbd:`Ctrl-K, Shift-Space`, and the non-breaking version of it with :kbd:`Ctrl-K, Ctrl-Space`. +.. _a_ui_md_comm: -Both hard line breaks and non-breaking spaces are highlighted by the syntax highlighter as an alternate coloured background, depending on the selected theme. +Comments and Synopsis +--------------------- + +In addition to these standard markdown features, the novelWriter also allows for comments in the +text files. The text of the comment is ignored by the word counter and not exported or, optionally, +hidden when viewing the document. If the first word of a comment is ``Synopsis:`` (with the colon), +the comment is treated specially, and will show up in the :ref:`a_ui_outline`. + +``% text...`` + A comment. The text is not exported by default (this can be overridden), seen in the Viewer, or + counted towards word counts. + +``% Synopsis: text...`` + A synopsis comment. It is generally treated in the same way as regular comments, except that it + is captured by the indexing algorithm and displayed in the :ref:`a_ui_outline`. It can also be + filtered separately when exporting the project to for instance generate an outline document of + the whole project. + + +.. _a_ui_md_tags: + +Tags and References +------------------- + +The Editor also has a minimal set of keywords used for setting tags and references between files. + +``@keyword: value`` + A keyword argument followed by a value, or a comma separated list of values. + +The available tag and reference keywords are listed in the :ref:`a_struct_tags` section. + + +.. _a_ui_md_add: + +Additional Markdown and Non-Standard Features +--------------------------------------------- + +The Editor and Viewer also supports markdown standard hard line breaks, and preserves non-breaking +spaces if running with Qt 5.9 or higher. + +* A hard line break is achieved by leaving two or more spaces at the end of the line. Alternatively, + the user can press :kbd:`Ctrl`:kbd:`K`, :kbd:`Return` to insert this. +* A non-breaking space is inserted with :kbd:`Ctrl`:kbd:`K`, :kbd:`Space`. +* Thin spaces are also supported, and can be inserted with :kbd:`Ctrl`:kbd:`K`, :kbd:`Shift`:kbd:`Space`. +* Non-breaking thin space can be inserted with :kbd:`Ctrl`:kbd:`K`, :kbd:`Ctrl`:kbd:`Space`. + +These are all insert features, and the :menuselection:`Insert` menu has more. They are also listed +in :ref:`a_ui_shortcuts_ins`. + +Both hard line breaks and non-breaking spaces are highlighted by the syntax highlighter as an +alternate coloured background, depending on the selected theme. + + +.. _a_ui_outline: Project Outline View ==================== -The Project Outline View is available as the second tab on the right hand side of the main window marked "Outline". -The Outline View provides an overview of the novel structure, displaying a tree hierarchy of the elements of the novel, that is, the level 1 to 4 headings. - -Various meta data and information extracted from tags can be displayed in columns in the Outline View. -To turn on or off specific columns, right click the header and select the columns you want to show. -The order of the columns can be rearranged by dragging them to a different position. +The Project Outline View is available as the second tab on the right hand side of the main window +labelled "Outline". The Outline View provides an overview of the novel structure, displaying a tree +hierarchy of the elements of the novel, that is, the level 1 to 4 headings. .. note:: - The "Title" columns cannot be disabled or moved. + Since the internal structure of the novel does not depend on the file structure of the Project + Tree, these will not necessarily look the same. See the :ref:`a_struct` page for more details. -The information viewed in teh Outline View is based on the Project Index. -While novelWriter does its best to keep the index up-to-date when content changes, you can always rebuild it manually by pressing :kbd:`F9`. +Various meta data and information extracted from tags can be displayed in columns in the Outline +View. A default set is visible, but you can turn on or off more columns by right clicking the header +and selecting the columns you want to show. The order of the columns can also be rearranged by +dragging them to a different position. -The Outline View itself can be regenerated by pressing :kbd:`F10`. -You can also enable automatic updating in the :menuselection:`Tools` menu, which will trigger an update whenever the index is updated. -You may want to disable this feature if your project is very large, +.. note:: + The Title column cannot be disabled or moved. -Synopsis Feature -================ +The information viewed in the Outline View is based on the Project Index. While novelWriter does its +best to keep the index up to date when content changes, you can always rebuild it manually by +pressing :kbd:`F9` if something isn't right. + +The Outline View itself can be regenerated by pressing :kbd:`F10`. You can also enable automatic +updating in the :menuselection:`Tools` menu, which will trigger an update whenever the index is +updated and the Outline tab is activated. You may want to disable this feature if your project is +very large, + + +.. _a_ui_outline_synopsis: + +Synopsis Column +--------------- The "Synopsis" column of the Outline View takes its information from a specially formatted comment. -In order to flag a comment as a Synopsis, add the word "Synopsis:" as the first word of the comment. -The ":" is required, and "synopsis" is not case sensitive. -If it is correctly formatted, the syntax highlighter will indicate this by altering the colour of the word. +See :ref:`a_ui_md_comm`. In order to flag a comment as a synopsis, add the word ``Synopsis:`` as the +first word of the comment. The ``:`` is required, and the word ``synopsis`` is not case sensitive. +If it is correctly formatted, the syntax highlighter will indicate this by altering the colour of +the word. .. note:: - Only one comment can be flagged as a synopsis comment for each heading. - If multiple comments are flagged as a synopsis, the last one will be used. + Only one comment can be flagged as a synopsis comment for each heading. If multiple comments are + flagged as a synopsis, the last one will be used. + + +.. _a_ui_shortcuts: Keyboard Shortcuts ================== -Most features are available as keyboard shortcuts. -These are as following: +Most features are available as keyboard shortcuts. These are as following: .. csv-table:: Keyboard Shortcuts :header: "Shortcut", "Description" - :widths: 15, 50 + :widths: 30, 70 + :class: "tight-table" - ":kbd:`Alt-1`", "Switch focus to tree view pane." - ":kbd:`Alt-2`", "Switch focus to document editor pane." - ":kbd:`Alt-3`", "Switch focus to document viewer pane." - ":kbd:`Ctrl-.`", "Correct word under cursor." - ":kbd:`Ctrl-,`", "Open the Preferences dialog." - ":kbd:`Ctrl-/`", "Change block format to comment." - ":kbd:`Ctrl--`", "Strikethrough selected text, or word under cursor." - ":kbd:`Ctrl-0`", "Remove block formatting for block under cursor." - ":kbd:`Ctrl-1`", "Change block format to header level 1." - ":kbd:`Ctrl-2`", "Change block format to header level 2." - ":kbd:`Ctrl-3`", "Change block format to header level 3." - ":kbd:`Ctrl-4`", "Change block format to header level 4." - ":kbd:`Ctrl-A`", "Select all text in document." - ":kbd:`Ctrl-B`", "Format selected text, or word under cursor, with strong emphasis (bold)." - ":kbd:`Ctrl-C`", "Copy selected text to clipboard." - ":kbd:`Ctrl-D`", "Wrap selected text, or word under cursor, in double quotes." - ":kbd:`Ctrl-E`", "If in tree view, edit a document or folder settings. (Same as :kbd:`F2`)" - ":kbd:`Ctrl-F`", "Open the search bar and search for selected word, if any is selected." - ":kbd:`Ctrl-G`", "Find next occurrence of word in current document. (Same as :kbd:`F3`)" - ":kbd:`Ctrl-H`", "Open the search and replace bar and search for selected word, if any is selected. (On Mac, this is :kbd:`Cmd-=`)" - ":kbd:`Ctrl-I`", "Format selected text, or word under cursor, with emphasis (italic)." - ":kbd:`Ctrl-N`", "Create new document." - ":kbd:`Ctrl-O`", "Open selected document." - ":kbd:`Ctrl-Q`", "Exit novelWriter." - ":kbd:`Ctrl-R`", "If in tree view, open a document for viewing. If editor pane has focus, open current document for viewing." - ":kbd:`Ctrl-S`", "Save the current document in the editor." - ":kbd:`Ctrl-V`", "Paste text from clipboard to cursor position." - ":kbd:`Ctrl-W`", "Close the current document in the editor." - ":kbd:`Ctrl-X`", "Cut selected text to clipboard." - ":kbd:`Ctrl-Y`", "Redo latest undo." - ":kbd:`Ctrl-Z`", "Undo latest changes." - ":kbd:`Ctrl-F7`", "Toggle spell checking." - ":kbd:`Ctrl-F10`", "Toggle automatic updating of project outline." - ":kbd:`Ctrl-Del`", "If in tree view, move a document to trash, or delete a folder." - ":kbd:`Ctrl-Enter`", "Open the tag or reference under the cursor in the view panel." - ":kbd:`Ctrl-Shift-,`", "Open the Project Settings dialog." - ":kbd:`Ctrl-Shift-/`", "Remove block formatting for block under cursor." - ":kbd:`Ctrl-Shift-1`", "Replace occurrence of word in current document, and search for next occurrence." - ":kbd:`Ctrl-Shift-A`", "Select all text in current paragraph." - ":kbd:`Ctrl-Shift-B`", "Format selected text, or word under cursor, with very strong emphasis (bold and italic)." - ":kbd:`Ctrl-Shift-D`", "Wrap selected text, or word under cursor, in single quotes." - ":kbd:`Ctrl-Shift-G`", "Find previous occurrence of word in current document. (Same as :kbd:`Shift-F3`" - ":kbd:`Ctrl-Shift-I`", "Import text to the current document from a text file." - ":kbd:`Ctrl-Shift-N`", "Create new folder." - ":kbd:`Ctrl-Shift-O`", "Open a project." - ":kbd:`Ctrl-Shift-R`", "Close the document view pane." - ":kbd:`Ctrl-Shift-S`", "Save the current project." - ":kbd:`Ctrl-Shift-W`", "Close the current project." - ":kbd:`Ctrl-Shift-Up`", "Move item one step up in the tree view." - ":kbd:`Ctrl-Shift-Down`", "Move item one step down in the tree view." - ":kbd:`F1`", "Open documentation. This just tries to send the documentation URL ti your browser." - ":kbd:`F2`", "If in tree view, edit a document or folder settings. (Same as :kbd:`Ctrl-E`)" - ":kbd:`F3`", "Find next occurrence of word in current document. (Same as :kbd:`Ctrl-G`)" - ":kbd:`F5`", "Open the Build Novel Project dialog." - ":kbd:`F6`", "Open the Writing Statistics dialog." - ":kbd:`F7`", "Re-run spell checker." - ":kbd:`F8`", "Activate Focus Mode, hiding project tree and view panel." - ":kbd:`F9`", "Re-build project index." - ":kbd:`F10`", "Re-build project outline." - ":kbd:`F11`", "Activate full screen mode." - ":kbd:`Shift-F3`", "Find previous occurrence of word in current document. (Same as :kbd:`Ctrl-Shift-G`" - ":kbd:`Enter`", "If in tree view, open a document for editing." + ":kbd:`Alt`:kbd:`1`", "Switch focus to the Project Tree." + ":kbd:`Alt`:kbd:`2`", "Switch focus to Editor." + ":kbd:`Alt`:kbd:`3`", "Switch focus to Viewer." + ":kbd:`Ctrl`:kbd:`.`", "Open menu to correct word under cursor." + ":kbd:`Ctrl`:kbd:`,`", "Open the Preferences dialog." + ":kbd:`Ctrl`:kbd:`/`", "Change block format to comment." + ":kbd:`Ctrl`:kbd:`-`", "Strikethrough selected text, or word under cursor." + ":kbd:`Ctrl`:kbd:`0`", "Remove block formatting for block under cursor." + ":kbd:`Ctrl`:kbd:`1`", "Change block format to header level 1." + ":kbd:`Ctrl`:kbd:`2`", "Change block format to header level 2." + ":kbd:`Ctrl`:kbd:`3`", "Change block format to header level 3." + ":kbd:`Ctrl`:kbd:`4`", "Change block format to header level 4." + ":kbd:`Ctrl`:kbd:`A`", "Select all text in the document." + ":kbd:`Ctrl`:kbd:`B`", "Format selected text, or word under cursor, with strong emphasis (bold)." + ":kbd:`Ctrl`:kbd:`C`", "Copy selected text to clipboard." + ":kbd:`Ctrl`:kbd:`D`", "Wrap selected text, or word under cursor, in double quotes." + ":kbd:`Ctrl`:kbd:`E`", "If in the Project Tree, edit a document or folder settings. (Same as :kbd:`F2`)" + ":kbd:`Ctrl`:kbd:`F`", "Open the search bar and search for the selected word, if any is selected." + ":kbd:`Ctrl`:kbd:`G`", "Find next occurrence of search word in current document. (Same as :kbd:`F3`)" + ":kbd:`Ctrl`:kbd:`H`", "Open the search and replace bar and search for the selected word, if any is selected. (On Mac, this is :kbd:`Cmd`:kbd:`=`)" + ":kbd:`Ctrl`:kbd:`I`", "Format selected text, or word under cursor, with emphasis (italic)." + ":kbd:`Ctrl`:kbd:`N`", "Create new document." + ":kbd:`Ctrl`:kbd:`O`", "Open selected document." + ":kbd:`Ctrl`:kbd:`Q`", "Exit novelWriter." + ":kbd:`Ctrl`:kbd:`R`", "If in the Project Tree, open a document for viewing. If the Editor has focus, open current document for viewing." + ":kbd:`Ctrl`:kbd:`S`", "Save the current document in the Editor." + ":kbd:`Ctrl`:kbd:`V`", "Paste text from clipboard to cursor position." + ":kbd:`Ctrl`:kbd:`W`", "Close the current document in the Editor." + ":kbd:`Ctrl`:kbd:`X`", "Cut selected text to clipboard." + ":kbd:`Ctrl`:kbd:`Y`", "Redo latest undo." + ":kbd:`Ctrl`:kbd:`Z`", "Undo latest changes." + ":kbd:`Ctrl`:kbd:`F7`", "Toggle spell checking." + ":kbd:`Ctrl`:kbd:`F10`", "Toggle automatic updating of Project Outline." + ":kbd:`Ctrl`:kbd:`Del`", "If in the Project Tree, move a document to trash, or delete a folder." + ":kbd:`Ctrl`:kbd:`Enter`", "Open the tag or reference under the cursor in the Viewer." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`,`", "Open the Project Settings dialog." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`/`", "Remove block formatting for block under cursor." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`1`", "Replace occurrence of search word in current document, and search for next occurrence." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`A`", "Select all text in current paragraph." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`D`", "Wrap selected text, or word under cursor, in single quotes." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`G`", "Find previous occurrence of search word in current document. (Same as :kbd:`Shift`:kbd:`F3`)" + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`I`", "Import text to the current document from a text file." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`N`", "Create new folder." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`O`", "Open a project." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`R`", "Close the document Viewer." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`S`", "Save the current project." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`W`", "Close the current project." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`Up`", "Move item one step up in the Project Tree." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`Down`", "Move item one step down in the Project Tree." + ":kbd:`F1`", "Open the documentation. This just tries to send the documentation URL to your browser." + ":kbd:`F2`", "If in the Project Tree, edit a document or folder settings. (Same as :kbd:`Ctrl`:kbd:`E`)" + ":kbd:`F3`", "Find next occurrence of search word in current document. (Same as :kbd:`Ctrl`:kbd:`G`)" + ":kbd:`F5`", "Open the Build Novel Project dialog." + ":kbd:`F6`", "Open the Writing Statistics dialog." + ":kbd:`F7`", "Re-run spell checker." + ":kbd:`F8`", "Activate Focus Mode, hiding Project Tree and view panel." + ":kbd:`F9`", "Re-build Project Index." + ":kbd:`F10`", "Re-build Project Outline." + ":kbd:`F11`", "Activate full screen mode." + ":kbd:`Shift`:kbd:`F3`", "Find previous occurrence of search word in current document. (Same as :kbd:`Ctrl`:kbd:`Shift`:kbd:`G`)" + ":kbd:`Enter`", "If in the Project Tree, open a document for editing." .. note:: On macOS, replace :kbd:`Ctrl` with :kbd:`Cmd`. -A set of insert features are also available through shortcuts, but they require a double combination of shortcuts. -The insert feature is activated with :kbd:`Ctrl-K`, followed by a key for the inserted character or punctuation. + +.. _a_ui_shortcuts_ins: + +Insert Shortcuts +---------------- + +A set of insert features are also available through shortcuts, but they require a double combination +of key sequences. The insert feature is activated with :kbd:`Ctrl-K`, followed by a key or +combination for the inserted character or punctuation. .. csv-table:: Keyboard Shortcuts :header: "Shortcut", "Description" - :widths: 30, 50 + :widths: 40, 60 + :class: "tight-table" - ":kbd:`Ctrl-K, -`", "Insert a short dash (en dash)." - ":kbd:`Ctrl-K, _`", "Insert a long dash (em dash)." - ":kbd:`Ctrl-K, .`", "Insert ellipsis." - ":kbd:`Ctrl-K, 1`", "Insert left single quote." - ":kbd:`Ctrl-K, 2`", "Insert right single quote." - ":kbd:`Ctrl-K, 3`", "Insert left double quote." - ":kbd:`Ctrl-K, 4`", "Insert right double quote." - ":kbd:`Ctrl-K, Return`", "Insert a hard line break." - ":kbd:`Ctrl-K, Space`", "Insert a non-breaking space." - ":kbd:`Ctrl-K, Shift-Space`", "Insert a thin space." - ":kbd:`Ctrl-K, Ctrl-Space`", "Insert a thin non-breaking space." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`-`", "Insert a short dash (en dash)." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`_`", "Insert a long dash (em dash)." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`.`", "Insert ellipsis." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`1`", "Insert left single quote." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`2`", "Insert right single quote." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`3`", "Insert left double quote." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`4`", "Insert right double quote." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`Return`", "Insert a hard line break." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`Space`", "Insert a non-breaking space." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`Shift`:kbd:`Space`", "Insert a thin space." + ":kbd:`Ctrl`:kbd:`K`, :kbd:`Ctrl`:kbd:`Space`", "Insert a thin non-breaking space." diff --git a/docs/source/projects.rst b/docs/source/projects.rst index f712891f..b6e2d8d1 100644 --- a/docs/source/projects.rst +++ b/docs/source/projects.rst @@ -1,3 +1,5 @@ +.. _a_proj: + ************** Novel Projects ************** @@ -12,6 +14,8 @@ A project can be removed from this list by selecting it and pressing the :kbd:`D The project specific settings are available in :menuselection:`Project --> Project Settings`. See further details below. +.. _a_proj_roots: + Project Roots ============= diff --git a/docs/source/structure.rst b/docs/source/structure.rst index 197a18e1..0c0d7846 100644 --- a/docs/source/structure.rst +++ b/docs/source/structure.rst @@ -1,3 +1,5 @@ +.. _a_struct: + ***************** Project Structure ***************** @@ -8,6 +10,8 @@ This section covers the structure of a novel project. This section concerns files under the Novel type root folder only. There are some restrictions and features that only applies to these type of files. +.. _a_struct_heads: + Importance of Headings ====================== @@ -26,6 +30,8 @@ The different header levels are interpreted as specific section types of the nov * ``### Header3``: Header level 3 signifies a scene level partition. * ``#### Header4``: Header level 4 signifies a sub-scene level partition (section). +.. _a_struct_tags: + Tag References ============== From 2abe214b2fd5d870ae0dfb0d3ca2eab97f10bf22 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Mon, 3 Aug 2020 22:52:25 +0200 Subject: [PATCH 05/21] Added anchors to the already updated files --- docs/source/index.rst | 2 +- docs/source/introduction.rst | 22 ++++++++++++++++++---- docs/source/started.rst | 15 +++++++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 2e1d982d..92294013 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -7,7 +7,7 @@ This is the documentation for novelWriter |version|. **Contents** .. toctree:: - :maxdepth: 1 + :maxdepth: 2 introduction started diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index 5b3d22d4..6613f1e2 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -1,3 +1,5 @@ +.. _a_intro: + ************ Introduction ************ @@ -16,8 +18,11 @@ These additional features are not standard in markdown, but are available throug keywords. Syntax highlighting is provided to make it easier to verify that the markdown tags are used correctly. + +.. _a_intro_design: + Design Philosophy ------------------ +================= The user interface of novelWriter is intended to be as minimalistic as practically possible, while at the same time provide a complete set of features needed for writing a novel. @@ -44,8 +49,11 @@ A second tab is also available on the main window. This is the Outline tab where structure can be displayed, with all the tags and references listed. Depending on how you structure your novel project files, this outline can be quite different than your project tree. + +.. _a_intro_project: + Project Layout --------------- +============== You are free to structure your project files as you wish in subfolders and split between files. All that matters to novelWriter is the linear order they appear in the project tree (top to bottom) and @@ -61,8 +69,11 @@ The four heading levels (H1 to H4) are treated as follows: This structure is only considered on novel files. For the files designated as project notes, the usage of headers imply no structural meaning, and the user is free to do whatever they want. + +.. _a_intro_export: + Project Export --------------- +============== The project can at any time be exported to a range of different formats. Natively, novelWriter supports export to plain text file, HTML document, novelWriter flavoured markdown, standard @@ -76,8 +87,11 @@ It is also possible to export the content of the project to a JSON file. This is to write your own processing script in for instance Python, as the entire novel can be read into a Python dictionary with a couple of lines of code. + +.. _a_intro_screenshots: + Screenshot ----------- +========== **novelWriter with default system theme:** diff --git a/docs/source/started.rst b/docs/source/started.rst index 32298e9a..43f7322a 100644 --- a/docs/source/started.rst +++ b/docs/source/started.rst @@ -1,9 +1,14 @@ +.. _a_started: + *************** Getting Started *************** Latest version of novelWriter is |version|. + +.. _a_started_install: + Installation ============ @@ -15,6 +20,8 @@ directly from the PyPi_ project page. .. _PyPi: https://pypi.org/project/novelWriter/ +.. _a_started_depend: + Dependencies ============ @@ -29,6 +36,8 @@ is less sophisticated than full spell checking libaries, but if you only work wi performance loss is not noticeable. +.. _a_started_depend_packages: + Package Installation -------------------- @@ -66,6 +75,8 @@ The optional spell check library must be at least 3.0.0 to work with Windows. On works fine. +.. _a_started_running: + Running novelWriter =================== @@ -90,6 +101,8 @@ launch icon and the novelWriter project file mimetype for Gnome desktops on Linu there's one script for Debian and one for Ubuntu. +.. _a_started_standalone: + Building a Standalone Executable ================================ @@ -105,6 +118,8 @@ into your command prompt: If successful, the executable will be in the "dist" folder. +.. _a_started_standalone_win: + Additional Instructions for Windows ----------------------------------- From 9b9a3dd5bbfaf368490c668e1308b68a0dd54f38 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Mon, 3 Aug 2020 23:33:05 +0200 Subject: [PATCH 06/21] Finished rewriting the project docs file --- docs/source/projects.rst | 261 ++++++++++++++++++++++++++------------ docs/source/structure.rst | 8 +- docs/source/technical.rst | 2 + 3 files changed, 185 insertions(+), 86 deletions(-) diff --git a/docs/source/projects.rst b/docs/source/projects.rst index b6e2d8d1..238f2ecd 100644 --- a/docs/source/projects.rst +++ b/docs/source/projects.rst @@ -5,158 +5,253 @@ Novel Projects ************** A novelWriter project requires a dedicated folder for storing its files on the local file system. -See the Technical Information section for further details. +See the :ref:`a_tech` page for further details. -A new project can be created from the Project menu by selecting :menuselection:`Project --> New Project`. -A list of recently opened projects is maintained, and displayed in the "Open Project" dialog. -A project can be removed from this list by selecting it and pressing the :kbd:`Del` key. +A new project can be created from the :menuselection:`Project` menu by selecting +:menuselection:`New Project`. A list of recently opened projects is maintained, and displayed in the +Open Project dialog. A project can be removed from this list by selecting it and pressing the +:kbd:`Del` key. + +The project specific settings are available in :menuselection:`Project --> Project Settings`. See +further details below in the :ref:`a_proj_settings` section. -The project specific settings are available in :menuselection:`Project --> Project Settings`. -See further details below. .. _a_proj_roots: Project Roots ============= -Projects are structured into a set of root folders, visible in the left side tree view panel. +Projects are structured into a set of top level folders called *root folders*. They are visible in +the Project Tree. -The core novel files go into a root folder of type "Novel". -Other supporting files go into root folders of types "Plot", "Characters", "Locations", "Timeline", "Objects", "Entities", or "Custom". -These other root folder types are intended for your notes on the various elements of your story. -Using these is of course entirely optional. -A new project will not have all of the root folders present, but you can add the ones you want from :menuselection:`Project --> Create Root Folder`. +The core novel files go into a root folder of type "Novel". Other supporting files go into the other +root folders. These other root folder types are intended for your notes on the various elements of +your story. Using these is of course entirely optional. A new project will not have all of the root +folders present, but you can add the ones you want from :menuselection:`Project --> Create Root Folder`. -The root folders are intended for the following use, but aside from the Novel folder, no restrictions are enforced by the application. -You can use them however you want. +The root folders are intended for the following use, but aside from the Novel folder, no +restrictions are enforced by the application. You can use them however you want. .. note:: The root folders correspond to the categories of tags that can be used. See the "Project Structure" section for further details. -* **Novel:** The root folder of all text that goes into the final novel. - This class of files have other rules and features than other files in the project. - See the Novel Structure section for more details. -* **Plot:** This is the root folder where main plots can be outlined. - It is optional, but adding at least dummy files can be useful in order to tag plot elements for the Outline View. -* **Characters:** Character files go in this root folder. - These are especially important if one wants to use the Outline View to see which character appears where, and which part of the story is told from a specific character's point-of-view. -* **Locations:** Location is for various scene locations that one wants to track. -* **Timeline:** If the story jumps in time within the same plot, this class of files can be used to track this. -* **Objects:** Important objects in the story can be tracked here. -* **Entities:** Entities, like organisations or companies, that are part of the plot, can be organised here. -* **Custom:** The custom root folder can be used for tracking anything else not covered by the above options. +Novel + The root folder of all text that goes into the final novel. This class of files have other rules + and features than other files in the project. See the :ref:`a_struct` page for more details. -Deleted files will be moved into a special "Trash" root folder. -Files in the Trash folder can be deleted permanently. +Plot + This is the root folder where main plots can be outlined. It is optional, but adding at least + dummy files can be useful in order to tag plot elements for the Outline View. Tags in this folder + can be references using the ``@plot`` keyword. + +Characters + Character files go in this root folder. These are especially important if one wants to use the + Outline View to see which character appears where, and which part of the story is told from a + specific character's point-of-view. Tags in this folder can be references using the ``@pov`` + keyword for point-of-view characters, or the ``@char`` keyword for other characters. + +Locations + The locations folder is for various scene locations that you want to track. Tags in this folder + can be references using the ``@location`` keyword. + +Timeline + If the story has multiple plot timelines or jumps in time within the same plot, this class of + files can be used to track this. Tags in this folder can be references using the ``@time`` + keyword. + +Objects + Important objects in the story, for instance important objects that change hands often, can be + tracked here. Tags in this folder can be references using the ``@object`` keyword. + +Entities + Does your plot have many powerful organisations or companies? Or other entities that are part of + the plot? They can be organised here. Tags in this folder can be references using the ``@entity`` + keyword. + +Custom + The custom root folder can be used for tracking anything else not covered by the above options. + Tags in this folder can be references using the ``@custom`` keyword. + +For more information about the tags listed, see :ref:`a_struct_tags`. + +.. note:: + Deleted files will be moved into a special "Trash" root folder. Files in the Trash folder can + then be deleted permanently, either individually, or by emptying the trash from the menu. + + +.. _a_proj_roots_orph: Orphaned Documents ------------------ -In the event the editor crashes or otherwise exits without saving the project state, files that have been added to the project tree and are saved to disk will appear in a special "Orphaned Items" root folder next time the application is started. -These orphaned files will not have any meta data associated with them, although novelWriter will try to restore the file label it had in the project tree. -Other information will have to be set again, and the files moved back to the correct location in the project. +If novelWriter crashes or otherwise exits without saving the project state, or if you're using a +file synchronisation tool, there may be files in the project folder that isn't tracked in the core +project file. These files, when discovered, are handled by the Orphaned Documents routine. + +Files that are discovered will be re-added to the project tree in a special "Orphaned Items" root +folder next time the application is started. These orphaned files will not have most of the meta +data preserved, although novelWriter will try to restore the file label it had in the Project Tree. +Other information will have to be set again, and the files moved back to the correct location in +the project. + + +.. _a_proj_roots_lock: Project Lockfile ---------------- -To prevent orphaned files caused by file conflicts when novelWriter projects are synced with file synchronisation tools, a project lockfile is written to the project folder. -If you try to open a project which has such a file, you will be presented with a warning, and some information about where novelWriter thinks the project is open. -You will be give the option to ignore this warning, and continue opening the project. -However, if multiple instances are in fact editing the same project, you are likely to cause inconsistencies and create diverging project files, potentially resulting in loss of data. +To prevent orphaned files caused by file conflicts when novelWriter projects are synced with file +synchronisation tools, a project lockfile is written to the project folder. If you try to open a +project which has such a file, you will be presented with a warning, and some information about +where else novelWriter thinks the project is also open. + +You will be give the option to ignore this warning, and continue opening the project. However, if +multiple instances are in fact editing the same project, you are likely to cause inconsistencies and +create diverging project files, potentially resulting in loss of data. .. note:: - If, for some reason, novelWriter crashes, the lock file may remain. - In such a case it is safe to ignore the lock file warning when re-opening the project. + If, for some reason, novelWriter crashes, the lock file may remain even if there are no other + instances keeping the project open. In such a case it is safe to ignore the lock file warning + when re-opening the project. + + +.. _a_proj_roots_dirs: Using Folders in the Project Tree --------------------------------- -Folders, aside from root folders, have no structural significance to the project. -They are there purely as a way for the user to organise the files in meaningful sections and to be able to close them in the tree view. -When processing the files in the novel, like for instance during export, the folders are ignored. +Folders, aside from root folders, have no structural significance to the project. When novelWriter +is processing the files in the novel, like for instance during export, the folders are ignored. Only +the order of the text files themselves matter. + +The folders are there purely as a way for the user to organise the files in meaningful sections and +to be able to close them in the Project Tree when you're not working on those files, and thus reduce +clutter. + + +.. _a_proj_files: + +Project Files +============= + +New document files can be created from the :menuselection:`Document` menu, or by pressing +:kbd:`Ctrl`:kbd:`N` while in the Project Tree. This will create a new, empty file, and open the Item +Settings dialog where the filename and various other settings can be changed. This dialog can also +be opened again later from either the menu, :menuselection:`Project -> Edit Item`, or by pressing +:kbd:`Ctrl`:kbd:`E` or :kbd:`F2` with the item selected. + +The layout of the file is also defined here. For Novel files, the full list of layout options are +available. For non-Novel files, only "Note" is available. See :ref:`a_struct_layout` for more +details. + +You can also select whether the file is by default included when building the project. This setting +can be overridden in the Build Novel Project tool if you wish to include them anyway. + + +Word Counts +----------- + +A character, word and paragraph count is maintained for each file, as well as dor each section of a +file defined by a header. The word count, and change of words in the current session, is displayed +in the footer of any document open in the Editor, and all stats are shown in the details panel below +the Project Tree for any file selected. + +The word counts are not updated real time, but runs in the background every five seconds. + +A total project word count is displayed in the status bar. The total count depends on the sum of the +values in the Project Tree, which again depend on an up to date index. If the counts seem wrong, a +full project word recount can be initiated by rebuilding the Project Index. Either form the +:menuselection:`Tools` menu, or by pressing :kbd:`F9`. + + +.. _a_proj_settings: Project Settings ================ -The project settings can be accessed from the :menuselection:`Project --> Project Settings` menu entry. -This will open a dialog box, with a set of tabs. +The project settings can be accessed from the :menuselection:`Project --> Project Settings` menu +entry, or by pressing :kbd:`Ctrl`:kbd:`Shift`:kbd:`,`. This will open a dialog box, with a set of +tabs. + Settings Tab ------------ The Settings tab holds the project title and author settings. -Working Title can be set to a different title than the Book Title. -The difference between them is simply that the Working Title is used for the GUI (main window title) and for generating the backup files. -The intention is that the working title should remain unchanged, while changing the final title has no effect on features relying on the project name. -The Book Title is currently not ues for anything, so setting it is just for the benefit of the author. -The Book Authors text box takes one author per line. +Working Title can be set to a different title than the Book Title. The difference between them is +simply that the Working Title is used for the GUI (main window title) and for generating the backup +files. The intention is that the working title should remain unchanged throughput the project, +otherwise the name of exported files and backup files may change too. + +The Book Title amd Book Authors settings are currently not used for anything, so setting then is +just for the benefit of the author. Future, planned features will be using them, and they are +exported on some export formats in the Build Novel Project tool. + Details Tab ----------- -This tab presents an overview of meta data about the project. -It states where on your file system the project is saved, how may times it has been saved, how many folders and files it contains, and how many words exist in the entire project. +This tab presents an overview of meta data for the project. It states where on your file system the +project is saved, how may times it has been saved, how many folders and files it contains, and how +many words exist in the entire project. + Status Tab ---------- -Each file of type "Novel" can be given a status level, signified by a coloured icon. -These are purely there for the user's convenience, and you are not required to use them for any other feature to work. -The intention is to use this list to set what stage of writing you are on, although you can in principle make them whatever you want. +Each file of type "Novel" can be given a status level, signified by a coloured icon. These are +purely there for the user's convenience, and you are not required to use them for any other feature +to work. The intention is to use this list to set what stage of writing you are on, although you can +in principle make them whatever you want. .. note:: - The status levels currently in use by a file cannot be deleted. + The status levels currently in use by one or more files cannot be deleted. + Importance Tab -------------- -Each file of types "Plot", "Character", "World", "Timeline", "Object", "Entity", or "Custom", can be given an importance level, signified by a coloured icon like for status level. -These are also purely there for the user's convenience, and you are not required to use them for any other feature to work. -The intention is to use this list to set how important the character, plot element, or otherwise, is for the story. -Again, these can in principle be used for whatever you want. +Each file of types "Plot", "Character", "World", "Timeline", "Object", "Entity", or "Custom", can be +given an importance level, signified by a coloured icon like for status level. These are also purely +there for the user's convenience, and you are not required to use them for any other feature to +work. The intention is to use this list to set how important the character, plot element, or +otherwise, is for the story. Again, these can in principle be used for whatever you want. .. note:: - The importance levels currently in use by a file cannot be deleted. + The importance levels currently in use by one or more files cannot be deleted. + Auto-Replace Tab ---------------- -A set of automatically replaced keywords can be added in this tab. -The keywords in the left column wile be replaced by the text in the right column when documents are opened in the viewer. -This will also be applied to exports when the feature is added. +A set of automatically replaced keywords can be added in this tab. The keywords in the left column +will be replaced by the text in the right column when documents are opened in the Viewer. They will +also be applied to exports. -Note that a keyword cannot contain any spaces. -The angle brackets are added by default, and when used in the text are a part of the keyword to be replaced. -This is to ensure that parts of the text isn't unintentionally replaced by the content of the list. +.. note:: + A keyword cannot contain any spaces. The angle brackets are added by default, and when used in + the text are a part of the keyword to be replaced. This is to ensure that parts of the text isn't + unintentionally replaced by the content of the list. -Writing Files -============= -New document files can be created from the Document menu, or by pressing :kbd:`Ctrl-N` while in the tree view pane. -This will create a new, empty file, and open the item settings dialog where the filename and various other settings can be set. -This dialog can also be opened again later from either the menu, :menuselection:`Project -> Edit` item, or by pressing :kbd:`Ctrl-E` or :kbd:`F2` with the item selected. - -The layout of the file is also defined here. -For Novel files, the full list of layout options are available. -For non-Novel files, only "Note" is available. -You can also select whether the file is by default included when building the project. -This setting can be overridden in the export tool if you wish to include them anyway. - -See the Project Structure section for more details. +.. _a_proj_backup: Backup ====== -An automatic backup system is built into novelWriter. -In order to use it, a backup path to where the backups are to be stored must to be provided in :menuselection:`Tools --> Preferences`. -Backups can be run automatically when a project is closed, which also implies it is run when the application is closed. -Backups are date stamped zip files of the entire project folder, and are stored in a subfolder of the backup path with the same name as the project working title set in Project Settings. +An automatic backup system is built into novelWriter. In order to use it, a backup path to where the +backup files are to be stored must to be provided in Preferences. + +Backups can be run automatically when a project is closed, which also implies it is run when the +application is closed. Backups are date stamped zip files of the entire project folder, and are +stored in a subfolder of the backup path with the same name as the project Working Title set in +:ref:`a_proj_settings`. The backup feature, when configured, can also be run manually from the :menuselection:`Tools` menu. It is also possible to dissable automated backup for a given project in Project Settings. .. note:: - For the backup to be able to run, the Working Title must be set in Project Settings. - This value is used to generate the folder name for the zip files. + For the backup to be able to run, the Working Title must be set in Project Settings. This value + is used to generate the folder name for the zip files. Without it, the backup will not run. diff --git a/docs/source/structure.rst b/docs/source/structure.rst index 0c0d7846..6da2f893 100644 --- a/docs/source/structure.rst +++ b/docs/source/structure.rst @@ -1,8 +1,8 @@ .. _a_struct: -***************** -Project Structure -***************** +*************** +Novel Structure +*************** This section covers the structure of a novel project. @@ -69,6 +69,8 @@ The syntax highlighter will alert the user that only the correct keywords are us If the index of defined tags is out of date, press :kbd:`F9` to regenerate it, or select :menuselection:`Tools --> Rebuild Index` from the menu. In general, the index for a file is regenerated when a file is saved, so this shouldn't normally be necessary. +.. _a_struct_layout: + Novel File Layout ================= diff --git a/docs/source/technical.rst b/docs/source/technical.rst index 027d2aaf..882e7c50 100644 --- a/docs/source/technical.rst +++ b/docs/source/technical.rst @@ -1,3 +1,5 @@ +.. _a_tech: + ********************* Technical Information ********************* From 0664e49ca2f2f4b5daf99782132d2e3f8dfc7a53 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Aug 2020 12:57:19 +0200 Subject: [PATCH 07/21] Use release instead of version for docs --- docs/source/index.rst | 2 +- docs/source/started.rst | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 92294013..f904d59d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -2,7 +2,7 @@ Welcome to the novelWriter Documentation ######################################## -This is the documentation for novelWriter |version|. +This is the documentation for novelWriter |release|. **Contents** diff --git a/docs/source/started.rst b/docs/source/started.rst index 43f7322a..47269fa0 100644 --- a/docs/source/started.rst +++ b/docs/source/started.rst @@ -4,7 +4,9 @@ Getting Started *************** -Latest version of novelWriter is |version|. +This is a brief guide to how you can get novelWriter running on your computer. These are the methods +currently supported by the developer. Packages may also be available in other package managers, but +those are not managed by me. .. _a_started_install: @@ -16,6 +18,8 @@ You can download the latest version of novelWriter from the source repository on also install it directly from PyPi with ``pip install novelwriter``, or download the packages directly from the PyPi_ project page. +Latest version of novelWriter is |release|. + .. _GitHub: https://github.com/vkbo/novelWriter/releases .. _PyPi: https://pypi.org/project/novelWriter/ From c695ae903ff2c38b98ee7b2adaf47d31b65c8268 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Aug 2020 16:46:36 +0200 Subject: [PATCH 08/21] Added setup option to build qthelp documentation --- .gitignore | 1 + setup.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/.gitignore b/.gitignore index 95c238c4..36320927 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ # Documentation /docs/build/ +novelWriter.qhc # Python Temp __pycache__ diff --git a/setup.py b/setup.py index 6638e0bc..e44a73b1 100755 --- a/setup.py +++ b/setup.py @@ -1,8 +1,79 @@ #!/usr/bin/env python3 +import os +import sys +import shutil +import subprocess import setuptools from nw import __version__, __url__, __docurl__, __issuesurl__, __sourceurl__ +## +# Build the Package +## + +buildDocs = False +if "qthelp" in sys.argv: + buildDocs = True + sys.argv.remove("qthelp") + +if buildDocs: + inFile = os.path.join("docs", "build", "qthelp", "novelWriter.qhcp") + outFile = os.path.join("docs", "build", "qthelp", "novelWriter.qhc") + helpDir = os.path.join("nw", "assets", "help") + dstFile = os.path.join(helpDir, "novelWriter.qhc") + print("") + print("Building Documentation") + print("======================") + print("") + + buildFail = False + try: + subprocess.call(["make","-C", "docs", "qthelp"]) + except Exception as e: + print("Failed with error:") + print(str(e)) + buildFail = True + + try: + subprocess.call(["qhelpgenerator", inFile]) + except Exception as e: + print("Failed with error:") + print(str(e)) + buildFail = True + + if not os.path.isdir(helpDir): + try: + os.mkdir(helpDir) + except Exception as e: + print("Failed with error:") + print(str(e)) + buildFail = True + + try: + if os.path.isfile(dstFile): + os.unlink(dstFile) + os.rename(outFile, dstFile) + except Exception as e: + print("Failed with error:") + print(str(e)) + buildFail = True + + print("") + if buildFail: + print("Documentation build: FAILED") + else: + print("Documentation build: OK") + print("") + +if len(sys.argv) == 1: + # Nothing more to do + sys.exit(0) + +## +# Build the Package +## + +# Read content from files with open("README.md", "r") as inFile: longDescription = inFile.read() From bf184c4e5a69f28e7da60a00145fa0eff9995a20 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Aug 2020 18:49:48 +0200 Subject: [PATCH 09/21] The local documentation can now be opened if installed, otherwise go to online docs --- .gitignore | 1 + docs/source/started.rst | 27 +++++++++++++++- nw/gui/mainmenu.py | 70 +++++++++++++++++++++++++++++++++++------ nw/guimain.py | 1 + setup.py | 23 +++++++++----- 5 files changed, 103 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 36320927..1cc84316 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ # Documentation /docs/build/ +novelWriter.qch novelWriter.qhc # Python Temp diff --git a/docs/source/started.rst b/docs/source/started.rst index 47269fa0..6cb2f3e3 100644 --- a/docs/source/started.rst +++ b/docs/source/started.rst @@ -51,7 +51,7 @@ the following command: .. code-block:: console - python -m pip install -r requirements.txt + pip install -r requirements.txt On some operating systems you need to use ``python3`` instead of ``python``. @@ -78,6 +78,31 @@ The spell checking extension is optional, but recommended: The optional spell check library must be at least 3.0.0 to work with Windows. On Linux, 2.0.0 also works fine. +.. _a_started_depend_docs: + +Building Documentation +---------------------- + +If you installed novelWriter from a package, the documentation should be included. If you're running +novelWriter from the source code, a local copy of this documentation can be generated. It requires +the following Python packages on Debian and Ubuntu. + +* ``python3-sphinx`` +* ``python3-sphinxcontrib.qthelp`` + +Or from PyPi: + +.. code-block:: console + + pip install sphinx sphinxcontrib-qthelp + +To build the help packages from the documentation source, run + +.. code-block:: console + + ./setup.py qthelp + +from the root source folder. .. _a_started_running: diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index 43b95385..c21629b3 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -28,7 +28,9 @@ import logging import nw -from PyQt5.QtCore import QUrl +from os import path + +from PyQt5.QtCore import QUrl, QProcess from PyQt5.QtGui import QDesktopServices from PyQt5.QtWidgets import QMenuBar, QAction, QMessageBox @@ -47,6 +49,10 @@ class GuiMainMenu(QMenuBar): self.theParent = theParent self.theProject = theParent.theProject + self.assistProc = None + self.helpPath = path.join(self.mainConf.assetPath, "help", "novelWriter.qhc") + self.hasHelp = path.isfile(self.helpPath) + self._buildProjectMenu() self._buildDocumentMenu() self._buildEditMenu() @@ -67,6 +73,10 @@ class GuiMainMenu(QMenuBar): return + ## + # Methods + ## + def setAvailableRoot(self): for itemClass in nwItemClass: if itemClass == nwItemClass.NO_CLASS: continue @@ -76,6 +86,25 @@ class GuiMainMenu(QMenuBar): ) return + def closeHelp(self): + """Close the process used for the Qt Assistant, if it is open. + """ + if self.assistProc is None: + return + + if self.assistProc.state() == QProcess.Starting: + if self.assistProc.waitForStarted(10000): + self.assistProc.terminate() + else: + self.assistProc.kill() + + elif self.assistProc.state() == QProcess.Running: + self.assistProc.terminate() + if not self.assistProc.waitForFinished(10000): + self.assistProc.kill() + + return + ## # Update Menu on Settings Changed ## @@ -134,10 +163,21 @@ class GuiMainMenu(QMenuBar): msgBox.aboutQt(self.theParent,"About Qt") return True - def _openHelp(self): - """Open the documentation URL in the system's default browser. + def _openAssistant(self): + """Open the documentation in Qt Assistant. """ - QDesktopServices.openUrl(QUrl(nw.__docurl__)) + self.assistProc = QProcess(self) + self.assistProc.start("assistant", [ + "-collectionFile", self.helpPath, "-enableRemoteControl" + ]) + if not self.assistProc.waitForStarted(20000): + return False + return True + + def _openWebsite(self, theUrl): + """Open an URL in the system's default browser. + """ + QDesktopServices.openUrl(QUrl(theUrl)) return True def _openIssue(self): @@ -818,17 +858,27 @@ class GuiMainMenu(QMenuBar): # Help > Separator self.helpMenu.addSeparator() - # Document > Preview - self.aHelp = QAction("Online Documentation", self) - self.aHelp.setStatusTip("View online documentation") + # Document > Documentation + self.aHelp = QAction("Documentation", self) + if self.hasHelp: + self.aHelp.setStatusTip("View local documentation with Qt Assistant") + self.aHelp.triggered.connect(self._openAssistant) + else: + self.aHelp.setStatusTip("View online documentation") + self.aHelp.triggered.connect(lambda: self._openWebsite(nw.__docurl__)) self.aHelp.setShortcut("F1") - self.aHelp.triggered.connect(self._openHelp) self.helpMenu.addAction(self.aHelp) + # Document > Go to Website + self.aWebsite = QAction("Open the novelWriter Website", self) + self.aWebsite.setStatusTip("View the main website") + self.aWebsite.triggered.connect(lambda: self._openWebsite(nw.__url__)) + self.helpMenu.addAction(self.aWebsite) + # Document > Report Issue self.aIssue = QAction("Report an Issue", self) - self.aIssue.setStatusTip("View online documentation") - self.aIssue.triggered.connect(self._openIssue) + self.aIssue.setStatusTip("Report a bug or issue on GitHub") + self.aIssue.triggered.connect(lambda: self._openWebsite(nw.__issuesurl__)) self.helpMenu.addAction(self.aIssue) return diff --git a/nw/guimain.py b/nw/guimain.py index 12655f20..2571d819 100644 --- a/nw/guimain.py +++ b/nw/guimain.py @@ -892,6 +892,7 @@ class GuiMain(QMainWindow): self.mainConf.saveConfig() self.reportConfErr() + self.mainMenu.closeHelp() qApp.quit() diff --git a/setup.py b/setup.py index e44a73b1..818af1a2 100755 --- a/setup.py +++ b/setup.py @@ -17,10 +17,14 @@ if "qthelp" in sys.argv: sys.argv.remove("qthelp") if buildDocs: - inFile = os.path.join("docs", "build", "qthelp", "novelWriter.qhcp") - outFile = os.path.join("docs", "build", "qthelp", "novelWriter.qhc") - helpDir = os.path.join("nw", "assets", "help") - dstFile = os.path.join(helpDir, "novelWriter.qhc") + + buildDir = os.path.join("docs", "build", "qthelp") + helpDir = os.path.join("nw", "assets", "help") + + inFile = "novelWriter.qhcp" + outFile = "novelWriter.qhc" + datFile = "novelWriter.qch" + print("") print("Building Documentation") print("======================") @@ -35,7 +39,7 @@ if buildDocs: buildFail = True try: - subprocess.call(["qhelpgenerator", inFile]) + subprocess.call(["qhelpgenerator", os.path.join(buildDir, inFile)]) except Exception as e: print("Failed with error:") print(str(e)) @@ -50,9 +54,12 @@ if buildDocs: buildFail = True try: - if os.path.isfile(dstFile): - os.unlink(dstFile) - os.rename(outFile, dstFile) + if os.path.isfile(os.path.join(helpDir, outFile)): + os.unlink(os.path.join(helpDir, outFile)) + if os.path.isfile(os.path.join(helpDir, datFile)): + os.unlink(os.path.join(helpDir, datFile)) + os.rename(os.path.join(buildDir, outFile), os.path.join(helpDir, outFile)) + os.rename(os.path.join(buildDir, datFile), os.path.join(helpDir, datFile)) except Exception as e: print("Failed with error:") print(str(e)) From 3708b3486bb419832842bcf439b592852470530b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Aug 2020 21:23:25 +0200 Subject: [PATCH 10/21] Make sure the assistant executable also exists --- nw/config.py | 21 ++++++++++++++++++--- nw/gui/mainmenu.py | 25 +++++++++++++++---------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/nw/config.py b/nw/config.py index ec397aea..ac5e9fca 100644 --- a/nw/config.py +++ b/nw/config.py @@ -33,6 +33,7 @@ import nw from os import path, mkdir, unlink, rename from time import time +from distutils import spawn from PyQt5.Qt import PYQT_VERSION_STR from PyQt5.QtCore import QT_VERSION_STR, QStandardPaths, QSysInfo @@ -76,9 +77,11 @@ class Config: self.graphPath = None self.dictPath = None self.iconPath = None + self.helpPath = None - # Set default values + # Runtime Settings and Variables self.confChanged = False + self.hasHelp = False ## General self.guiTheme = "default" @@ -200,8 +203,9 @@ class Config: self.kernelVer = "Unknown" # Packages - self.hasEnchant = False - self.hasSymSpell = False + self.hasEnchant = False + self.hasSymSpell = False + self.hasAssistant = False # The Qt Assistant # Recent Cache self.recentProj = {} @@ -315,6 +319,10 @@ class Config: if self.spellLanguage is None: self.spellLanguage = "en" + # Check if local help files exist + self.helpPath = path.join(self.assetPath, "help", "novelWriter.qhc") + self.hasHelp = path.isfile(self.helpPath) + logger.debug("Config initialisation complete") return True @@ -893,6 +901,13 @@ class Config: self.hasEnchant = False logger.debug("Checking package pyenchant: Missing") + try: + self.hasAssistant = spawn.find_executable("assistant") + logger.debug("Checking executable assistant: Ok") + except: + self.hasAssistant = False + logger.debug("Checking executable assistant: Missing") + return # End Class Config diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index c21629b3..ed42c2ba 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -49,10 +49,10 @@ class GuiMainMenu(QMenuBar): self.theParent = theParent self.theProject = theParent.theProject + # Internals self.assistProc = None - self.helpPath = path.join(self.mainConf.assetPath, "help", "novelWriter.qhc") - self.hasHelp = path.isfile(self.helpPath) + # Build Menu self._buildProjectMenu() self._buildDocumentMenu() self._buildEditMenu() @@ -79,8 +79,10 @@ class GuiMainMenu(QMenuBar): def setAvailableRoot(self): for itemClass in nwItemClass: - if itemClass == nwItemClass.NO_CLASS: continue - if itemClass == nwItemClass.TRASH: continue + if itemClass == nwItemClass.NO_CLASS: + continue + if itemClass == nwItemClass.TRASH: + continue self.rootItems[itemClass].setEnabled( self.theProject.projTree.checkRootUnique(itemClass) ) @@ -166,12 +168,15 @@ class GuiMainMenu(QMenuBar): def _openAssistant(self): """Open the documentation in Qt Assistant. """ - self.assistProc = QProcess(self) - self.assistProc.start("assistant", [ - "-collectionFile", self.helpPath, "-enableRemoteControl" - ]) - if not self.assistProc.waitForStarted(20000): + if not self.mainConf.hasHelp: return False + + self.assistProc = QProcess(self) + self.assistProc.start("assistant", ["-collectionFile", self.mainConf.helpPath]) + + if not self.assistProc.waitForStarted(10000): + return False + return True def _openWebsite(self, theUrl): @@ -860,7 +865,7 @@ class GuiMainMenu(QMenuBar): # Document > Documentation self.aHelp = QAction("Documentation", self) - if self.hasHelp: + if self.mainConf.hasHelp and self.mainConf.hasAssistant: self.aHelp.setStatusTip("View local documentation with Qt Assistant") self.aHelp.triggered.connect(self._openAssistant) else: From c58b5e71d0155adf18f32c0cdea3c199b909752f Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Tue, 4 Aug 2020 21:36:24 +0200 Subject: [PATCH 11/21] Use shutil.which to check for existence of executable instead --- nw/config.py | 19 ++++++++++--------- nw/core/spellcheck.py | 1 - 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/nw/config.py b/nw/config.py index ac5e9fca..9e17b6ca 100644 --- a/nw/config.py +++ b/nw/config.py @@ -33,7 +33,7 @@ import nw from os import path, mkdir, unlink, rename from time import time -from distutils import spawn +from shutil import which from PyQt5.Qt import PYQT_VERSION_STR from PyQt5.QtCore import QT_VERSION_STR, QStandardPaths, QSysInfo @@ -203,9 +203,8 @@ class Config: self.kernelVer = "Unknown" # Packages - self.hasEnchant = False - self.hasSymSpell = False - self.hasAssistant = False # The Qt Assistant + self.hasEnchant = False # The pyenchant package + self.hasAssistant = False # The Qt Assistant executable # Recent Cache self.recentProj = {} @@ -896,17 +895,19 @@ class Config: try: import enchant self.hasEnchant = True - logger.debug("Checking package pyenchant: Ok") + logger.debug("Checking package 'pyenchant': Ok") except: self.hasEnchant = False - logger.debug("Checking package pyenchant: Missing") + logger.debug("Checking package 'pyenchant': Missing") try: - self.hasAssistant = spawn.find_executable("assistant") - logger.debug("Checking executable assistant: Ok") + self.hasAssistant = which("assistant") except: self.hasAssistant = False - logger.debug("Checking executable assistant: Missing") + if self.hasAssistant: + logger.debug("Checking executable 'assistant': Ok") + else: + logger.debug("Checking executable 'assistant': Missing") return diff --git a/nw/core/spellcheck.py b/nw/core/spellcheck.py index 44d0fc38..28e25e40 100644 --- a/nw/core/spellcheck.py +++ b/nw/core/spellcheck.py @@ -43,7 +43,6 @@ class NWSpellCheck(): SP_INTERNAL = "internal" SP_ENCHANT = "enchant" - SP_SYMSPELL = "symspell" theDict = None PROJW = [] From cb8e0231d7098c1af281bc1e93326306f272742e Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 5 Aug 2020 00:09:37 +0200 Subject: [PATCH 12/21] Remove references to symspell --- nw/gui/preferences.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/nw/gui/preferences.py b/nw/gui/preferences.py index 6bb39033..999464b3 100644 --- a/nw/gui/preferences.py +++ b/nw/gui/preferences.py @@ -626,13 +626,10 @@ class GuiConfigEditEditingTab(QWidget): self.spellToolList = QComboBox(self) self.spellToolList.addItem("Internal (difflib)", NWSpellCheck.SP_INTERNAL) self.spellToolList.addItem("Spell Enchant (pyenchant)", NWSpellCheck.SP_ENCHANT) - # self.spellToolList.addItem("SymSpell (symspellpy)", NWSpellCheck.SP_SYMSPELL) - theModel = self.spellToolList.model() - idEnchant = self.spellToolList.findData(NWSpellCheck.SP_ENCHANT) - # idSymSpell = self.spellToolList.findData(NWSpellCheck.SP_SYMSPELL) + theModel = self.spellToolList.model() + idEnchant = self.spellToolList.findData(NWSpellCheck.SP_ENCHANT) theModel.item(idEnchant).setEnabled(self.mainConf.hasEnchant) - # theModel.item(idSymSpell).setEnabled(self.mainConf.hasSymSpell) self.spellToolList.currentIndexChanged.connect(self._doUpdateSpellTool) toolIdx = self.spellToolList.findData(self.mainConf.spellTool) From 21eebbb88fc9277c82bc10a257bb9fe25beb9e9c Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 6 Aug 2020 22:08:36 +0200 Subject: [PATCH 13/21] Made a new pass of all the previously updated documentation files --- README.md | 2 + docs/source/conf.py | 1 + docs/source/export.rst | 2 + docs/source/images/novelwriter.png | Bin 0 -> 5489 bytes docs/source/index.rst | 59 ++++++++-- docs/source/interface.rst | 166 +++++++++++++++-------------- docs/source/introduction.rst | 52 +++++---- docs/source/notes.rst | 2 + docs/source/projects.rst | 135 +++++++++++------------ docs/source/started.rst | 25 +++-- 10 files changed, 262 insertions(+), 182 deletions(-) create mode 100644 docs/source/images/novelwriter.png diff --git a/README.md b/README.md index 4f4296fd..0c7ef8ec 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ [![Build Status](https://travis-ci.com/vkbo/novelWriter.svg?branch=master)](https://travis-ci.com/vkbo/novelWriter) [![codecov](https://codecov.io/gh/vkbo/novelWriter/branch/master/graph/badge.svg)](https://codecov.io/gh/vkbo/novelWriter) [![Documentation Status](https://readthedocs.org/projects/novelwriter/badge/?version=latest)](https://novelwriter.readthedocs.io/en/latest/?badge=latest) +[![PyPI](https://img.shields.io/pypi/v/novelwriter)](https://pypi.org/project/novelWriter/) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/novelwriter)](https://pypi.org/project/novelWriter/) novelWriter is a markdown-like text editor designed for writing novels and larger projects of many smaller plain text documents. diff --git a/docs/source/conf.py b/docs/source/conf.py index 71cbf8db..1755d7b4 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -70,6 +70,7 @@ pygments_style = None # -- Options for HTML output ------------------------------------------------- html_theme = "sphinx_rtd_theme" +html_logo = "images/novelwriter.png" html_theme_options = { # Toc options "collapse_navigation": True, diff --git a/docs/source/export.rst b/docs/source/export.rst index 8dd24631..5297deb8 100644 --- a/docs/source/export.rst +++ b/docs/source/export.rst @@ -1,3 +1,5 @@ +.. _a_export: + ################## Exporting Projects ################## diff --git a/docs/source/images/novelwriter.png b/docs/source/images/novelwriter.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f2b5bcdef18f15a36f665d9f5e091395d68de2 GIT binary patch literal 5489 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 Rebuild Index` or by - pressing :kbd:`F9`. + The :guilabel:`References` panel relies on an up-to-date index of the project. If anything is + missing, or seems wrong, the index can always be rebuilt from :guilabel:`Tools` > + :guilabel:`Rebuild Index` or by pressing :kbd:`F9`. .. _a_ui_md: @@ -83,8 +84,9 @@ convenient if you want to quickly look through all documents in the list. Markdown Format =============== -The Editor uses a simplified markdown format. That is, it supports basic formatting like emphasis -(italic), strong emphasis (bold) and strikethrough text, as well as four levels of headings. +The document editor uses a simplified markdown format. That is, it supports basic formatting like +emphasis (italic), strong emphasis (bold) and strikethrough text, as well as four levels of +headings. Some non-standard markdown features have been added. For instance, novelWriter allows for comments, a synopsis tag, and a set of keyword/value sets used for tags and references. @@ -125,7 +127,7 @@ In markdown it is often recommended to differentiate between strong emphasis and ``**`` for strong emphasis and ``_`` for emphasis, although markdown generally supports also ``__`` for strong emphasis and ``*`` fdr emphasis. However, since the differentiation makes the highlighting and conversion significantly simpler and faster, in novelWriter this is a rule, not -just a recommendation. +just a recommendation. The following is therefore the only supported formatting syntax: ``_text_`` The text is rendered as emphasised text (italicised). @@ -152,8 +154,8 @@ There are also some additional rules: Comments and Synopsis --------------------- -In addition to these standard markdown features, the novelWriter also allows for comments in the -text files. The text of the comment is ignored by the word counter and not exported or, optionally, +In addition to these standard markdown features, novelWriter also allows for comments in the text +files. The text of the comment is ignored by the word counter and not exported or, optionally, hidden when viewing the document. If the first word of a comment is ``Synopsis:`` (with the colon), the comment is treated specially, and will show up in the :ref:`a_ui_outline`. @@ -173,7 +175,9 @@ the comment is treated specially, and will show up in the :ref:`a_ui_outline`. Tags and References ------------------- -The Editor also has a minimal set of keywords used for setting tags and references between files. +The document editor supports a minimal set of keywords used for setting tags and references between +files. The tags and references can be set once per section defined by a heading. Using them multiple +times under the same heading will just override the previous setting. ``@keyword: value`` A keyword argument followed by a value, or a comma separated list of values. @@ -195,7 +199,7 @@ spaces if running with Qt 5.9 or higher. * Thin spaces are also supported, and can be inserted with :kbd:`Ctrl`:kbd:`K`, :kbd:`Shift`:kbd:`Space`. * Non-breaking thin space can be inserted with :kbd:`Ctrl`:kbd:`K`, :kbd:`Ctrl`:kbd:`Space`. -These are all insert features, and the :menuselection:`Insert` menu has more. They are also listed +These are all insert features, and the :guilabel:`Insert` menu has more. They are also listed in :ref:`a_ui_shortcuts_ins`. Both hard line breaks and non-breaking spaces are highlighted by the syntax highlighter as an @@ -207,29 +211,29 @@ alternate coloured background, depending on the selected theme. Project Outline View ==================== -The Project Outline View is available as the second tab on the right hand side of the main window -labelled "Outline". The Outline View provides an overview of the novel structure, displaying a tree -hierarchy of the elements of the novel, that is, the level 1 to 4 headings. +The project's Outline view is available as the second tab on the right hand side of the main window +labelled :guilabel:`Outline`. The outline provides an overview of the novel structure, displaying a +tree hierarchy of the elements of the novel, that is, the level 1 to 4 headings. .. note:: - Since the internal structure of the novel does not depend on the file structure of the Project - Tree, these will not necessarily look the same. See the :ref:`a_struct` page for more details. + Since the internal structure of the novel does not depend on the file structure of the project + tree, these will not necessarily look the same. See the :ref:`a_struct` page for more details. -Various meta data and information extracted from tags can be displayed in columns in the Outline -View. A default set is visible, but you can turn on or off more columns by right clicking the header -and selecting the columns you want to show. The order of the columns can also be rearranged by -dragging them to a different position. +Various meta data and information extracted from tags can be displayed in columns in the outline. +A default set of such columns is visible, but you can turn on or off more columns by right clicking +the header and selecting the columns you want to show. The order of the columns can also be +rearranged by dragging them to a different position. .. note:: - The Title column cannot be disabled or moved. + The :guilabel:`Title` column cannot be disabled or moved. -The information viewed in the Outline View is based on the Project Index. While novelWriter does its -best to keep the index up to date when content changes, you can always rebuild it manually by +The information viewed in the outline is based on the project's main index. While novelWriter does +its best to keep the index up to date when content changes, you can always rebuild it manually by pressing :kbd:`F9` if something isn't right. -The Outline View itself can be regenerated by pressing :kbd:`F10`. You can also enable automatic -updating in the :menuselection:`Tools` menu, which will trigger an update whenever the index is -updated and the Outline tab is activated. You may want to disable this feature if your project is +The outline view itself can be regenerated by pressing :kbd:`F10`. You can also enable automatic +updating in the :guilabel:`Tools` menu, which will trigger an update whenever the index is updated +and the :guilabel:`Outline` tab is active. You may want to disable this feature if your project is very large, @@ -238,15 +242,15 @@ very large, Synopsis Column --------------- -The "Synopsis" column of the Outline View takes its information from a specially formatted comment. -See :ref:`a_ui_md_comm`. In order to flag a comment as a synopsis, add the word ``Synopsis:`` as the -first word of the comment. The ``:`` is required, and the word ``synopsis`` is not case sensitive. -If it is correctly formatted, the syntax highlighter will indicate this by altering the colour of -the word. +The :guilabel:`Synopsis` column of the outline view takes its information from a specially formatted +comment. See :ref:`a_ui_md_comm`. In order to flag a comment as a synopsis, add the word +``Synopsis:`` as the first word of the comment. The ``:`` is required, and the word ``synopsis`` is +not case sensitive. If it is correctly formatted, the syntax highlighter will indicate this by +altering the colour of the word. .. note:: Only one comment can be flagged as a synopsis comment for each heading. If multiple comments are - flagged as a synopsis, the last one will be used. + flagged as a synopsis comment, the last one will be used. .. _a_ui_shortcuts: @@ -261,11 +265,11 @@ Most features are available as keyboard shortcuts. These are as following: :widths: 30, 70 :class: "tight-table" - ":kbd:`Alt`:kbd:`1`", "Switch focus to the Project Tree." - ":kbd:`Alt`:kbd:`2`", "Switch focus to Editor." - ":kbd:`Alt`:kbd:`3`", "Switch focus to Viewer." + ":kbd:`Alt`:kbd:`1`", "Switch focus to the project tree." + ":kbd:`Alt`:kbd:`2`", "Switch focus to document editor." + ":kbd:`Alt`:kbd:`3`", "Switch focus to document viewer." ":kbd:`Ctrl`:kbd:`.`", "Open menu to correct word under cursor." - ":kbd:`Ctrl`:kbd:`,`", "Open the Preferences dialog." + ":kbd:`Ctrl`:kbd:`,`", "Open the :guilabel:`Preferences` dialog." ":kbd:`Ctrl`:kbd:`/`", "Change block format to comment." ":kbd:`Ctrl`:kbd:`-`", "Strikethrough selected text, or word under cursor." ":kbd:`Ctrl`:kbd:`0`", "Remove block formatting for block under cursor." @@ -277,7 +281,7 @@ Most features are available as keyboard shortcuts. These are as following: ":kbd:`Ctrl`:kbd:`B`", "Format selected text, or word under cursor, with strong emphasis (bold)." ":kbd:`Ctrl`:kbd:`C`", "Copy selected text to clipboard." ":kbd:`Ctrl`:kbd:`D`", "Wrap selected text, or word under cursor, in double quotes." - ":kbd:`Ctrl`:kbd:`E`", "If in the Project Tree, edit a document or folder settings. (Same as :kbd:`F2`)" + ":kbd:`Ctrl`:kbd:`E`", "If in the project tree, edit a document or folder settings. (Same as :kbd:`F2`)" ":kbd:`Ctrl`:kbd:`F`", "Open the search bar and search for the selected word, if any is selected." ":kbd:`Ctrl`:kbd:`G`", "Find next occurrence of search word in current document. (Same as :kbd:`F3`)" ":kbd:`Ctrl`:kbd:`H`", "Open the search and replace bar and search for the selected word, if any is selected. (On Mac, this is :kbd:`Cmd`:kbd:`=`)" @@ -285,18 +289,18 @@ Most features are available as keyboard shortcuts. These are as following: ":kbd:`Ctrl`:kbd:`N`", "Create new document." ":kbd:`Ctrl`:kbd:`O`", "Open selected document." ":kbd:`Ctrl`:kbd:`Q`", "Exit novelWriter." - ":kbd:`Ctrl`:kbd:`R`", "If in the Project Tree, open a document for viewing. If the Editor has focus, open current document for viewing." - ":kbd:`Ctrl`:kbd:`S`", "Save the current document in the Editor." + ":kbd:`Ctrl`:kbd:`R`", "If in the project tree, open a document for viewing. If the editor has focus, open current document for viewing." + ":kbd:`Ctrl`:kbd:`S`", "Save the current document in the document editor." ":kbd:`Ctrl`:kbd:`V`", "Paste text from clipboard to cursor position." - ":kbd:`Ctrl`:kbd:`W`", "Close the current document in the Editor." + ":kbd:`Ctrl`:kbd:`W`", "Close the current document in the document editor." ":kbd:`Ctrl`:kbd:`X`", "Cut selected text to clipboard." ":kbd:`Ctrl`:kbd:`Y`", "Redo latest undo." ":kbd:`Ctrl`:kbd:`Z`", "Undo latest changes." ":kbd:`Ctrl`:kbd:`F7`", "Toggle spell checking." - ":kbd:`Ctrl`:kbd:`F10`", "Toggle automatic updating of Project Outline." - ":kbd:`Ctrl`:kbd:`Del`", "If in the Project Tree, move a document to trash, or delete a folder." + ":kbd:`Ctrl`:kbd:`F10`", "Toggle automatic updating of project outline." + ":kbd:`Ctrl`:kbd:`Del`", "If in the project tree, move a document to trash, or delete a folder." ":kbd:`Ctrl`:kbd:`Enter`", "Open the tag or reference under the cursor in the Viewer." - ":kbd:`Ctrl`:kbd:`Shift`:kbd:`,`", "Open the Project Settings dialog." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`,`", "Open the :guilabel:`Project Settings` dialog." ":kbd:`Ctrl`:kbd:`Shift`:kbd:`/`", "Remove block formatting for block under cursor." ":kbd:`Ctrl`:kbd:`Shift`:kbd:`1`", "Replace occurrence of search word in current document, and search for next occurrence." ":kbd:`Ctrl`:kbd:`Shift`:kbd:`A`", "Select all text in current paragraph." @@ -305,23 +309,23 @@ Most features are available as keyboard shortcuts. These are as following: ":kbd:`Ctrl`:kbd:`Shift`:kbd:`I`", "Import text to the current document from a text file." ":kbd:`Ctrl`:kbd:`Shift`:kbd:`N`", "Create new folder." ":kbd:`Ctrl`:kbd:`Shift`:kbd:`O`", "Open a project." - ":kbd:`Ctrl`:kbd:`Shift`:kbd:`R`", "Close the document Viewer." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`R`", "Close the document viewer." ":kbd:`Ctrl`:kbd:`Shift`:kbd:`S`", "Save the current project." ":kbd:`Ctrl`:kbd:`Shift`:kbd:`W`", "Close the current project." - ":kbd:`Ctrl`:kbd:`Shift`:kbd:`Up`", "Move item one step up in the Project Tree." - ":kbd:`Ctrl`:kbd:`Shift`:kbd:`Down`", "Move item one step down in the Project Tree." - ":kbd:`F1`", "Open the documentation. This just tries to send the documentation URL to your browser." - ":kbd:`F2`", "If in the Project Tree, edit a document or folder settings. (Same as :kbd:`Ctrl`:kbd:`E`)" + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`Up`", "Move item one step up in the project tree." + ":kbd:`Ctrl`:kbd:`Shift`:kbd:`Down`", "Move item one step down in the project tree." + ":kbd:`F1`", "Open the documentation. This will either open the Qt Assistant, if available, or send you to the documentation website." + ":kbd:`F2`", "If in the project tree, edit a document or folder settings. (Same as :kbd:`Ctrl`:kbd:`E`)" ":kbd:`F3`", "Find next occurrence of search word in current document. (Same as :kbd:`Ctrl`:kbd:`G`)" - ":kbd:`F5`", "Open the Build Novel Project dialog." - ":kbd:`F6`", "Open the Writing Statistics dialog." + ":kbd:`F5`", "Open the :guilabel:`Build Novel Project` dialog." + ":kbd:`F6`", "Open the :guilabel:`Writing Statistics` dialog." ":kbd:`F7`", "Re-run spell checker." - ":kbd:`F8`", "Activate Focus Mode, hiding Project Tree and view panel." - ":kbd:`F9`", "Re-build Project Index." - ":kbd:`F10`", "Re-build Project Outline." + ":kbd:`F8`", "Activate :guilabel:`Focus Mode`, hiding the project tree and document viewer." + ":kbd:`F9`", "Re-build the project index." + ":kbd:`F10`", "Re-build the project outline." ":kbd:`F11`", "Activate full screen mode." ":kbd:`Shift`:kbd:`F3`", "Find previous occurrence of search word in current document. (Same as :kbd:`Ctrl`:kbd:`Shift`:kbd:`G`)" - ":kbd:`Enter`", "If in the Project Tree, open a document for editing." + ":kbd:`Enter`", "If in the project tree, open a document for editing." .. note:: On macOS, replace :kbd:`Ctrl` with :kbd:`Cmd`. diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index 6613f1e2..5466bf28 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -6,17 +6,19 @@ Introduction novelWriter is a simple, multi-document plain text editor using a modified markdown syntax to apply simple formatting. It is designed for writing novels, and allow for the component documents to be -ordered freely to create the desired structure of the novel project. +ordered freely to create the desired structure of the novel project. This is covered on the +:ref:`a_struct` page. In addition, the project can contain notes on the various plot elements, characters, locations, etc, that make up the story. These notes are organised in a set of category-specific folders, and each entry can be tagged and cross referenced from within the novel files and other notes. These tags make it possible to inter-link documents, and generate an overview of the entire novel project and -how the various files and plot elements are interconnected. +how the various files and plot elements are interconnected. This is covered on the :ref:`a_proj` and +:ref:`a_notes` pages. These additional features are not standard in markdown, but are available through special meta keywords. Syntax highlighting is provided to make it easier to verify that the markdown tags are -used correctly. +used correctly. This is covered on the :ref:`a_ui` page. .. _a_intro_design: @@ -32,22 +34,27 @@ at the same time provide a complete set of features needed for writing a novel. links, tables, and its formatting is limited to headers, and bold, italicised and strikethrough text. -The main window does not have a tool bar like most other applications do. This reduces clutter, and -since the documents are formatted with markdown tags, more or less redundant. However, all +The main window does not have a toolbar like most other applications do. This reduces clutter, and +since the documents are formatted with markdown tags, is more or less redundant. However, all formatting features supported are available through convenient keyboard shortcuts. They are also -available in the main menu. +available in the main menu. A full list of shortcuts can be found in the :ref:`a_ui_shortcuts` +section. The colour scheme of the user interface defaults to that of the host operating system. In addition, -a dark theme is provided, and can be enabled in Preferences. A number of syntax highlighting themes -are also available in Preferences. Coloured and grayscale icon themes are also available. +a dark theme is provided, and can be enabled in :guilabel:`Preferences` from the :guilabel:`Tools` +menu. A number of syntax highlighting themes are also available in :guilabel:`Preferences`. A set of +icon themes in colour and greyscale is also offered. The icons are based on the Typicon_ icon set by +Stephen Hutchings. The main window is split in two, or optionally three, panels. The left-most contains the project tree and all the files in your project. The second panel is the document editor, and the optional third panel is a document viewer which can view any document in your project. -A second tab is also available on the main window. This is the Outline tab where the entire novel -structure can be displayed, with all the tags and references listed. Depending on how you structure -your novel project files, this outline can be quite different than your project tree. +A second tab is also available on the main window. This is the :guilabel:`Outline` tab where the +entire novel structure can be displayed, with all the tags and references listed. Depending on how +you structure your novel project files, this outline can be quite different than your project tree. + +.. _Typicon: https://github.com/stephenhutchings/typicons.font .. _a_intro_project: @@ -56,18 +63,19 @@ Project Layout ============== You are free to structure your project files as you wish in subfolders and split between files. All -that matters to novelWriter is the linear order they appear in the project tree (top to bottom) and -the chapters, scenes and sections of the novel is determined by the headings within those files. +that matters to novelWriter is the linear order they appear in the project tree (top to bottom). The +chapters, scenes and sections of the novel are determined by the headings within those files. -The four heading levels (H1 to H4) are treated as follows: +The four heading levels (**H1** to **H4**) are treated as follows: -* H1 is used for the book title, and for partitions. -* H2 is used for chapter tiles. -* H3 is reserved for scene titles. -* H4 is for section titles within scenes, if such granularity is needed. +* **H1** is used for the book title, and for partitions. +* **H2** is used for chapter tiles. +* **H3** is reserved for scene titles. +* **H4** is for section titles within scenes, if such granularity is needed. -This structure is only considered on novel files. For the files designated as project notes, the -usage of headers imply no structural meaning, and the user is free to do whatever they want. +This header level structure is only considered on novel files. For the files designated as project +notes, the usage of headers imply no structural meaning, and the user is free to do whatever they +want. See the :ref:`a_struct` page for more details. .. _a_intro_export: @@ -84,8 +92,8 @@ HTML, which can be imported or converted by a number of other tools like Pandoc, into Libre Office and similar. It is also possible to export the content of the project to a JSON file. This is useful if you want -to write your own processing script in for instance Python, as the entire novel can be read into a -Python dictionary with a couple of lines of code. +to write your own processing script in for instance Python as the entire novel can be read into a +Python dictionary with a couple of lines of code. See the :ref:`a_export` page for more details. .. _a_intro_screenshots: diff --git a/docs/source/notes.rst b/docs/source/notes.rst index 5947ea3f..6b3b68a4 100644 --- a/docs/source/notes.rst +++ b/docs/source/notes.rst @@ -1,3 +1,5 @@ +.. _a_notes: + ************************ Supporting Files (Notes) ************************ diff --git a/docs/source/projects.rst b/docs/source/projects.rst index 238f2ecd..fdfc3616 100644 --- a/docs/source/projects.rst +++ b/docs/source/projects.rst @@ -7,13 +7,12 @@ Novel Projects A novelWriter project requires a dedicated folder for storing its files on the local file system. See the :ref:`a_tech` page for further details. -A new project can be created from the :menuselection:`Project` menu by selecting -:menuselection:`New Project`. A list of recently opened projects is maintained, and displayed in the -Open Project dialog. A project can be removed from this list by selecting it and pressing the -:kbd:`Del` key. +A new project can be created from the :guilabel:`Project` menu by selecting :guilabel:`New Project`. +A list of recently opened projects is maintained, and displayed in the :guilabel:`Open Project` +dialog. A project can be removed from this list by selecting it and pressing the :kbd:`Del` key. -The project specific settings are available in :menuselection:`Project --> Project Settings`. See -further details below in the :ref:`a_proj_settings` section. +The project specific settings are available in :guilabel:`Project Settings` in the +:guilabel:`Project` menu. See further details below in the :ref:`a_proj_settings` section. .. _a_proj_roots: @@ -22,23 +21,26 @@ Project Roots ============= Projects are structured into a set of top level folders called *root folders*. They are visible in -the Project Tree. +the project tree at the left side of the main window. The core novel files go into a root folder of type "Novel". Other supporting files go into the other root folders. These other root folder types are intended for your notes on the various elements of -your story. Using these is of course entirely optional. A new project will not have all of the root -folders present, but you can add the ones you want from :menuselection:`Project --> Create Root Folder`. +your story. Using these is of course entirely optional. + +A new project will not have all of the root folders present, but you can add the ones you want from +:guilabel:`Create Root Folder` in the :guilabel:`Project` menu. The root folders are intended for the following use, but aside from the Novel folder, no restrictions are enforced by the application. You can use them however you want. .. note:: The root folders correspond to the categories of tags that can be used. - See the "Project Structure" section for further details. + See the :ref:`a_struct` page for further details. Novel - The root folder of all text that goes into the final novel. This class of files have other rules - and features than other files in the project. See the :ref:`a_struct` page for more details. + This is the root folder of all text that goes into the final novel. This class of files have + other rules and features than other files in the project. See the :ref:`a_struct` page for more + details. Plot This is the root folder where main plots can be outlined. It is optional, but adding at least @@ -76,8 +78,9 @@ Custom For more information about the tags listed, see :ref:`a_struct_tags`. .. note:: - Deleted files will be moved into a special "Trash" root folder. Files in the Trash folder can - then be deleted permanently, either individually, or by emptying the trash from the menu. + Deleted files will be moved into a special :guilabel`Trash` root folder. Files in the trash + folder can then be deleted permanently, either individually, or by emptying the trash from the + menu. .. _a_proj_roots_orph: @@ -86,14 +89,15 @@ Orphaned Documents ------------------ If novelWriter crashes or otherwise exits without saving the project state, or if you're using a -file synchronisation tool, there may be files in the project folder that isn't tracked in the core -project file. These files, when discovered, are handled by the Orphaned Documents routine. +file synchronisation tool that runs out of sync, there may be files in the project folder that isn't +tracked in the core project file. These files, when discovered, are handled by the Orphaned +Documents routine. -Files that are discovered will be re-added to the project tree in a special "Orphaned Items" root -folder next time the application is started. These orphaned files will not have most of the meta -data preserved, although novelWriter will try to restore the file label it had in the Project Tree. -Other information will have to be set again, and the files moved back to the correct location in -the project. +Files that are discovered in the project folder, but not in the project, will be re-added to the +project tree in a special :guilabel:`Orphaned Items` root folder next time the application is +started. These orphaned files will not have most of the meta data preserved, although novelWriter +will try to restore the file label it had in the project tree. Other information will have to be set +again, and the files moved back to the correct location in the project. .. _a_proj_roots_lock: @@ -108,7 +112,7 @@ where else novelWriter thinks the project is also open. You will be give the option to ignore this warning, and continue opening the project. However, if multiple instances are in fact editing the same project, you are likely to cause inconsistencies and -create diverging project files, potentially resulting in loss of data. +create diverging project files, potentially resulting in loss of data and orphaned files. .. note:: If, for some reason, novelWriter crashes, the lock file may remain even if there are no other @@ -122,47 +126,53 @@ Using Folders in the Project Tree --------------------------------- Folders, aside from root folders, have no structural significance to the project. When novelWriter -is processing the files in the novel, like for instance during export, the folders are ignored. Only -the order of the text files themselves matter. +is processing the files in the novel, like for instance during export, these folders are ignored. +Only the order of the text files themselves matter. The folders are there purely as a way for the user to organise the files in meaningful sections and to be able to close them in the Project Tree when you're not working on those files, and thus reduce clutter. +.. tip:: + You can use folders to sort your scene files into chapters. You will then need to add a chapter + file as the first file of your folder, and the scene files as the following files. + .. _a_proj_files: Project Files ============= -New document files can be created from the :menuselection:`Document` menu, or by pressing -:kbd:`Ctrl`:kbd:`N` while in the Project Tree. This will create a new, empty file, and open the Item -Settings dialog where the filename and various other settings can be changed. This dialog can also -be opened again later from either the menu, :menuselection:`Project -> Edit Item`, or by pressing -:kbd:`Ctrl`:kbd:`E` or :kbd:`F2` with the item selected. +New document files can be created from the :guilabel:`Document` menu, or by pressing +:kbd:`Ctrl`:kbd:`N` while in the Project Tree. This will create a new, empty file, and open the +:guilabel:`:Item Settings` dialog where the filename and various other settings can be changed. +This dialog can also be opened again later from either the :guilabel:`Project` menu, selecting +:guilabel:`Edit Item`, or by pressing :kbd:`Ctrl`:kbd:`E` or :kbd:`F2` with the item selected. The layout of the file is also defined here. For Novel files, the full list of layout options are available. For non-Novel files, only "Note" is available. See :ref:`a_struct_layout` for more details. You can also select whether the file is by default included when building the project. This setting -can be overridden in the Build Novel Project tool if you wish to include them anyway. +can be overridden in the :guilabel:`Build Novel Project` tool if you wish to include them anyway. +.. _a_proj_files_counts: + Word Counts ----------- A character, word and paragraph count is maintained for each file, as well as dor each section of a file defined by a header. The word count, and change of words in the current session, is displayed -in the footer of any document open in the Editor, and all stats are shown in the details panel below -the Project Tree for any file selected. +in the footer of any document open in the editor, and all stats are shown in the details panel below +the project tree for any file selected. -The word counts are not updated real time, but runs in the background every five seconds. +The word counts are not updated in real time, but runs in the background every five seconds. A total project word count is displayed in the status bar. The total count depends on the sum of the -values in the Project Tree, which again depend on an up to date index. If the counts seem wrong, a -full project word recount can be initiated by rebuilding the Project Index. Either form the -:menuselection:`Tools` menu, or by pressing :kbd:`F9`. +values in the project tree, which again depend on an up to date index. If the counts seem wrong, a +full project word recount can be initiated by rebuilding the project's index. Either form the +:guilabel:`Tools` menu, or by pressing :kbd:`F9`. .. _a_proj_settings: @@ -170,9 +180,8 @@ full project word recount can be initiated by rebuilding the Project Index. Eith Project Settings ================ -The project settings can be accessed from the :menuselection:`Project --> Project Settings` menu -entry, or by pressing :kbd:`Ctrl`:kbd:`Shift`:kbd:`,`. This will open a dialog box, with a set of -tabs. +The :guilabel:`Project Settings` can be accessed from the :guilabel:`Project` menu, or by pressing +:kbd:`Ctrl`:kbd:`Shift`:kbd:`,`. This will open a dialog box, with a set of tabs. Settings Tab @@ -198,36 +207,29 @@ project is saved, how may times it has been saved, how many folders and files it many words exist in the entire project. -Status Tab ----------- +Status and Importance Tabs +--------------------------- -Each file of type "Novel" can be given a status level, signified by a coloured icon. These are -purely there for the user's convenience, and you are not required to use them for any other feature -to work. The intention is to use this list to set what stage of writing you are on, although you can -in principle make them whatever you want. +Each file of type "Novel" can be given a status level, signified by a coloured icon and each file of +the remaining types can be given an importance level. These are colour coded icons and labels that +can be applied to each file. + +These are purely there for the user's convenience, and you are not required to use them for any +other feature to work. No other part of novelWriter accesses this information. The intention is to +use these to indicate at what stage of completeion each novel file is, or how important the content +of a note file is to the plot. You don't have to use them this way, that's just what they were +intended for, but you can make them whatever you want. .. note:: - The status levels currently in use by one or more files cannot be deleted. - - -Importance Tab --------------- - -Each file of types "Plot", "Character", "World", "Timeline", "Object", "Entity", or "Custom", can be -given an importance level, signified by a coloured icon like for status level. These are also purely -there for the user's convenience, and you are not required to use them for any other feature to -work. The intention is to use this list to set how important the character, plot element, or -otherwise, is for the story. Again, these can in principle be used for whatever you want. - -.. note:: - The importance levels currently in use by one or more files cannot be deleted. + The status or importance level currently in use by one or more files cannot be deleted, but they + can be edited. Auto-Replace Tab ---------------- A set of automatically replaced keywords can be added in this tab. The keywords in the left column -will be replaced by the text in the right column when documents are opened in the Viewer. They will +will be replaced by the text in the right column when documents are opened in the viewer. They will also be applied to exports. .. note:: @@ -246,12 +248,13 @@ backup files are to be stored must to be provided in Preferences. Backups can be run automatically when a project is closed, which also implies it is run when the application is closed. Backups are date stamped zip files of the entire project folder, and are -stored in a subfolder of the backup path with the same name as the project Working Title set in -:ref:`a_proj_settings`. +stored in a subfolder of the backup path with the same name as the project :guilabel:`Working Title` +set in :ref:`a_proj_settings`. -The backup feature, when configured, can also be run manually from the :menuselection:`Tools` menu. -It is also possible to dissable automated backup for a given project in Project Settings. +The backup feature, when configured, can also be run manually from the :guilabel:`Tools` menu. +It is also possible to dissable automated backup for a given project in :guilabel:`Project Settings`. .. note:: - For the backup to be able to run, the Working Title must be set in Project Settings. This value - is used to generate the folder name for the zip files. Without it, the backup will not run. + For the backup to be able to run, the :guilabel:`Working Title` must be set in :guilabel:`Project + Settings`. This value is used to generate the folder name for the zip files. Without it, the + backup will not run at all, but produce a warning message. diff --git a/docs/source/started.rst b/docs/source/started.rst index 6cb2f3e3..92a83d25 100644 --- a/docs/source/started.rst +++ b/docs/source/started.rst @@ -34,10 +34,10 @@ needed to communicate with the Qt GUI libraries, only one package is required fo format of the main project file. Everything else is handled with standard Python libraries. Optionally, a package can be installed to interface with the Enchant spell checking libaries, but -this isn't required. If no external spell checking library is available, novelWriter falls back to -using the internal ``difflib`` of Python to check spelling. This is a much slower approach, and it -is less sophisticated than full spell checking libaries, but if you only work with small files, the -performance loss is not noticeable. +this isn't strictly required. If no external spell checking library is available, novelWriter falls +back to using the internal ``difflib`` of Python to check spelling. This is a much slower approach, +and it is less sophisticated than full spell checking libaries, but if you only work with small +files, the performance loss is not noticeable. .. _a_started_depend_packages: @@ -53,7 +53,7 @@ the following command: pip install -r requirements.txt -On some operating systems you need to use ``python3`` instead of ``python``. +This will install all the dependencies and recommended packages. The following Python packages are required to run novelWriter: @@ -69,7 +69,7 @@ Exporting to standard Markdown, for instance, requires PyQt/Qt 5.14. Searching u expressions requires 5.3, and for full Unicode support, 5.13. There are no known minimum for package ``lxml``, but the code was originally written with 4.2, -which is therefore set as the minimum. +which is therefore set as the minimum. It may work on lower versions. You have to test it. The spell checking extension is optional, but recommended: @@ -78,6 +78,7 @@ The spell checking extension is optional, but recommended: The optional spell check library must be at least 3.0.0 to work with Windows. On Linux, 2.0.0 also works fine. + .. _a_started_depend_docs: Building Documentation @@ -104,6 +105,16 @@ To build the help packages from the documentation source, run from the root source folder. +The setup script will copy the generated files into the ``nw/assets/help`` folder, and novelWriter +will detect the presence of the files and redirect the menu help entry to open help locally instead +of send the user to the website. + +.. note:: + In order for the local version of help to work, the Qt Assistant must be installed on the local + computer. If it isn't available, or novelWriter cannot find it, the help feature will fall back + to redirecting to the website. + + .. _a_started_running: Running novelWriter @@ -135,7 +146,7 @@ there's one script for Debian and one for Ubuntu. Building a Standalone Executable ================================ -A standalone executable can be built with pyinstaller, using the provided python script +A standalone executable can be built with ``pyinstaller``, using the provided python script ``install.py`` in the source folder. This script will automatically try to install all dependencies and build the standalone executable of novelWriter. You can run the script by typing the following into your command prompt: From f227099eb482572ce536ad5dc05c89751afbed4b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 6 Aug 2020 22:35:56 +0200 Subject: [PATCH 14/21] Rewritten the structure page --- docs/source/structure.rst | 227 +++++++++++++++++++++++--------------- 1 file changed, 141 insertions(+), 86 deletions(-) diff --git a/docs/source/structure.rst b/docs/source/structure.rst index 6da2f893..d6ecceae 100644 --- a/docs/source/structure.rst +++ b/docs/source/structure.rst @@ -7,122 +7,177 @@ Novel Structure This section covers the structure of a novel project. .. note:: - This section concerns files under the Novel type root folder only. - There are some restrictions and features that only applies to these type of files. + This section concerns files under the Novel type root folder only. There are some restrictions + and features that only applies to these type of files. + .. _a_struct_heads: Importance of Headings ====================== -Subfolders under root folders have no impact on the structure of the novel itself. -The structure is instead dictated by the heading level. -Four levels of headings are supported, signified by the number of hashes preceding the title. -See the Markdown section. +Subfolders under root folders have no impact on the structure of the novel itself. The structure is +instead dictated by the heading level of the headers within the text files. Four levels of headings +are supported, signified by the number of hashes preceding the title. See also the :ref:`a_ui_md` +section. -The header levels are not only important when generating the exported novel file, but they are also used by the indexer and Outline View. -Each heading starts a new region where new references to tags can be set. +.. note:: + The header levels are not only important when generating the exported novel file, but they are + also used by the indexer when building the outline tree in the :guilabel:`Outline` tab. Each + heading also starts a new region where new references to tags can be set. -The different header levels are interpreted as specific section types of the novel. +The different header levels are interpreted as specific section types of the novel in the following +way: + +``# Header1`` + Header level 1 signifies that the text refers to either the novel title or the name of a top + level partition when you want to split the manuscript up into books, parts, or acts. + +``## Header2`` + Header level 2 signifies a chapter level partition. Each time you want to start a new chapter, + you must add such a heading. If you chose to split your manuscript up into one file per scene, + you need a single chapeter file with just the heading. You can of course also add a synopsis and + tags and references to the chapter file. If you want to open the chaper with a quote, this is + also where you'd put the text for that. + +``### Header3`` + Header level 3 signifies a scene level partition. The title itself can be replaced with a scene + separator or just skipped entirely when you export your manuscript. + +``#### Header4`` + Header level 4 signifies a sub-scene level partition (section). These can be useful if you want + to change tag references mid-scene, like if you change the point of view character. You are free + to use sections as you wish, and can filter the titles out of the final manuscript just like with + scene titles. + +There are multiple options of how to process novel titles when exporting the manuscript. For +instance, chapter numbers can be applied automatically, and so can scene numbers if you want them in +a draft manuscript. See the :ref:`a_export` page for more details. -* ``# Header1``: Header level 1 signifies that the text refers to either the novel title or the name of a top level partition. -* ``## Header2``: Header level 2 signifies a chapter level partition. -* ``### Header3``: Header level 3 signifies a scene level partition. -* ``#### Header4``: Header level 4 signifies a sub-scene level partition (section). .. _a_struct_tags: Tag References ============== -Each partition, indicated by a heading, can contain references to tags set in the supporting files of the project. +Each partition, indicated by a heading, can contain references to tags set in the supporting files +of the project. The references are gathered by the indexer and used to generate the outline view on +the :guilabel:`Outline` tab of how the different parts of the novel are connected. -The references are gathered by the indexer and used to generate the Outline View of how the different parts of the novel are connected. -References and tags are also clickable in the view panel, and makes it easy to navigate reference notes while writing. -The targets of references can also be set per header. -This is covered in the "Supporting Files" section. +References and tags are also clickable in the document editor and viewer, making it easy to navigate +reference notes while writing. -References are set as keyword and a list of corresponding tags. -The valid keywords are listed below. -The format of a meta line is ``@keyword: value1, [value2] ... [valueN]``. -All keywords allow multiple values. +References are set as keyword and a list of corresponding tags. The valid keywords are listed below. +The format of a meta line is ``@keyword: value1, [value2] ... [valueN]``. All keywords allow +multiple values. -* ``@pov``: The point-of-view character for the current section. - The target must be a note tag in the character root folder. -* ``@char``: Other characters in the current section. - The target must be a note tag in the character root folder. - This should not include the point-of-view character. -* ``@plot``: The plot timelines touched by the current section. - The target must be a note tag in the plot root folder. -* ``@time``: The timelines touched by the current section. - The target must be a note tag in the timeline root folder. -* ``@location``: The location the current section takes place in. - The target must be a note tag in the locations root folder. -* ``@object``: Objects present in the current section. - The target must be a note tag in the object root folder. -* ``@entity``: Entities present in the current section. - The target must be a note tag in the entities root folder. -* ``@custom``: Custom references in the current section. - The target must be a note tag in the custom root folder. +``@pov`` + The point-of-view character for the current section. The target must be a note tag in the + character type root folder. + +``@char`` + Other characters in the current section. The target must be a note tag in a character type root + folder. This should not include the point-of-view character. + +``@plot`` + The plot or subplot touched by the current section. The target must be a note tag in a plot type + root folder. + +``@time`` + The timelines touched by the current section. The target must be a note tag in a timeline type + root folder. + +``@location`` + The location the current section takes place in. The target must be a note tag in a locations + type root folder. + +``@object`` + Objects present in the current section. The target must be a note tag in a object type root + folder. + +``@entity`` + Entities present in the current section. The target must be a note tag in an entities type root + folder. + +``@custom`` + Custom references in the current section. The target must be a note tag in a custom type root + folder. + +The syntax highlighter will alert the user that the tags and references are used correctly, and that +the tags referenced exist. + +The highlighter may be mistake if the index of defined tags is out of date. If so, press :kbd:`F9` +to regenerate it, or select :guilabel:`Rebuild Index` from the :guilabel:`Tools` menu. In general, +the index for a file is regenerated when a file is saved, so this shouldn't normally be necessary. -The syntax highlighter will alert the user that only the correct keywords are used, and that the tags referenced exist. -If the index of defined tags is out of date, press :kbd:`F9` to regenerate it, or select :menuselection:`Tools --> Rebuild Index` from the menu. -In general, the index for a file is regenerated when a file is saved, so this shouldn't normally be necessary. .. _a_struct_layout: Novel File Layout ================= -Files in a novelWriter project can have a layout format set. -These layouts are important when the project is exported, as they indicate how to treat the content in terms of formatting, headings and page breaks. -The layout for each file is indicated as the last set of characters in the Flags column of the project tree. -They also help to indicate what each file is for in your project. +All files in a novelWriter project can have a layout format set. These layouts are important when +the project is exported as they indicate how to treat the content in terms of formatting, headings, +and page breaks. The layout for each file is indicated as the last set of characters in the +:guilabel:`Flags` column of the project tree. -Some of these layout types are different, some are just cosmetic. -The "Book" layout is a generic novel file layout that in formatting is identical to "Chapter" and "Scene", but may help to indicate what files do in your project. -You can lay out your project using Book files for each act, and then later split those into chapter or scene files by using the "Split Document" tool. -Scenes can also be contained within chapter files, but you lose the drag and drop feature that comes with having them in separate files. +Not all layout types are actually treated differently, but they also help to indicate what each file +is for in your project. The "Book" layout is a generic novel file layout that in formatting is +identical to "Chapter" and "Scene", but may help to indicate what files do in your project. -Some layouts have implications on how the project is exported. -Files with layout "Title" and "Partition" have all headings and text centred, while the "Unnumbered" layout disables the automatic chapter numbering feature for everything contained within it. +You can for instance lay out your project using Book files for each act, and then later split those +into chapter or scene files by using the :guilabel:`Split Document` tool. Scenes can also be +contained within chapter files, but you lose the drag and drop feature that comes with having them +in separate files if you organise them this way. -All of the above layout formats are only usable in the Novel root folder. -Files that are not a part of the novel itself should have the Note layout. -These files are not getting any special formatting, and it is possible to collectively filter them out during export. -Note files can be used anywhere in the project. +Some layouts *do* have implications on how the project is exported. Files with layout "Title" and +"Partition" have all headings and text centred, while the "Unnumbered" layout disables the automatic +chapter numbering feature for everything contained within it. The latter is convenient for Prologue +and Epilogue type chapters. + +All of the above layout formats are only usable in the Novel root folder. Files that are not a part +of the novel itself should have the Note layout. These files are not getting any special formatting, +and it is possible to collectively filter them out during export. Note files can be used anywhere +in the project, also in the Novel root folder. Below is an overview of all available layout formats. -* **Title Page**: The title page layout. - The title should be formatted as a heading level one. - All text is automatically centred on exports. -* **Plain Page**: A plain page layout useful for instance for front matter pages. - Heading levels are ignored for this layout format, and so are formatting options like Justify Text. - The page is exported with a page break before it. -* **Book**: This is the generic novel file format that in principle can be used for all novel files. - Since the internal structure of the novel is controlled by the heading levels, this file will produce the same result as a collection of Partition, Chapter and Scene type files. - However, it does not provide the functionality of the Unnumbered layout format. -* **Partition**: A partition can be used to split the novel into parts. - Partition titles are indicated with a level one heading. - You can also add text and meta data to the page. - The Partition file layout will in addition force a page break before the heading, and centre all content on the page. -* **Chapter**: Signifies the start of a new chapter. - If the text itself is contained in scene files, these files should only contain the title, comments, synopsis, and tag references for characters, plot, etc. - The heading for chapters should be level two. - If you need an opening text, like a quote or other leading text before the first scene, this is also where you'd want to add this text. -* **Unnumbered**: Same as Chapter, but when exporting the files and automatic chapter numbering is enabled, this file will not receive a number. - This makes the layout suitable for Prologue and Epilogue type chapters. -* **Scene**: A scene file. - This file should have a header of level three. - Further sections can have headers of level four, but there are no file layout specifically for sections. -* **Note**: A generic file that is optionally ignored when the novel is exported. - Use these files for descriptions of content in the supporting root folders. - Note files can also be added to the Novel root folder if you need to insert notes there. - Note file headers receive no formatting when building the project. - They are always exported as-is. +Title Page + The title page layout. The title should be formatted as a heading level one. All text is automatically centred on exports. + +Plain Page + A plain page layout useful for instance for front matter pages. Heading levels are ignored for this layout format, and so are + formatting options like Justify Text. The page is exported with a page break before it. + +Book + This is the generic novel file format that in principle can be used for all novel files. Since the internal structure of the + novel is controlled by the heading levels, this file will produce the same result as a collection of Partition, Chapter and Scene + type files. However, it does not provide the functionality of the Unnumbered layout format. + +Partition + A partition can be used to split the novel into parts. Partition titles are indicated with a level one heading. You can also add + text and meta data to the page. The Partition file layout will in addition force a page break before the heading, and centre all + content on the page. + +Chapter + Signifies the start of a new chapter. If the text itself is contained in scene files, these files should only contain the title, + comments, synopsis, and tag references for characters, plot, etc. The heading for chapters should be level two. If you need an + opening text, like a quote or other leading text before the first scene, this is also where you'd want to add this text. + +Unnumbered + Same as Chapter, but when exporting the files and automatic chapter numbering is enabled, this file will not receive a number. + This makes the layout suitable for Prologue and Epilogue type chapters. + +Scene + A scene file. This file should have a header of level three. Further sections can have headers of level four, but there are no + file layout specifically for sections. + +Note + A generic file that is optionally ignored when the novel is exported. Use these files for descriptions of content in the + supporting root folders. Note files can also be added to the Novel root folder if you need to insert notes there. Note file + headers receive no formatting when building the project. They are always exported as-is. .. note:: - The layout granularity is entirely optional. - In principle, you can write the entire novel in a single file with layout "Book". - You can also have a single file per chapter. + The layout granularity is entirely optional. In principle, you can write the entire novel in a single file with layout "Book". + You can also have a single file per chapter if that suits you better. The :guilabel:`Outline` will show your structure of + chapters and scenes regardless of how your files are organised. From 4e7e888a53cba75937a3ad56987c6ad11005fbd0 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 6 Aug 2020 23:06:51 +0200 Subject: [PATCH 15/21] Edited the remaining documentation files --- docs/source/export.rst | 145 ++++++++++++++++++++++++++------------ docs/source/notes.rst | 46 ++++++++---- docs/source/technical.rst | 72 ++++++++++++------- 3 files changed, 176 insertions(+), 87 deletions(-) diff --git a/docs/source/export.rst b/docs/source/export.rst index 5297deb8..36637695 100644 --- a/docs/source/export.rst +++ b/docs/source/export.rst @@ -4,58 +4,99 @@ Exporting Projects ################## -The novelWriter project can be exported in various formats using the build tool available from :menuselection:`Project --> Build Project` or by pressing :kbd:`F5`. +The novelWriter project can be exported in various formats using the build tool available from +:guilabel:`Build Novel Project` in the :guilabel:`Tools` menu, or by pressing :kbd:`F5`. + + +.. _a_export_headers: ***************** Header Formatting ***************** The titles for the four levels of story structure can be formatted collectively in the export tool. -This is done through a series of keyword–replace steps. +This is done through a series of keyword–replace steps. They are all on the format ``%keyword%``. -The keyword ``%title%`` will always be replaced by the text you put after the ``#`` characters in your document. +``%title%`` + This keyword will always be replaced with the title text you put after the ``#`` characters in + your document. -The keywords ``%ch%`` and ``%chw%`` is replaced by a number, or a number word, respectively. -You can also use ``%chi%`` or ``%chI%`` for lower and upper case Roman numbers. -The number is incremented by one each time the build tool sees a new heading of level two in a file with layout "Chapter". -If the file has layout "Unnumbered", the counter is *not* incremented. -The latter is useful for for instance Prologue and Epilogue chapters. +``%ch%`` + This is replaced by a chapter number. The number is incremented by one each time the build tool + sees a new heading of level two in a file with layout :guilabel:`Chapter`. If the file has layout + :guilabel:`Unnumbered`, the counter is *not* incremented. The latter is useful for for instance + Prologue and Epilogue chapters. -Likewise, the keywords ``%sc%`` and ``%sca%`` are number counters for scene files. -These are incremented each time a heading of level three is encountered. -The former keyword is reset to one for each new chapter, while the latter is not reset but counts from first scene encountered in the project. +``%chw%`` + This is like ``%ch%``, but the number is expressed as a word like for instance "One", "Two", etc. -If you want to insert a line break in your title format, add two backslashes ``\\``. +``%chi%`` + This is also like ``%ch%``, but the number is represented as a lower case Roman number. + +``%chI%`` + This is also like ``%ch%``, but the number is represented as an upper case Roman number. + +``%sc%`` + This is the number counter equivalent for scenes. These are incremented each time a heading of + level three is encountered, but reset to 1 each time a chapter is encountered. They can thus be + used for counting scenes within a chapter. + +``%sca%`` + This is like ``%sc%``, but the number is *not* reset to 1 for each chapter. Instead it runs from + 1 from the beginning of the novel. + +``\\`` + This inserts a line break within the title. .. note:: - Header formatting only applies to novel files. - Headings in note files will will be left as-is, but heading levels 1 through 4 are converted to the correct heading level in the respective output formats. + Header formatting only applies to novel files. Headings in note files will will be left as-is on + export. However, heading levels 1 through 4 are converted to the correct heading level in the + respective output formats. + + +.. _a_export_scenes: **************** Scene Separators **************** -If you don't want any titles for your scenes (and for your sections if you have them), you can leave the boxes empty, and an empty paragraph will be inserted between the scenes or sections instead. -Alternatively, if you want a separator between them, like the common "\*\*\*", you can also enter that in the box. -In fact, if the format is a piece of static text, it will always be treated as a separator. +If you don't want any titles for your scenes (and for your sections if you have them), you can leave +the boxes empty, and an empty paragraph will be inserted between the scenes or sections instead. + +Alternatively, if you want a separator between them, like the common ``* * *``, you can also enter +that in the box. In fact, if the format is a piece of static text, it will always be treated as a +separator. + + +.. _a_export_files: ************** File Selection ************** -Which files are selected for export can be controlled from the options on the left side of the dialog window. -The switch for "Include novel files" will select any file that isn't classified as a note. -That is, files with layout "Book", "Page", "Partition", "Chapet", "Unnumbered", or "Scene". -The switch for "Include note files" will select any file that is a note. -That is, files with layout "Note". -This is allows for exporting just the novel, just your notes, or both, as you see fit. +Which files are selected for export can also be controlled from the options on the left side of the +dialog window. The switch for :guilabel:`Include novel files` will select any file that isn't +classified as a note. That is, files with layout "Book", "Page", "Partition", "Chapet", +"Unnumbered", or "Scene". The switch for :guilabel:`Include note files` will select any file that is +a note. That is, files with layout "Note". This is allows for exporting just the novel, just your +notes, or both, as you see fit. -In addition, you can select to export the synopsis comments, regular comments, keywords, and even exclude the body text itself. -If you for instance want to export a document with an outline of the novel, you can enable keywords and synopsis export and disable body text, thus getting a document with each heading followed by the tags and references and the synopsis. +In addition, you can select to export the synopsis comments, regular comments, keywords, and even +exclude the body text itself. -If you need to exclude specific files from your exports, like draft files or files you want to take out of your build, but don't want to delete, you can uncheck the "Include when building project" option for each file in the project tree. -An included file has a checkmark after the status icon in the "Flags" column. -The "Build Novel Project" tool has a switch to ignore this flag if you need to collectively override these settings. +.. tip:: + If you for instance want to export a document with an outline of the novel, you can enable + keywords and synopsis export and disable body text, thus getting a document with each heading + followed by the tags and references and the synopsis. + +If you need to exclude specific files from your exports, like draft files or files you want to take +out of your build, but don't want to delete, you can un-check the :guilabel:`Include when building +project` option for each file in the project tree. An included file has a checkmark after the status +icon in the :guilabel:`Flags` column. The :guilabel:`Build Novel Project` tool has a switch to +ignore this flag if you need to collectively override these settings. + + +.. _a_export_formats: ************** Export Formats @@ -63,53 +104,65 @@ Export Formats Currently, six formats are supported for exporting. + OpenDocument Format =================== -This is produces an open document ``.odt`` file. -The document produced has very little formatting, and may require further editing afterwards. -For a better formatted office document, you may get a better result with exporting to HTML and the import that HTML document in your office word processor. +This is produces an open document ``.odt`` file. The document produced has very little formatting, +and may require further editing afterwards. For a better formatted office document, you may get a +better result with exporting to HTML and the import that HTML document in your office word +processor. + PDF Format ========== The PDF export is just a shortcut for print to file. + novelWriter HTML ================ -The HTML export format writes a single ``.htm`` file with minimal style formatting. -The exported HTML file is suitable for further processing by document conversion tools like Pandoc, for importing in word processors, or for printing from browser. +The HTML export format writes a single ``.htm`` file with minimal style formatting. The exported +HTML file is suitable for further processing by document conversion tools like Pandoc, for importing +in word processors, or for printing from browser. + novelWriter Markdown ==================== -This is simply a concatenation of the files selected by the filters. -The files in the project are stacked together in the order they appear in the tree view, with comments, tags, etc. included if they are selected. -This is a useful format for exporting the project for later import back into novelWriter. +This is simply a concatenation of the files selected by the filters. The files in the project are +stacked together in the order they appear in the tree view, with comments, tags, etc. included if +they are selected. This is a useful format for exporting the project for later import back into +novelWriter. + Standard Markdown ================= -If you have Qt 5.14 or higher, the option to export to plain Markdown is available. -This feature uses Qt's own Markdown export feature. +If you have Qt 5.14 or higher, the option to export to plain Markdown is available. This feature +uses Qt's own Markdown export feature. + Plain Text ========== The plain text export format writes a simple ``.txt`` file without any formatting at all. + +.. _a_export_options: + ************************* Additional Export Options ************************* -In addition to the above document formats, the novelWriter HTML and Markdown formats can also be wrapped in a JSON file. -The files will have a meta data entry and a body entry. -For HTML, also the accompanying css styles are exported. +In addition to the above document formats, the novelWriter HTML and Markdown formats can also be +wrapped in a JSON file. The files will have a meta data entry and a body entry. For HTML, also the +accompanying css styles are exported. -The text body is saved in a two-level list. -The outer list contains one entry per exported file, in the order they appear in the project tree. -Each file is then split up into a lst as well, with one entry per line. +The text body is saved in a two-level list. The outer list contains one entry per exported file, in +the order they appear in the project tree. Each file is then split up into a lst as well, with one +entry per line. -These files are mainly intended for scripted post-processing for those who want that option. -A JSON file can be imported directly into a Python dict object or a PHP array, to mentions a few options. +These files are mainly intended for scripted post-processing for those who want that option. A JSON +file can be imported directly into a Python dict object or a PHP array, to mentions a few options. diff --git a/docs/source/notes.rst b/docs/source/notes.rst index 6b3b68a4..5368cb6a 100644 --- a/docs/source/notes.rst +++ b/docs/source/notes.rst @@ -4,22 +4,40 @@ Supporting Files (Notes) ************************ -Supporting files, or notes, are any files stored in root folders that are not the Novel root folder. -These files are intended for summaries and outlines of the various plot elements, characters, locations, and so on, of the novel. -These are not required, but making at least minimal files for each such element, and add a tag to them, makes it possible to use the Outline View feature to see how each element intersects with each section of the novel itself, and add clickable cross-references between document in the editor and viewer. +Supporting files, or notes, are any file stored in root folders that are not a part of the novel +story itself. These files are intended for summaries and outlines of the various plot elements, +characters, locations, and so on, of the novel. -File Tags -========= +These files are not required, but making at least minimal files for each such plot element, and add +a tag to them, makes it possible to use the :guilabel:`Outline` feature to see how each element +intersects with each section of the novel itself, and add clickable cross-references between +documents in the editor and viewer. -Each new heading in a note file can have a tag associated with it. -The format of a tag is ``@tag: tagname``, where tagname is a unique identifier. -Tags can then be referenced in the novel files, or other note files, and will show up in the Outline View and in the back-reference panel when a document is being viewed. -The syntax highlighter will alert the user that the keyword is correctly used and that the tag is allowed, that is, the tag is unique. -Duplicate tags should be detected as long as the index is up to date. +.. _a_notes_tags: -The tag is the only part of these files that the application uses. -The rest of the file is there for the writer to use in whatever way they wish. +Tags in Notes +============= -A note file can also reference other note files in the same way novel files do. -When the note file is opened in the view pane, these become clickable links, making it easier to follow connections in the plot. +Each new heading in a note file can have a tag associated with it. The format of a tag is +``@tag: tagname``, where tagname is a unique identifier. Tags can then be referenced in the novel +files, or other note files, and will show up in the outline view and in the back-reference panel +when a document is being viewed. + +The syntax highlighter will alert the user that the keyword is correctly used and that the tag is +allowed, that is, the tag is unique. Duplicate tags should be detected as long as the index is up +to date. An invalid tag should have a green wiggly line under it, and will not receive the syntax +colour that valid tags do. + +The tag is the only part of these files that the application uses. The rest of the file content is +there for the writer to use in whatever way they wish. Of course, the content of the files can be +exported if you want to compile a single document of all your notes, or include them in an outline. + +A note file can also reference other note files in the same way novel files do. When the note file +is opened in the view pane, these become clickable links, making it easier to follow connections in +the plot. Note files don't show up in the outline view though, so referencing between notes is only +meaningful if you want to be able to click-navigate between them. + +.. tip:: + If you cross-reference between notes as well, and export your project as an HTML file using the + export tool, the cross-references also become clickable in the exported document. diff --git a/docs/source/technical.rst b/docs/source/technical.rst index 882e7c50..7ceb6593 100644 --- a/docs/source/technical.rst +++ b/docs/source/technical.rst @@ -6,52 +6,70 @@ Technical Information This section contains details of how novelWriter stores and handles the project data. + How Data is Stored ================== -All novelWriter files are written with utf-8 encoding. -Since Python automatically converts Unix line endings to Windows line endings on Windows systems, novelWriter does not make any adaptations to the formatting on Windows systems. -This is handled entirely by the Python standard library. +All novelWriter files are written with utf-8 encoding. Since Python automatically converts Unix line +endings to Windows line endings on Windows systems, novelWriter does not make any adaptations to the +formatting on Windows systems. This is handled entirely by the Python standard library. + Main Project File ----------------- -The project itself requires a dedicated folder for storing its files, where novelWriter will create its own "file system" where the folder and file hierarchy is described in a project XML file. -This is the main project file in the project's root folder with the name ``nwProject.nwx``. -This file also contains all the meta data required for the project, and a number of related project settings. +The project itself requires a dedicated folder for storing its files, where novelWriter will create +its own "file system" where the folder and file hierarchy is described in a project XML file. This +is the main project file in the project's root folder with the name ``nwProject.nwx``. This file +also contains all the meta data required for the project, and a number of related project settings. -If this file is lost or corrupted, the structure of the project is lost. -It is important to keep this file backed up, either through the built-in backup tool, or your own backup solution. +If this file is lost or corrupted, the structure of the project is lost. It is important to keep +this file backed up, either through the built-in backup tool, or your own backup solution. -.. note:: - The novelWriter project folder is structured so that it can easily be added to a version control system like git. - If so, you may want to add a `.gitignore` file to exclude files with the extensions `.json` as JSON files are used to cache the index and various run-time settings. +.. tip:: + The novelWriter project folder is structured so that it can easily be added to a version control + system like git. If so, you may want to add a `.gitignore` file to exclude files with the + extensions `.json` as JSON files are used to cache the index and various run-time settings and + are generally large files that change often. You'd also want to exclude the ``cache`` folder. + +The project XML file is indent-formatted, suitable for diff tools and version control, although a +timesetamp is set in the meta section on line 2 each time the file is saved. -The project XML file is indent-formatted, suitable for diff tools and version control, although a timesetamp is set in the meta section on line 2 each time the file is saved. Project Documents ----------------- -The project documents are saved in a folder in the main project folder named ``content``. -Each document has a file handle taken from the first 13 characters of a SHA256 hash of the system time when the file was first created. -The documents are saved with a filename assembled from this hash and the file extension ``.nwd``. -If you wish to find the physical location of a file in the project, you can either look it up in the project XML file, or select :menuselection:`Document --> Show File Details` in the menu when having the document open. +The project documents are saved in a folder in the main project folder named ``content``. Each +document has a file handle taken from the first 13 characters of a SHA256 hash of the system time +when the file was first created. The documents are saved with a filename assembled from this hash +and the file extension ``.nwd``. -The reason for this cryptic file naming is to avoid issues with file naming conventions and restrictions on different operating systems, and also to have a file name that does not depend on what the user names the files, or changes it to. -The file meta data in the tree view, except the file label, is only saved in the project XML file. +If you wish to find the physical location of a file in the project, you can either look it up in the +project XML file, select :guilabel:`Show File Details` from the :guilabel:`Document` menu when +having the document open, or look in one of the ``ToC`` files in the root of the project folder. -Each document file contains a plain text version of the text from the editor. -The file can in principle be edited in any text editor, and is suitable for diffing and version control if so desired. -Just make sure the file remains in utf-8 encoding, otherwise unicode chatracters may become mangled when opened in novelWriter again. +The reason for this cryptic file naming is to avoid issues with file naming conventions and +restrictions on different operating systems, and also to have a file name that does not depend on +what the user names the files, or changes it to. The file meta data in the tree view, except the +file label, is only saved in the project XML file. + +Each document file contains a plain text version of the text from the editor. The file can in +principle be edited in any text editor, and is suitable for diffing and version control if so +desired. Just make sure the file remains in utf-8 encoding, otherwise unicode chatracters may become +mangled when opened in novelWriter again. + +The first line of the file contains some meta data starting with the characters ``%%~``. This line +is mainly there to restore some information if it is lost from the project file, and the information +may be helpful if you do open the file in an external editor as it contains the file label as the +last entry. The line can be deleted without any consequences to the rest of the content of the file, +and will be added back next time the file is saved in novelWriter. -The first line of the file contains some meta data starting with the characters "%%~". -This line is mainly there to restore some information if it is lost from the project file, and the information may be helpful if you do open the file in an external editor as it contains the file label as the last entry. -The line can be deleted without any consequences to the rest of the content of the file, and will be added back next time the file is saved in novelWriter. The File Saving Process ----------------------- When saving the project file, or any of the documents, the data is first saved to a temporary file. -If successful, the old data file is removed, and the temporary file becomes the new file. -This ensures that the previously saved data is only replaced when the new data has been successfully saved. -For the project XML file, a `.bak` file is kept which will always contain the previous version of the file, although when auto-save is enabled, they may have the same content. +If successful, the old data file is removed, and the temporary file becomes the new file. This +ensures that the previously saved data is only replaced when the new data has been successfully +saved. For the project XML file, a ``.bak`` file is kept which will always contain the previous +version of the file, although when auto-save is enabled, they may have the same content. From f820b8159e9abf587e4e1c01312c0280a7291637 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 6 Aug 2020 23:18:03 +0200 Subject: [PATCH 16/21] Fixed the layout of the export docs file --- docs/source/export.rst | 67 ++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 45 deletions(-) diff --git a/docs/source/export.rst b/docs/source/export.rst index 36637695..7997934a 100644 --- a/docs/source/export.rst +++ b/docs/source/export.rst @@ -1,8 +1,8 @@ .. _a_export: -################## +****************** Exporting Projects -################## +****************** The novelWriter project can be exported in various formats using the build tool available from :guilabel:`Build Novel Project` in the :guilabel:`Tools` menu, or by pressing :kbd:`F5`. @@ -10,9 +10,8 @@ The novelWriter project can be exported in various formats using the build tool .. _a_export_headers: -***************** Header Formatting -***************** +================= The titles for the four levels of story structure can be formatted collectively in the export tool. This is done through a series of keyword–replace steps. They are all on the format ``%keyword%``. @@ -56,9 +55,8 @@ This is done through a series of keyword–replace steps. They are all on the fo .. _a_export_scenes: -**************** Scene Separators -**************** +================ If you don't want any titles for your scenes (and for your sections if you have them), you can leave the boxes empty, and an empty paragraph will be inserted between the scenes or sections instead. @@ -70,9 +68,8 @@ separator. .. _a_export_files: -************** File Selection -************** +============== Which files are selected for export can also be controlled from the options on the left side of the dialog window. The switch for :guilabel:`Include novel files` will select any file that isn't @@ -98,63 +95,43 @@ ignore this flag if you need to collectively override these settings. .. _a_export_formats: -************** Export Formats -************** +============== Currently, six formats are supported for exporting. - OpenDocument Format -=================== - -This is produces an open document ``.odt`` file. The document produced has very little formatting, -and may require further editing afterwards. For a better formatted office document, you may get a -better result with exporting to HTML and the import that HTML document in your office word -processor. - + This is produces an open document ``.odt`` file. The document produced has very little + formatting, and may require further editing afterwards. For a better formatted office document, + you may get a better result with exporting to HTML and the import that HTML document in your + office word processor. PDF Format -========== - -The PDF export is just a shortcut for print to file. - + The PDF export is just a shortcut for print to file. novelWriter HTML -================ - -The HTML export format writes a single ``.htm`` file with minimal style formatting. The exported -HTML file is suitable for further processing by document conversion tools like Pandoc, for importing -in word processors, or for printing from browser. - + The HTML export format writes a single ``.htm`` file with minimal style formatting. The exported + HTML file is suitable for further processing by document conversion tools like Pandoc, for + importing in word processors, or for printing from browser. novelWriter Markdown -==================== - -This is simply a concatenation of the files selected by the filters. The files in the project are -stacked together in the order they appear in the tree view, with comments, tags, etc. included if -they are selected. This is a useful format for exporting the project for later import back into -novelWriter. - + This is simply a concatenation of the files selected by the filters. The files in the project are + stacked together in the order they appear in the tree view, with comments, tags, etc. included if + they are selected. This is a useful format for exporting the project for later import back into + novelWriter. Standard Markdown -================= - -If you have Qt 5.14 or higher, the option to export to plain Markdown is available. This feature -uses Qt's own Markdown export feature. - + If you have Qt 5.14 or higher, the option to export to plain Markdown is available. This feature + uses Qt's own Markdown export feature. Plain Text -========== - -The plain text export format writes a simple ``.txt`` file without any formatting at all. + The plain text export format writes a simple ``.txt`` file without any formatting at all. .. _a_export_options: -************************* Additional Export Options -************************* +========================= In addition to the above document formats, the novelWriter HTML and Markdown formats can also be wrapped in a JSON file. The files will have a meta data entry and a body entry. For HTML, also the From 38fb4a8184362ef5f327b2511eef884a4c2ce08e Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 6 Aug 2020 23:32:53 +0200 Subject: [PATCH 17/21] Split up the toctree --- docs/source/index.rst | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 8aa23970..c8f5d952 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -48,19 +48,29 @@ Useful Links * PyPi Project: https://pypi.org/project/novelWriter -Contents -======== - .. toctree:: :maxdepth: 2 + :caption: First Steps introduction started interface + + +.. toctree:: + :maxdepth: 2 + :caption: Writing Novels + projects structure notes export + + +.. toctree:: + :maxdepth: 2 + :caption: Under the Hood + technical From 62908adac614d6c759dcb091eda425b5aac9edfd Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 6 Aug 2020 23:48:46 +0200 Subject: [PATCH 18/21] Trying a different header breakdown of the main document --- docs/source/index.rst | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index c8f5d952..2a86d416 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,6 +1,6 @@ -####################################### -Documentation for novelWriter |release| -####################################### +##################### +novelWriter |release| +##################### .. image:: https://travis-ci.com/vkbo/novelWriter.svg?branch=master :target: https://travis-ci.com/vkbo/novelWriter @@ -48,6 +48,12 @@ Useful Links * PyPi Project: https://pypi.org/project/novelWriter +################# +The Documentation +################# + +This is the documentation for novelWriter |release|. + .. toctree:: :maxdepth: 2 :caption: First Steps From 050c08ea77f7914da58590bb8e1348a07971808d Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 6 Aug 2020 23:52:02 +0200 Subject: [PATCH 19/21] Trying a different header breakdown of the main document ... again --- docs/source/index.rst | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 2a86d416..18336c21 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -36,9 +36,7 @@ The plain text storage is suitable for version control software, and also well s synchronisation tools. The core project structure is stored in a project XML file. Other meta data is primarily saved in JSON files. - -Useful Links -============ +**Useful Links** * Website: https://novelwriter.io * Documentation: https://novelwriter.readthedocs.io @@ -48,12 +46,6 @@ Useful Links * PyPi Project: https://pypi.org/project/novelWriter -################# -The Documentation -################# - -This is the documentation for novelWriter |release|. - .. toctree:: :maxdepth: 2 :caption: First Steps From 566c704c87f2d03b422941138f14600687a2364c Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 7 Aug 2020 20:55:30 +0200 Subject: [PATCH 20/21] Added docs logo --- docs/source/conf.py | 3 ++- docs/source/images/novelwriter.png | Bin 5489 -> 22099 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1755d7b4..c6dfbb71 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -77,7 +77,8 @@ html_theme_options = { "sticky_navigation": True, "navigation_depth": 3, "includehidden": True, - "titles_only": False + "titles_only": False, + "logo_only": True, } html_static_path = ["_static"] diff --git a/docs/source/images/novelwriter.png b/docs/source/images/novelwriter.png index a9f2b5bcdef18f15a36f665d9f5e091395d68de2..99dc8691b0df7c02688bd429f047fbf815b2a140 100644 GIT binary patch literal 22099 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 Date: Fri, 7 Aug 2020 23:06:35 +0200 Subject: [PATCH 21/21] Made another pass of editing of the entire documentation --- docs/source/export.rst | 48 +++++--- docs/source/index.rst | 7 +- docs/source/interface.rst | 126 ++++++++++++------- docs/source/introduction.rst | 54 ++++---- docs/source/notes.rst | 15 +-- docs/source/projects.rst | 113 ++++++++++------- docs/source/started.rst | 26 ++-- docs/source/structure.rst | 177 +++++++++++++++------------ docs/source/technical.rst | 21 ++-- {docs/markdown => markdown}/style.md | 0 10 files changed, 349 insertions(+), 238 deletions(-) rename {docs/markdown => markdown}/style.md (100%) diff --git a/docs/source/export.rst b/docs/source/export.rst index 7997934a..4a5fc7a2 100644 --- a/docs/source/export.rst +++ b/docs/source/export.rst @@ -13,8 +13,9 @@ The novelWriter project can be exported in various formats using the build tool Header Formatting ================= -The titles for the four levels of story structure can be formatted collectively in the export tool. -This is done through a series of keyword–replace steps. They are all on the format ``%keyword%``. +The titles for the five types of titles (the chapter headings come in a numbered and unnumbered +version) of story structure can be formatted collectively in the export tool. This is done through +a series of keyword–replace steps. They are all on the format ``%keyword%``. ``%title%`` This keyword will always be replaced with the title text you put after the ``#`` characters in @@ -52,6 +53,12 @@ This is done through a series of keyword–replace steps. They are all on the fo export. However, heading levels 1 through 4 are converted to the correct heading level in the respective output formats. +**Example** + +* The format ``%title%`` just reproduces the title you set in the document file. +* The format ``Chapter %ch%: %title%`` produces something like "Chapter 1: My Chapter Title". +* The format ``Scene %ch%.%sc%`` produces something like "Scene 1.2" for scene 2 in chapter 1. + .. _a_export_scenes: @@ -73,10 +80,8 @@ File Selection Which files are selected for export can also be controlled from the options on the left side of the dialog window. The switch for :guilabel:`Include novel files` will select any file that isn't -classified as a note. That is, files with layout "Book", "Page", "Partition", "Chapet", -"Unnumbered", or "Scene". The switch for :guilabel:`Include note files` will select any file that is -a note. That is, files with layout "Note". This is allows for exporting just the novel, just your -notes, or both, as you see fit. +classified as a note. The switch for :guilabel:`Include note files` will select any file that *is* +a note. This is allows for exporting just the novel, just your notes, or both, as you see fit. In addition, you can select to export the synopsis comments, regular comments, keywords, and even exclude the body text itself. @@ -87,10 +92,10 @@ exclude the body text itself. followed by the tags and references and the synopsis. If you need to exclude specific files from your exports, like draft files or files you want to take -out of your build, but don't want to delete, you can un-check the :guilabel:`Include when building -project` option for each file in the project tree. An included file has a checkmark after the status -icon in the :guilabel:`Flags` column. The :guilabel:`Build Novel Project` tool has a switch to -ignore this flag if you need to collectively override these settings. +out of your manuscript, but don't want to delete, you can un-check the :guilabel:`Include when +building project` option for each file in the project tree. An included file has a checkmark after +the status icon in the :guilabel:`Flags` column. The :guilabel:`Build Novel Project` tool has a +switch to ignore this flag if you need to collectively override these settings. .. _a_export_formats: @@ -101,18 +106,21 @@ Export Formats Currently, six formats are supported for exporting. OpenDocument Format - This is produces an open document ``.odt`` file. The document produced has very little - formatting, and may require further editing afterwards. For a better formatted office document, - you may get a better result with exporting to HTML and the import that HTML document in your - office word processor. + This produces an open document ``.odt`` file. The document produced has very little formatting, + and may require further editing afterwards. For a better formatted office document, you may get a + better result with exporting to HTML and the import that HTML document into your office word + processor. They are generally very good at importing HTML files. PDF Format - The PDF export is just a shortcut for print to file. + The PDF export is just a shortcut for print to file. For a better PDF result, you may instead + want to export HTML, and use a word processor to convert the HTML document to PDF. novelWriter HTML The HTML export format writes a single ``.htm`` file with minimal style formatting. The exported HTML file is suitable for further processing by document conversion tools like Pandoc, for - importing in word processors, or for printing from browser. + importing in word processors, or for printing from browser. It is generally the best formatted + export option and supports all features of novelWriter since it is entirely geenrated by the + application and doesn't depend on Qt library features. novelWriter Markdown This is simply a concatenation of the files selected by the filters. The files in the project are @@ -121,8 +129,8 @@ novelWriter Markdown novelWriter. Standard Markdown - If you have Qt 5.14 or higher, the option to export to plain Markdown is available. This feature - uses Qt's own Markdown export feature. + If you have Qt 5.14 or higher, the option to export to plain markdown is available. This feature + uses Qt's own markdown export feature. Plain Text The plain text export format writes a simple ``.txt`` file without any formatting at all. @@ -138,8 +146,8 @@ wrapped in a JSON file. The files will have a meta data entry and a body entry. accompanying css styles are exported. The text body is saved in a two-level list. The outer list contains one entry per exported file, in -the order they appear in the project tree. Each file is then split up into a lst as well, with one -entry per line. +the order they appear in the project tree. Each file is then split up into a list as well, with one +entry per paragraph in the document. These files are mainly intended for scripted post-processing for those who want that option. A JSON file can be imported directly into a Python dict object or a PHP array, to mentions a few options. diff --git a/docs/source/index.rst b/docs/source/index.rst index 18336c21..da2335db 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -34,7 +34,12 @@ repository for robustness. The plain text storage is suitable for version control software, and also well suited for file synchronisation tools. The core project structure is stored in a project XML file. Other meta data -is primarily saved in JSON files. +is primarily saved as JSON files. + +Any operating system that can run Python 3 and has the Qt 5 libraries should be able to run +novelWriter. It runs fine on Linux, Windows and macOS already, and users have tested it on other +platforms too. Since novelWriter is still under development, it is easier to run it if you are +already familiar with how to run Python applications on your platform. **Useful Links** diff --git a/docs/source/interface.rst b/docs/source/interface.rst index f7463f8f..2a04329e 100644 --- a/docs/source/interface.rst +++ b/docs/source/interface.rst @@ -4,7 +4,8 @@ User Interface *************** -The user interface is kept as simple as possible to avoid distractions when writing. +The user interface is kept as simple as possible to avoid distractions when writing. This page lists +all the main GUI elements, and explains what they do. .. _a_ui_tree: @@ -16,12 +17,13 @@ project. It has four columns: :guilabel:`Label` The first column shows the item icon and its label. The labels can be edited from the menu, or by - pressing :kbd:`F2` or :kbd:`Ctrl`:kbd:`E`. + pressing :kbd:`F2` or :kbd:`Ctrl`:kbd:`E`. The label is not the same as the title you set inside + the document, but it will appear in the header above the document text itself. :guilabel:`Words` The second column shows the word count of the file, or the sum of words in the child items if it is a folder. If the counts seem incorrect, they can be updated by rebuilding the project index - from the menu, or by pressing :kbd:`F9`. + from the :guilabel:`Tools` menu, or by pressing :kbd:`F9`. :guilabel:`Inc` The third column indicates whether the file is included in the final project build or not. You @@ -31,13 +33,14 @@ project. It has four columns: :guilabel:`Flags` The fourth column shows various meta data flags for the item. The first is an icon indicating the importance or status of the file. These are colour coded status levels that you control and - define. They can be changed in Project Settings. The first character after the icon indicates the - class of the item, that is ``N`` for **Novel**, ``C`` for **Character**, etc (see - :ref:`a_struct_tags`. The second character indicates the file layout type (see - :ref:`a_proj_roots`). + define yourself. They can be changed in :guilabel:`Project Settings` from the :guilabel:`Project` + menu. The first character after the icon indicates the class of the item, that is ``N`` for + **Novel**, ``C`` for **Character**, etc (see :ref:`a_struct_tags`. The second character indicates + the file layout type (see :ref:`a_proj_roots`). -Below the project tree is a small details panel showing the full information of the currently -selected item. This panel also includes the latest paragraph and character counts. +Below the project tree you will find a small details panel showing the full information of the +currently selected item. This panel also includes the latest paragraph and character counts in +addition to the word count. .. _a_ui_edit: @@ -46,16 +49,16 @@ Editing and Viewing Documents ============================= To edit a document, double-click the file in the project tree, or press the :kbd:`Return` key while -having it selected. This will open the document in the document editor. The editor uses a simplified +having it selected. This will open the file in the document editor. The editor uses a simplified markdown format. The format is described in the :ref:`a_ui_md` section below. The editor has a maximise button (activates :guilabel:`Focus Mode`) and a close button in the top-right corner. Any document in the project tree can also be viewed in parallel in a right hand side document viewer To view a document, press :kbd:`Ctrl`:kbd:`R`, or select :guilabel:`View Document` in the menu. The -document viewed does not have to be the same document currently being edited. If you *are* viewing -the same document though, pressing :kbd:`Ctrl`:kbd:`R` again will update the document with your +document viewed does not have to be the same document currently being edited. However, If you *are* +viewing the same document, pressing :kbd:`Ctrl`:kbd:`R` again will update the document with your latest changes. You can also press the little reload button in the top-right corner of the view -panel next to the close button. +panel next to the close button to achieve the same thing. Both the document editor and viewer will show the label of the document in the header at the top of the edit or view panel. Optionally, the full project path to the file can be shown. This can be set @@ -68,15 +71,38 @@ and pressing :kbd:`Ctrl`:kbd:`Return`. In the viewer, the references become clic Clicking them will replace the content of the viewer with the content of the document the reference points to. -At the bottom of the viewer's panel there is a :guilabel:`References` panel (click the icon if it is -hidden) that will show links to all documents referring back to it. The :guilabel:`Sticky` button -will freeze the content of the panel to the current document, even if you navigate to another -document. This is convenient if you want to quickly look through all documents in the list. +At the bottom of the view panel there is a :guilabel:`References` panel. (If it is hidden, click the +icon to reveal it.) This panel will show links to all documents referring back to it, if any has +been defined. The :guilabel:`Sticky` button will freeze the content of the panel to the current +document, even if you navigate to another document. This is convenient if you want to quickly look +through all documents in the list in the :guilabel:`References` panel. .. note:: The :guilabel:`References` panel relies on an up-to-date index of the project. If anything is - missing, or seems wrong, the index can always be rebuilt from :guilabel:`Tools` > - :guilabel:`Rebuild Index` or by pressing :kbd:`F9`. + missing, or seems wrong, the index can always be rebuilt by selecting :guilabel:`Rebuild Index` + from the :guilabel:`Tools` menu, or by pressing :kbd:`F9`. + + +.. _a_ui_edit_auto: + +Auto-Replace as You Type +======================== + +A few auto-replace features are supported by the editor. You can control every aspect of the +auto-replace feature from :guilabel:`Preferences`. + +.. tip:: + If you don't like auto-replacement, all symbols inserted by this feature are also available in + the :guilabel:`Insert` menu, and via convenient :ref:`a_ui_shortcuts_ins`. + +The editor is able to replace two and three hyphens with short and long dashes, triple points with +ellipsis, and replace straight single and double quotes with user-defined quote symbols. It will +also try to determine whether to use the opening or closing symbol, but this feature isn't always +accurate. + +.. tip:: + If the editor changes a symbol when you did not want it to change, pressing :kbd:`Ctrl`:kbd:`Z` + immediately after the auto-replacement will undo it without undoing the character you typed. .. _a_ui_md: @@ -85,11 +111,11 @@ Markdown Format =============== The document editor uses a simplified markdown format. That is, it supports basic formatting like -emphasis (italic), strong emphasis (bold) and strikethrough text, as well as four levels of +emphasis (italic), strong importance (bold) and strikethrough text, as well as four levels of headings. Some non-standard markdown features have been added. For instance, novelWriter allows for comments, -a synopsis tag, and a set of keyword/value sets used for tags and references. +a synopsis tag, and a set of keyword and value sets used for tags and references. .. _a_ui_md_head: @@ -102,20 +128,24 @@ fit, but for all other file layouts used for the novel text itself, they indicat level of the novel. See :ref:`a_struct_heads` for more details. ``# Title`` - Heading level one. The space after the # is mandatory. If the file is a novel file, the header - level indicates the start of a new partition. + Heading level one. If the file is a novel file, the header level indicates the start of a new + partition. This heading level can also be used for the title page novel title. ``## Title`` - Heading level two. The space after the # is mandatory. If the file is a novel file, the header - level indicates the start of a new chapter. + Heading level two. If the file is a novel file, the header level indicates the start of a new + chapter. ``### Title`` - Heading level three. The space after the # is mandatory. If the file is a novel file, the header - level indicates the start of a new scene. + Heading level three. If the file is a novel file, the header level indicates the start of a new + scene. ``#### Title`` - Heading level four. The space after the # is mandatory. If the file is a novel file, the header - level indicates the start of a new section. + Heading level four. If the file is a novel file, the header level indicates the start of a new + section. + +.. note:: + The space after the ``#`` characters is mandatory. The syntaxhighlighter will change colour and + font size when the heading is correctly formatted. .. _a_ui_md_emph: @@ -123,21 +153,23 @@ level of the novel. See :ref:`a_struct_heads` for more details. Text Emphasis ------------- -In markdown it is often recommended to differentiate between strong emphasis and emphasis by using -``**`` for strong emphasis and ``_`` for emphasis, although markdown generally supports also ``__`` -for strong emphasis and ``*`` fdr emphasis. However, since the differentiation makes the -highlighting and conversion significantly simpler and faster, in novelWriter this is a rule, not -just a recommendation. The following is therefore the only supported formatting syntax: +A minimal set of text emphasis styles are supported. ``_text_`` The text is rendered as emphasised text (italicised). ``**text**`` - The text is rendered as strongly emphasised text (bold). + The text is rendered as strongly important text (bold). ``~~text~~`` Strikethrough text. +In markdown guides it is often recommended to differentiate between strong importance and emphasis +by using ``**`` for strong and ``_`` for emphasis, although markdown generally supports also ``__`` +for strong and ``*`` fdr emphasis. However, since the differentiation makes the highlighting and +conversion significantly simpler and faster, in novelWriter this is a rule, not just a +recommendation. The following is therefore the only supported formatting syntax: + There are also some additional rules: 1. The emphasis and strikethrough formatting tags do not allow spaces between the words and the tag @@ -157,7 +189,7 @@ Comments and Synopsis In addition to these standard markdown features, novelWriter also allows for comments in the text files. The text of the comment is ignored by the word counter and not exported or, optionally, hidden when viewing the document. If the first word of a comment is ``Synopsis:`` (with the colon), -the comment is treated specially, and will show up in the :ref:`a_ui_outline`. +the comment is treated specially, and will show up in the :ref:`a_ui_outline` in a dedicated column. ``% text...`` A comment. The text is not exported by default (this can be overridden), seen in the Viewer, or @@ -175,9 +207,9 @@ the comment is treated specially, and will show up in the :ref:`a_ui_outline`. Tags and References ------------------- -The document editor supports a minimal set of keywords used for setting tags and references between -files. The tags and references can be set once per section defined by a heading. Using them multiple -times under the same heading will just override the previous setting. +The document editor supports a minimal set of keywords used for setting tags, and making references +between files. The tags and references can be set once per section defined by a heading. Using them +multiple times under the same heading will just override the previous setting. ``@keyword: value`` A keyword argument followed by a value, or a comma separated list of values. @@ -190,8 +222,9 @@ The available tag and reference keywords are listed in the :ref:`a_struct_tags` Additional Markdown and Non-Standard Features --------------------------------------------- -The Editor and Viewer also supports markdown standard hard line breaks, and preserves non-breaking -spaces if running with Qt 5.9 or higher. +The editor and viewer also supports markdown standard hard line breaks, and preserves non-breaking +spaces if running with Qt 5.9 or higher. For older versions, the non-breaking spaces are lost when +the file is saved. This is unfortunately hard-coded in the Qt text editor. * A hard line break is achieved by leaving two or more spaces at the end of the line. Alternatively, the user can press :kbd:`Ctrl`:kbd:`K`, :kbd:`Return` to insert this. @@ -213,11 +246,16 @@ Project Outline View The project's Outline view is available as the second tab on the right hand side of the main window labelled :guilabel:`Outline`. The outline provides an overview of the novel structure, displaying a -tree hierarchy of the elements of the novel, that is, the level 1 to 4 headings. +tree hierarchy of the elements of the novel, that is, the level 1 to 4 headings, not the files. + +The document file containing the heading can also be displayed as a separate column, as well as the +line number where it occurs. Double-clicking an entry will open the corresponding file in the +editor. .. note:: Since the internal structure of the novel does not depend on the file structure of the project - tree, these will not necessarily look the same. See the :ref:`a_struct` page for more details. + tree, these will not necessarily look the same, depending how you chose to organise your files. + See the :ref:`a_struct` page for more details. Various meta data and information extracted from tags can be displayed in columns in the outline. A default set of such columns is visible, but you can turn on or off more columns by right clicking @@ -258,7 +296,7 @@ altering the colour of the word. Keyboard Shortcuts ================== -Most features are available as keyboard shortcuts. These are as following: +Most features are available as keyboard shortcuts. These are as follows: .. csv-table:: Keyboard Shortcuts :header: "Shortcut", "Description" diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index 5466bf28..6ca43b5f 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -5,20 +5,20 @@ Introduction ************ novelWriter is a simple, multi-document plain text editor using a modified markdown syntax to apply -simple formatting. It is designed for writing novels, and allow for the component documents to be -ordered freely to create the desired structure of the novel project. This is covered on the -:ref:`a_struct` page. +simple formatting. It is designed for writing novels, and allows for the component documents to be +ordered freely to create the desired structure of the novel. More details about how projects are +structured is covered on the :ref:`a_struct` page. In addition, the project can contain notes on the various plot elements, characters, locations, etc, -that make up the story. These notes are organised in a set of category-specific folders, and each -entry can be tagged and cross referenced from within the novel files and other notes. These tags -make it possible to inter-link documents, and generate an overview of the entire novel project and -how the various files and plot elements are interconnected. This is covered on the :ref:`a_proj` and -:ref:`a_notes` pages. +that make up the story. These notes are organised in a set of category-specific top-level folders, +and each entry can be tagged and cross-referenced from within the novel files and other notes. These +tags make it possible to inter-link documents, and generate an overview of the entire novel project +and how the various files and plot elements are interconnected. This is covered on the :ref:`a_proj` +and :ref:`a_notes` pages. These additional features are not standard in markdown, but are available through special meta keywords. Syntax highlighting is provided to make it easier to verify that the markdown tags are -used correctly. This is covered on the :ref:`a_ui` page. +used correctly. The syntax is covered on the :ref:`a_ui` page. .. _a_intro_design: @@ -31,8 +31,8 @@ at the same time provide a complete set of features needed for writing a novel. .. note:: novelWriter is not intended to be a full office type word processor. It doesn't support images, - links, tables, and its formatting is limited to headers, and bold, italicised and strikethrough - text. + links, tables, and other complex structure and objects often needed for such document. Formatting + is limited to headers, and bold, italicised and strikethrough text. The main window does not have a toolbar like most other applications do. This reduces clutter, and since the documents are formatted with markdown tags, is more or less redundant. However, all @@ -40,11 +40,14 @@ formatting features supported are available through convenient keyboard shortcut available in the main menu. A full list of shortcuts can be found in the :ref:`a_ui_shortcuts` section. +In addition, novelWriter offers a :guilabel:`Focus Mode` where all the user interface elements other +than the document editor itself are hidden away. + The colour scheme of the user interface defaults to that of the host operating system. In addition, a dark theme is provided, and can be enabled in :guilabel:`Preferences` from the :guilabel:`Tools` menu. A number of syntax highlighting themes are also available in :guilabel:`Preferences`. A set of -icon themes in colour and greyscale is also offered. The icons are based on the Typicon_ icon set by -Stephen Hutchings. +icon themes in colour and greyscale are also offered. The icons are based on the Typicon_ icon set +designed by Stephen Hutchings. The main window is split in two, or optionally three, panels. The left-most contains the project tree and all the files in your project. The second panel is the document editor, and the optional @@ -53,6 +56,7 @@ third panel is a document viewer which can view any document in your project. A second tab is also available on the main window. This is the :guilabel:`Outline` tab where the entire novel structure can be displayed, with all the tags and references listed. Depending on how you structure your novel project files, this outline can be quite different than your project tree. +Your project tree lists files, your Outline tree lists the structure of the novel itself. .. _Typicon: https://github.com/stephenhutchings/typicons.font @@ -62,20 +66,21 @@ you structure your novel project files, this outline can be quite different than Project Layout ============== -You are free to structure your project files as you wish in subfolders and split between files. All -that matters to novelWriter is the linear order they appear in the project tree (top to bottom). The -chapters, scenes and sections of the novel are determined by the headings within those files. +You are free to structure your project files as you wish in subfolders, and split the text between +files in whatever way suits you. All that matters to novelWriter is the linear order the files +appear at in the project tree (top to bottom). The chapters, scenes and sections of the novel are +determined by the headings within those files. The four heading levels (**H1** to **H4**) are treated as follows: * **H1** is used for the book title, and for partitions. * **H2** is used for chapter tiles. -* **H3** is reserved for scene titles. +* **H3** is used for scene titles – optionally replaced by separators. * **H4** is for section titles within scenes, if such granularity is needed. -This header level structure is only considered on novel files. For the files designated as project -notes, the usage of headers imply no structural meaning, and the user is free to do whatever they -want. See the :ref:`a_struct` page for more details. +This header level structure is only taken into account for novel files. For the files designated as +project notes, the header levels imply no structural meaning, and the user is free to do whatever +they want. See the :ref:`a_struct` page for more details. .. _a_intro_export: @@ -89,11 +94,16 @@ markdown (requires Qt 5.14), and to a basic Open Document. In addition, printing and printing to PDF is also possible. The best supported export format is HTML, which can be imported or converted by a number of other tools like Pandoc, or simply imported -into Libre Office and similar. +into Libre Office Writer and similar word processors. It is also possible to export the content of the project to a JSON file. This is useful if you want to write your own processing script in for instance Python as the entire novel can be read into a -Python dictionary with a couple of lines of code. See the :ref:`a_export` page for more details. +Python dictionary with a couple of lines of code. + +A number of filter options can be applied to the produced document, allowing you to export a draft +manuscript, a reference document of notes, an outline based on chapter and scene titles with a +synopsis each, and so on. See the :ref:`a_export` page for more details on export features and +formats. .. _a_intro_screenshots: diff --git a/docs/source/notes.rst b/docs/source/notes.rst index 5368cb6a..d2b3c502 100644 --- a/docs/source/notes.rst +++ b/docs/source/notes.rst @@ -4,9 +4,10 @@ Supporting Files (Notes) ************************ -Supporting files, or notes, are any file stored in root folders that are not a part of the novel -story itself. These files are intended for summaries and outlines of the various plot elements, -characters, locations, and so on, of the novel. +novelWriter doesn't have a database and compicated forms to fill in all details about plot elements, +characters, and all sorts of additional information that isn't a part of the novel text itself. +Instead, all such information is saved in notes. The relation between all these additional elements +is extracted from these files by the project indexer based on the tags and references you set. These files are not required, but making at least minimal files for each such plot element, and add a tag to them, makes it possible to use the :guilabel:`Outline` feature to see how each element @@ -21,8 +22,8 @@ Tags in Notes Each new heading in a note file can have a tag associated with it. The format of a tag is ``@tag: tagname``, where tagname is a unique identifier. Tags can then be referenced in the novel -files, or other note files, and will show up in the outline view and in the back-reference panel -when a document is being viewed. +files, or cross-referenced in other note files, and will show up in the outline view and in the +back-reference panel when a document is being viewed. The syntax highlighter will alert the user that the keyword is correctly used and that the tag is allowed, that is, the tag is unique. Duplicate tags should be detected as long as the index is up @@ -34,10 +35,10 @@ there for the writer to use in whatever way they wish. Of course, the content of exported if you want to compile a single document of all your notes, or include them in an outline. A note file can also reference other note files in the same way novel files do. When the note file -is opened in the view pane, these become clickable links, making it easier to follow connections in +is opened in the view panel, these become clickable links, making it easier to follow connections in the plot. Note files don't show up in the outline view though, so referencing between notes is only meaningful if you want to be able to click-navigate between them. .. tip:: If you cross-reference between notes as well, and export your project as an HTML file using the - export tool, the cross-references also become clickable in the exported document. + export tool, the cross-references become clickable in the exported document. diff --git a/docs/source/projects.rst b/docs/source/projects.rst index fdfc3616..dbf90b6c 100644 --- a/docs/source/projects.rst +++ b/docs/source/projects.rst @@ -5,7 +5,7 @@ Novel Projects ************** A novelWriter project requires a dedicated folder for storing its files on the local file system. -See the :ref:`a_tech` page for further details. +See the :ref:`a_tech` page for further details on how files are organised. A new project can be created from the :guilabel:`Project` menu by selecting :guilabel:`New Project`. A list of recently opened projects is maintained, and displayed in the :guilabel:`Open Project` @@ -23,64 +23,77 @@ Project Roots Projects are structured into a set of top level folders called *root folders*. They are visible in the project tree at the left side of the main window. -The core novel files go into a root folder of type "Novel". Other supporting files go into the other -root folders. These other root folder types are intended for your notes on the various elements of -your story. Using these is of course entirely optional. +The core novel files go into a root folder of type :guilabel:`Novel`. Other supporting files go into +the other root folders. These other root folder types are intended for your notes on the various +elements of your story. Using these is of course entirely optional. A new project will not have all of the root folders present, but you can add the ones you want from :guilabel:`Create Root Folder` in the :guilabel:`Project` menu. -The root folders are intended for the following use, but aside from the Novel folder, no +The root folders are intended for the following use, but aside from the :guilabel:`Novel` folder, no restrictions are enforced by the application. You can use them however you want. -.. note:: - The root folders correspond to the categories of tags that can be used. - See the :ref:`a_struct` page for further details. - -Novel +:guilabel:`Novel` This is the root folder of all text that goes into the final novel. This class of files have other rules and features than other files in the project. See the :ref:`a_struct` page for more details. -Plot +:guilabel:`Plot` This is the root folder where main plots can be outlined. It is optional, but adding at least - dummy files can be useful in order to tag plot elements for the Outline View. Tags in this folder + dummy files can be useful in order to tag plot elements for the Outline view. Tags in this folder can be references using the ``@plot`` keyword. -Characters +:guilabel:`Characters` Character files go in this root folder. These are especially important if one wants to use the - Outline View to see which character appears where, and which part of the story is told from a + Outline view to see which character appears where, and which part of the story is told from a specific character's point-of-view. Tags in this folder can be references using the ``@pov`` keyword for point-of-view characters, or the ``@char`` keyword for other characters. -Locations +:guilabel:`Locations` The locations folder is for various scene locations that you want to track. Tags in this folder can be references using the ``@location`` keyword. -Timeline +:guilabel:`Timeline` If the story has multiple plot timelines or jumps in time within the same plot, this class of files can be used to track this. Tags in this folder can be references using the ``@time`` keyword. -Objects +:guilabel:`Objects` Important objects in the story, for instance important objects that change hands often, can be tracked here. Tags in this folder can be references using the ``@object`` keyword. -Entities +:guilabel:`Entities` Does your plot have many powerful organisations or companies? Or other entities that are part of the plot? They can be organised here. Tags in this folder can be references using the ``@entity`` keyword. -Custom +:guilabel:`Custom` The custom root folder can be used for tracking anything else not covered by the above options. Tags in this folder can be references using the ``@custom`` keyword. -For more information about the tags listed, see :ref:`a_struct_tags`. +The root folders correspond to the categories of tags that can be used to reference them. For more +information about the tags listed, see :ref:`a_struct_tags`. -.. note:: - Deleted files will be moved into a special :guilabel`Trash` root folder. Files in the trash - folder can then be deleted permanently, either individually, or by emptying the trash from the - menu. +.. tip:: + You can rename root folders to whatever you want. The first character in the :guilabel:`Flags` + column will still indicate what type they are, and so will the icon if you are using one of the + Typicons icon sets. + + +.. _a_proj_roots_del: + +Deleted Documents +----------------- + +Deleted document files will be moved into a special :guilabel:`Trash` root folder. Files in the +trash folder can then be deleted permanently, either individually, or by emptying the trash from the +menu. + +Folders and root folders can only be deleted when they are empty. Recursive deletion is not +supported. + +A document file or a folder can be deleted from the :guilabel:`project` menu, or by pressing +:kbd:`Ctrl`:kbd:`Del`. .. _a_proj_roots_orph: @@ -97,7 +110,7 @@ Files that are discovered in the project folder, but not in the project, will be project tree in a special :guilabel:`Orphaned Items` root folder next time the application is started. These orphaned files will not have most of the meta data preserved, although novelWriter will try to restore the file label it had in the project tree. Other information will have to be set -again, and the files moved back to the correct location in the project. +again, and the files moved back to the correct location in the project tree. .. _a_proj_roots_lock: @@ -107,18 +120,20 @@ Project Lockfile To prevent orphaned files caused by file conflicts when novelWriter projects are synced with file synchronisation tools, a project lockfile is written to the project folder. If you try to open a -project which has such a file, you will be presented with a warning, and some information about -where else novelWriter thinks the project is also open. - -You will be give the option to ignore this warning, and continue opening the project. However, if -multiple instances are in fact editing the same project, you are likely to cause inconsistencies and -create diverging project files, potentially resulting in loss of data and orphaned files. +project which has such a file present, you will be presented with a warning, and some information +about where else novelWriter thinks the project is also open. You will be give the option to ignore +this warning, and continue opening the project. .. note:: If, for some reason, novelWriter crashes, the lock file may remain even if there are no other instances keeping the project open. In such a case it is safe to ignore the lock file warning when re-opening the project. +.. warning:: + If you choose to ignore the warning and continue opening the project, and multiple instances of + the project are in fact open, you are likely to cause inconsistencies and create diverging + project files, potentially resulting in loss of data and orphaned files. + .. _a_proj_roots_dirs: @@ -127,11 +142,10 @@ Using Folders in the Project Tree Folders, aside from root folders, have no structural significance to the project. When novelWriter is processing the files in the novel, like for instance during export, these folders are ignored. -Only the order of the text files themselves matter. +Only the order of the document files themselves matter. The folders are there purely as a way for the user to organise the files in meaningful sections and -to be able to close them in the Project Tree when you're not working on those files, and thus reduce -clutter. +to be able to collapse and hide them in the project tree when you're not working on those files. .. tip:: You can use folders to sort your scene files into chapters. You will then need to add a chapter @@ -155,6 +169,7 @@ details. You can also select whether the file is by default included when building the project. This setting can be overridden in the :guilabel:`Build Novel Project` tool if you wish to include them anyway. +This is covered in the :ref:`a_export_files` section. .. _a_proj_files_counts: @@ -167,7 +182,8 @@ file defined by a header. The word count, and change of words in the current ses in the footer of any document open in the editor, and all stats are shown in the details panel below the project tree for any file selected. -The word counts are not updated in real time, but runs in the background every five seconds. +The word counts are not updated in real time, but runs in the background every five seconds for as +long as the document is being actively edited. A total project word count is displayed in the status bar. The total count depends on the sum of the values in the project tree, which again depend on an up to date index. If the counts seem wrong, a @@ -187,16 +203,18 @@ The :guilabel:`Project Settings` can be accessed from the :guilabel:`Project` me Settings Tab ------------ -The Settings tab holds the project title and author settings. +The :guilabel:`Settings` tab holds the project title and author settings. -Working Title can be set to a different title than the Book Title. The difference between them is -simply that the Working Title is used for the GUI (main window title) and for generating the backup -files. The intention is that the working title should remain unchanged throughput the project, -otherwise the name of exported files and backup files may change too. +The :guilabel:`Working Title` can be set to a different title than the :guilabel:`Book Title`. The +difference between them is simply that the :guilabel:`Working Title` is used for the GUI (main +window title) and for generating the backup files. The intention is that the :guilabel:`Working +Title` should remain unchanged throughput the project, otherwise the name of exported files and +backup files may change too. -The Book Title amd Book Authors settings are currently not used for anything, so setting then is -just for the benefit of the author. Future, planned features will be using them, and they are -exported on some export formats in the Build Novel Project tool. +The :guilabel:`Book Title` and :guilabel:`Book Authors` settings are currently not used for +anything, so setting then is just for the benefit of the author. Future, planned features will be +using them, and they are exported on some export formats in the :guilabel:`Build Novel Project` +tool. Details Tab @@ -207,8 +225,8 @@ project is saved, how may times it has been saved, how many folders and files it many words exist in the entire project. -Status and Importance Tabs ---------------------------- +Status and Importance Tabs +-------------------------- Each file of type "Novel" can be given a status level, signified by a coloured icon and each file of the remaining types can be given an importance level. These are colour coded icons and labels that @@ -244,7 +262,7 @@ Backup ====== An automatic backup system is built into novelWriter. In order to use it, a backup path to where the -backup files are to be stored must to be provided in Preferences. +backup files are to be stored must to be provided in :guilabel:`Preferences`. Backups can be run automatically when a project is closed, which also implies it is run when the application is closed. Backups are date stamped zip files of the entire project folder, and are @@ -252,7 +270,8 @@ stored in a subfolder of the backup path with the same name as the project :guil set in :ref:`a_proj_settings`. The backup feature, when configured, can also be run manually from the :guilabel:`Tools` menu. -It is also possible to dissable automated backup for a given project in :guilabel:`Project Settings`. +It is also possible to dissable automated backup for a given project in :guilabel:`Project +Settings`. .. note:: For the backup to be able to run, the :guilabel:`Working Title` must be set in :guilabel:`Project diff --git a/docs/source/started.rst b/docs/source/started.rst index 92a83d25..549a57ef 100644 --- a/docs/source/started.rst +++ b/docs/source/started.rst @@ -8,6 +8,10 @@ This is a brief guide to how you can get novelWriter running on your computer. T currently supported by the developer. Packages may also be available in other package managers, but those are not managed by me. +As novelWriter matures, more options for how to install it and get it running will be added. At the +present time, the process is best suited for people used to work with Python projects from command +line. + .. _a_started_install: @@ -60,6 +64,8 @@ The following Python packages are required to run novelWriter: * ``pyqt5``, needed for connecting with the Qt5 libraries. * ``lxml``, needed full XML support. +You can of course also install these packages from your operating system's package repository. + .. note:: Sometimes the SVG graphics package for PyQt5 must be installed separately. It is usually called something like ``python3-pyqt5.qtsvg``. @@ -68,8 +74,9 @@ PyQt/Qt should be at least 5.2.1, but ideally 5.10 or higher for nearly all feat Exporting to standard Markdown, for instance, requires PyQt/Qt 5.14. Searching using regular expressions requires 5.3, and for full Unicode support, 5.13. -There are no known minimum for package ``lxml``, but the code was originally written with 4.2, -which is therefore set as the minimum. It may work on lower versions. You have to test it. +There are no known minimum version requirement for package ``lxml``, but the code was originally +written with 4.2, which is therefore set as the minimum. It may work on lower versions. You have to +test it. The spell checking extension is optional, but recommended: @@ -81,8 +88,8 @@ works fine. .. _a_started_depend_docs: -Building Documentation ----------------------- +Building the Documentation +-------------------------- If you installed novelWriter from a package, the documentation should be included. If you're running novelWriter from the source code, a local copy of this documentation can be generated. It requires @@ -107,12 +114,13 @@ from the root source folder. The setup script will copy the generated files into the ``nw/assets/help`` folder, and novelWriter will detect the presence of the files and redirect the menu help entry to open help locally instead -of send the user to the website. +of sending the user to the website. Pressing the :kbd:`F1` key will in any case try to open help +locally first, then send you to the website as a fallback. .. note:: In order for the local version of help to work, the Qt Assistant must be installed on the local computer. If it isn't available, or novelWriter cannot find it, the help feature will fall back - to redirecting to the website. + to redirecting you to the documentation website. .. _a_started_running: @@ -136,7 +144,7 @@ encountered. To list all options, run: python novelWriter.py --help -There are also a couple of install scripts in the assets folder which will assist in setting up +There are also a couple of install scripts in the assets folder which will assist in setting up a launch icon and the novelWriter project file mimetype for Gnome desktops on Linux. Currently, there's one script for Debian and one for Ubuntu. @@ -163,8 +171,8 @@ If successful, the executable will be in the "dist" folder. Additional Instructions for Windows ----------------------------------- -If you don't have Python installed, you can download it from the python.org website. -The installers for Windows are available at https://www.python.org/downloads/windows/ +If you don't have Python installed, you can download it from the python.org website. The installers +for Windows are available at https://www.python.org/downloads/windows/ novelWriter should work with Python 3.6 or higher, and the executable installer is the easiest to install. diff --git a/docs/source/structure.rst b/docs/source/structure.rst index d6ecceae..146f56e7 100644 --- a/docs/source/structure.rst +++ b/docs/source/structure.rst @@ -6,9 +6,8 @@ Novel Structure This section covers the structure of a novel project. -.. note:: - This section concerns files under the Novel type root folder only. There are some restrictions - and features that only applies to these type of files. +This section concerns files under the Novel type root folder only. There are some restrictions +and features that only applies to these type of files. .. _a_struct_heads: @@ -17,37 +16,39 @@ Importance of Headings ====================== Subfolders under root folders have no impact on the structure of the novel itself. The structure is -instead dictated by the heading level of the headers within the text files. Four levels of headings -are supported, signified by the number of hashes preceding the title. See also the :ref:`a_ui_md` -section. +instead dictated by the heading level of the headers within the document files. + +Four levels of headings are supported, signified by the number of hashes preceding the title. See +also the :ref:`a_ui_md` section for more details about the markdown syntax. .. note:: - The header levels are not only important when generating the exported novel file, but they are - also used by the indexer when building the outline tree in the :guilabel:`Outline` tab. Each - heading also starts a new region where new references to tags can be set. + The header levels are not only important when generating the exported novel file, they are also + used by the indexer when building the outline tree in the :guilabel:`Outline` tab. Each heading + also starts a new region where new references to tags can be set. The different header levels are interpreted as specific section types of the novel in the following way: ``# Header1`` - Header level 1 signifies that the text refers to either the novel title or the name of a top + Header level one signifies that the text refers to either the novel title or the name of a top level partition when you want to split the manuscript up into books, parts, or acts. ``## Header2`` - Header level 2 signifies a chapter level partition. Each time you want to start a new chapter, - you must add such a heading. If you chose to split your manuscript up into one file per scene, + Header level two signifies a chapter level partition. Each time you want to start a new chapter, + you must add such a heading. If you choose to split your manuscript up into one file per scene, you need a single chapeter file with just the heading. You can of course also add a synopsis and - tags and references to the chapter file. If you want to open the chaper with a quote, this is + reference keywords to the chapter file. If you want to open the chaper with a quote, this is also where you'd put the text for that. ``### Header3`` - Header level 3 signifies a scene level partition. The title itself can be replaced with a scene - separator or just skipped entirely when you export your manuscript. + Header level three signifies a scene level partition. The title itself can be replaced with a + scene separator or just skipped entirely when you export your manuscript. ``#### Header4`` - Header level 4 signifies a sub-scene level partition (section). These can be useful if you want - to change tag references mid-scene, like if you change the point of view character. You are free - to use sections as you wish, and can filter the titles out of the final manuscript just like with + Header level four signifies a sub-scene level partition, usually called just a section in the + documentation und user interface. These can be useful if you want to change tag references + mid-scene, like if you change the point-of-view character. You are free to use sections as you + wish also in novel files, and can filter the titles out of the final manuscript just like with scene titles. There are multiple options of how to process novel titles when exporting the manuscript. For @@ -60,53 +61,53 @@ a draft manuscript. See the :ref:`a_export` page for more details. Tag References ============== -Each partition, indicated by a heading, can contain references to tags set in the supporting files -of the project. The references are gathered by the indexer and used to generate the outline view on -the :guilabel:`Outline` tab of how the different parts of the novel are connected. +Each text section indicated by a heading of any level, can contain references to tags set in the +supporting files of the project. The references are gathered by the indexer and used to generate the +outline view on the :guilabel:`Outline` tab of how the different parts of the novel are connected. References and tags are also clickable in the document editor and viewer, making it easy to navigate -reference notes while writing. +between reference notes while writing. Clicked links are always opened in the view panel. -References are set as keyword and a list of corresponding tags. The valid keywords are listed below. -The format of a meta line is ``@keyword: value1, [value2] ... [valueN]``. All keywords allow -multiple values. +References are set as a keyword and a list of corresponding tags. The valid keywords are listed +below. The format of a reference line is ``@keyword: value1, [value2] ... [valueN]``. All keywords +allow multiple values. ``@pov`` The point-of-view character for the current section. The target must be a note tag in the - character type root folder. + :guilabel:`Character` type root folder. ``@char`` - Other characters in the current section. The target must be a note tag in a character type root - folder. This should not include the point-of-view character. + Other characters in the current section. The target must be a note tag in a :guilabel:`Character` + type root folder. This should not include the point-of-view character(s). ``@plot`` - The plot or subplot touched by the current section. The target must be a note tag in a plot type - root folder. + The plot or subplot advanced in the current section. The target must be a note tag in a + :guilabel:`Plot` type root folder. ``@time`` - The timelines touched by the current section. The target must be a note tag in a timeline type - root folder. + The timelines touched by the current section. The target must be a note tag in a + :guilabel:`Timeline` type root folder. ``@location`` - The location the current section takes place in. The target must be a note tag in a locations - type root folder. + The location the current section takes place in. The target must be a note tag in a + :guilabel:`Locations` type root folder. ``@object`` - Objects present in the current section. The target must be a note tag in a object type root - folder. + Objects present in the current section. The target must be a note tag in an :guilabel:`Object` + type root folder. ``@entity`` - Entities present in the current section. The target must be a note tag in an entities type root - folder. + Entities present in the current section. The target must be a note tag in an :guilabel:`Entities` + type root folder. ``@custom`` - Custom references in the current section. The target must be a note tag in a custom type root - folder. + Custom references in the current section. The target must be a note tag in a :guilabel:`Custom` + type root folder. The syntax highlighter will alert the user that the tags and references are used correctly, and that the tags referenced exist. -The highlighter may be mistake if the index of defined tags is out of date. If so, press :kbd:`F9` +The highlighter may be mistaken if the index of defined tags is out of date. If so, press :kbd:`F9` to regenerate it, or select :guilabel:`Rebuild Index` from the :guilabel:`Tools` menu. In general, the index for a file is regenerated when a file is saved, so this shouldn't normally be necessary. @@ -122,18 +123,19 @@ and page breaks. The layout for each file is indicated as the last set of charac :guilabel:`Flags` column of the project tree. Not all layout types are actually treated differently, but they also help to indicate what each file -is for in your project. The "Book" layout is a generic novel file layout that in formatting is -identical to "Chapter" and "Scene", but may help to indicate what files do in your project. +is for in your project. The :guilabel:`Book` layout is a generic novel file layout that is formatted +identically to :guilabel:`Chapter` and :guilabel:`Scene` layout files, but may help to indicate what +files do in your project. -You can for instance lay out your project using Book files for each act, and then later split those -into chapter or scene files by using the :guilabel:`Split Document` tool. Scenes can also be -contained within chapter files, but you lose the drag and drop feature that comes with having them -in separate files if you organise them this way. +You can for instance lay out your project using :guilabel:`Book` files for each act, and then later +split those into chapter or scene files by using the :guilabel:`Split Document` tool. Scenes can +also be contained within :guilabel:`Chapter` type files, but you lose the drag and drop feature that +comes with having them in separate files if you organise them this way. -Some layouts *do* have implications on how the project is exported. Files with layout "Title" and -"Partition" have all headings and text centred, while the "Unnumbered" layout disables the automatic -chapter numbering feature for everything contained within it. The latter is convenient for Prologue -and Epilogue type chapters. +Some layouts *do* have implications on how the project is exported. Files with layout +:guilabel:`Title Page` and :guilabel:`Partition` have all headings and text centred, while the +:guilabel:`Unnumbered` layout disables the automatic chapter numbering feature for everything +contained within it. The latter is convenient for Prologue and Epilogue type chapters. All of the above layout formats are only usable in the Novel root folder. Files that are not a part of the novel itself should have the Note layout. These files are not getting any special formatting, @@ -142,42 +144,55 @@ in the project, also in the Novel root folder. Below is an overview of all available layout formats. -Title Page - The title page layout. The title should be formatted as a heading level one. All text is automatically centred on exports. +:guilabel:`Title Page` + The title page layout. The title should be formatted as a heading level one. All text is + automatically centred on exports. -Plain Page - A plain page layout useful for instance for front matter pages. Heading levels are ignored for this layout format, and so are - formatting options like Justify Text. The page is exported with a page break before it. +:guilabel:`Plain Page` + A plain page layout useful for instance for front matter pages. Heading levels are ignored for + this layout format, and so are formatting options like :guilabel:`Justify Text`. The page is + exported with a page break before it. -Book - This is the generic novel file format that in principle can be used for all novel files. Since the internal structure of the - novel is controlled by the heading levels, this file will produce the same result as a collection of Partition, Chapter and Scene - type files. However, it does not provide the functionality of the Unnumbered layout format. +:guilabel:`Book` + This is the generic novel file format that in principle can be used for all novel files. Since + the internal structure of the novel is controlled by the heading levels, this file will produce + the same result as a collection of :guilabel:`Partition`, :guilabel:`Chapter` and + :guilabel:`Scene` type files. However, it does not provide the functionality of the + :guilabel:`Unnumbered` layout format. -Partition - A partition can be used to split the novel into parts. Partition titles are indicated with a level one heading. You can also add - text and meta data to the page. The Partition file layout will in addition force a page break before the heading, and centre all - content on the page. +:guilabel:`Partition` + A partition can be used to split the novel into parts. Partition titles are indicated with a + level one heading. You can also add text and meta data to the page. The :guilabel:`Partition` + file layout will in addition force a page break before the heading, and centre all content on the + page. -Chapter - Signifies the start of a new chapter. If the text itself is contained in scene files, these files should only contain the title, - comments, synopsis, and tag references for characters, plot, etc. The heading for chapters should be level two. If you need an - opening text, like a quote or other leading text before the first scene, this is also where you'd want to add this text. +:guilabel:`Chapter` + Signifies the start of a new chapter. If the text itself is contained in scene files, these files + should only contain the title, comments, synopsis, and tag references for characters, plot, etc. + The heading for chapters should be level two. If you need an opening text, like a quote or other + leading text before the first scene, this is also where you'd want to add this text. -Unnumbered - Same as Chapter, but when exporting the files and automatic chapter numbering is enabled, this file will not receive a number. - This makes the layout suitable for Prologue and Epilogue type chapters. +:guilabel:`Unnumbered` + Same as :guilabel:`Chapter`, but when exporting the files and automatic chapter numbering is + enabled, this file will not increment the chapeter number. It also has a separate title + formatting setting. This makes the layout suitable for Prologue and Epilogue type chapters. -Scene - A scene file. This file should have a header of level three. Further sections can have headers of level four, but there are no - file layout specifically for sections. +:guilabel:`Scene` + A scene file. This file should have a header of level three. Further sections can have headers + of level four, but there are no file layout specifically for sections. -Note - A generic file that is optionally ignored when the novel is exported. Use these files for descriptions of content in the - supporting root folders. Note files can also be added to the Novel root folder if you need to insert notes there. Note file - headers receive no formatting when building the project. They are always exported as-is. +:guilabel:`Note` + A generic file that is optionally ignored when the novel is exported. Use these files for + descriptions of content in the supporting root folders. Note files can also be added to the Novel + root folder if you need to insert notes there. Note file headers receive no special formatting + when building the project. They are always exported as-is. .. note:: - The layout granularity is entirely optional. In principle, you can write the entire novel in a single file with layout "Book". - You can also have a single file per chapter if that suits you better. The :guilabel:`Outline` will show your structure of - chapters and scenes regardless of how your files are organised. + The layout granularity is entirely optional. In principle, you can write the entire novel in a + single file with layout :guilabel:`Book`. You can also have a single file per chapter if that + suits you better. The :guilabel:`Outline` will show your structure of chapters and scenes + regardless of how your files are organised. + +.. tip:: + You can always start writing with a coarse file layout with one or a few files, and then later + use the split tool to automatically split the files into chapter and scene files. diff --git a/docs/source/technical.rst b/docs/source/technical.rst index 7ceb6593..7298f904 100644 --- a/docs/source/technical.rst +++ b/docs/source/technical.rst @@ -12,7 +12,9 @@ How Data is Stored All novelWriter files are written with utf-8 encoding. Since Python automatically converts Unix line endings to Windows line endings on Windows systems, novelWriter does not make any adaptations to the -formatting on Windows systems. This is handled entirely by the Python standard library. +formatting on Windows systems. This is handled entirely by the Python standard library. Python also +handles this fairly well when working on the same files on both Windows and Unix-based operating +systems. Main Project File @@ -32,8 +34,9 @@ this file backed up, either through the built-in backup tool, or your own backup extensions `.json` as JSON files are used to cache the index and various run-time settings and are generally large files that change often. You'd also want to exclude the ``cache`` folder. -The project XML file is indent-formatted, suitable for diff tools and version control, although a -timesetamp is set in the meta section on line 2 each time the file is saved. +The project XML file is indent-formatted, suitable for diff tools and version control since most of +the file will stay static, although a timesetamp is set in the meta section on line 2 each time the +file is saved. Project Documents @@ -47,6 +50,7 @@ and the file extension ``.nwd``. If you wish to find the physical location of a file in the project, you can either look it up in the project XML file, select :guilabel:`Show File Details` from the :guilabel:`Document` menu when having the document open, or look in one of the ``ToC`` files in the root of the project folder. +The ``ToC`` files have a list of all document files in the project and where they are saved. The reason for this cryptic file naming is to avoid issues with file naming conventions and restrictions on different operating systems, and also to have a file name that does not depend on @@ -56,13 +60,13 @@ file label, is only saved in the project XML file. Each document file contains a plain text version of the text from the editor. The file can in principle be edited in any text editor, and is suitable for diffing and version control if so desired. Just make sure the file remains in utf-8 encoding, otherwise unicode chatracters may become -mangled when opened in novelWriter again. +mangled when the file is opened in novelWriter again. The first line of the file contains some meta data starting with the characters ``%%~``. This line is mainly there to restore some information if it is lost from the project file, and the information may be helpful if you do open the file in an external editor as it contains the file label as the last entry. The line can be deleted without any consequences to the rest of the content of the file, -and will be added back next time the file is saved in novelWriter. +and will be added back the next time the file is saved in novelWriter. The File Saving Process @@ -71,5 +75,8 @@ The File Saving Process When saving the project file, or any of the documents, the data is first saved to a temporary file. If successful, the old data file is removed, and the temporary file becomes the new file. This ensures that the previously saved data is only replaced when the new data has been successfully -saved. For the project XML file, a ``.bak`` file is kept which will always contain the previous -version of the file, although when auto-save is enabled, they may have the same content. +saved. + +For the project XML file, a ``.bak`` file is kept which will always contain the previous version of +the file, although when auto-save is enabled, they may have the same content. If the opening of a +project file fails, novelWriter will automatically try to open the ``.bak`` file instead. diff --git a/docs/markdown/style.md b/markdown/style.md similarity index 100% rename from docs/markdown/style.md rename to markdown/style.md