diff --git a/.github/workflows/test_linux.yml b/.github/workflows/test_linux.yml index 4c967dba..b5f744f2 100644 --- a/.github/workflows/test_linux.yml +++ b/.github/workflows/test_linux.yml @@ -41,6 +41,6 @@ jobs: export QT_QPA_PLATFORM=offscreen python -m pytest -v --cov=novelwriter --timeout=60 - name: Upload to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/test_mac.yml b/.github/workflows/test_mac.yml index 0d968ab3..7fde6b28 100644 --- a/.github/workflows/test_mac.yml +++ b/.github/workflows/test_mac.yml @@ -32,6 +32,6 @@ jobs: export QT_QPA_PLATFORM=offscreen python -m pytest -v --cov=novelwriter --timeout=60 - name: Upload to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/test_win.yml b/.github/workflows/test_win.yml index afecc017..1765e40e 100644 --- a/.github/workflows/test_win.yml +++ b/.github/workflows/test_win.yml @@ -28,6 +28,6 @@ jobs: run: | python -m pytest -v --cov=novelwriter --timeout=60 - name: Upload to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index edec4a39..2a2755db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,47 @@ # novelWriter Changelog +## Version 2.6 [2025-01-26] + +### Release Notes + +The 2.6 release fixes a few minor issues from the RC 1 pre-release, and updates most translations. + +See the website for complete [Release Notes](https://novelwriter.io/releases/release_2_6.html). + +### Detailed Changelog + +**Bugfixes** + +* Fixed a bug in the novel selector dropdown used a few places that would clear the selection if + the novel list was refreshed. PR #2179. +* Fixed a bug that would crash the app if the project tree was clicked without any project having + been loaded. The selection model does not exist prior to a project load. Issue #2173. PR #2181. +* Replaced a broken link on the dictionary install tool available on Windows. PR #2189. +* Backported a few code fixes from 2.7 related to freeing memory from closed dialogs and one + instance of a potentially uninitialised variable. PR #2202. +* Fixed word wrapping in the item details panel for status and importance labels with very long + names. PR #2202. +* Fixed the project tree context menu so that it is not opened when right-clicking on an empty area + of the tree widget. PR #2202. + +**Improvements** + +* Chapter headings are now level 1 headings in all manuscript output formats, not just HTML like + before. Most applications that post-processes output will assume chapters are level 1. + Correspondingly, scenes are now level 2 and sections are level 3. Notes headings remain + unchanged. Issue #2205. PR #2206. + +**Internationalisation** + +* German, US English, Italian, Japanese, Norwegian and Polish have been updated in full. Brazilian + Portuguese and Chinese have been partially updated. PR #2207. + +**Documentation** + +* Documentation has been updated with 2.6 features. PR #2210. + +---- + ## Version 2.6 RC 1 [2025-01-09] ### Release Notes diff --git a/docs/source/images/fig_build_settings_headings.png b/docs/source/images/fig_build_settings_headings.png index bba80c30..81093048 100644 Binary files a/docs/source/images/fig_build_settings_headings.png and b/docs/source/images/fig_build_settings_headings.png differ diff --git a/docs/source/images/fig_build_settings_selections.png b/docs/source/images/fig_build_settings_selections.png index c9b4cb91..b92e7a96 100644 Binary files a/docs/source/images/fig_build_settings_selections.png and b/docs/source/images/fig_build_settings_selections.png differ diff --git a/docs/source/images/fig_manuscript_build.png b/docs/source/images/fig_manuscript_build.png index b6a92bfc..24e53670 100644 Binary files a/docs/source/images/fig_manuscript_build.png and b/docs/source/images/fig_manuscript_build.png differ diff --git a/docs/source/images/fig_manuscript_build_outline.png b/docs/source/images/fig_manuscript_build_outline.png index 1ec9ffad..fe857bb1 100644 Binary files a/docs/source/images/fig_manuscript_build_outline.png and b/docs/source/images/fig_manuscript_build_outline.png differ diff --git a/docs/source/images/screenshot_dark.png b/docs/source/images/screenshot_dark.png index 03433a38..dd2cbf84 100644 Binary files a/docs/source/images/screenshot_dark.png and b/docs/source/images/screenshot_dark.png differ diff --git a/docs/source/images/screenshot_light.png b/docs/source/images/screenshot_light.png index bb7e22c7..51ce2f7f 100644 Binary files a/docs/source/images/screenshot_light.png and b/docs/source/images/screenshot_light.png differ diff --git a/docs/source/int_glossary.rst b/docs/source/int_glossary.rst index 7e9bd509..c8777923 100644 --- a/docs/source/int_glossary.rst +++ b/docs/source/int_glossary.rst @@ -13,7 +13,7 @@ Glossary see :ref:`a_proj_roots`. Novel Documents - These are documents that are created under a "Novel" :term:`root folder`. They behave + These are documents that are created under a "Novel" :term:`Root Folder`. They behave differently than :term:`Project Notes`, and have some more restrictions. For instance, they can not exist in folders intended only for project notes. See the :ref:`a_struct` chapter for more details. diff --git a/docs/source/int_howto.rst b/docs/source/int_howto.rst index efb5c4ca..0a393f40 100644 --- a/docs/source/int_howto.rst +++ b/docs/source/int_howto.rst @@ -16,7 +16,7 @@ This is a list of hopefully helpful little tips on how to get the most out of no Managing the Project ==================== -.. dropdown:: Create a Project from a Template +.. dropdown:: How do I create a project from a template? :animate: fade-in-slide-down On the Welcome dialog's **Create New Project** form, you can select to "Prefill Project" from @@ -24,7 +24,7 @@ Managing the Project dedicated to be a template project. If you have a structure and settings you want to use for every new project, this is the best solution. -.. dropdown:: Merge Multiple Documents Into One +.. dropdown:: How do I merge multiple documents into one? :animate: fade-in-slide-down If you need to merge a selection of documents in your project into a single document, you can @@ -35,28 +35,18 @@ Managing the Project In the dialog that pops up, the documents will be in the same order as in the folder, but you can rearrange them here of you wish. See :ref:`a_ui_tree_split_merge` for more details. +.. dropdown:: How do I share status or importance labels between projects? + :animate: fade-in-slide-down + + The status or importance labels you have defined in a project can be exported from **Project + Settings** from the respective configuration tabs. You can then import these labels in another + project. + Layout Tricks ============= -.. dropdown:: Align Paragraphs with Line Breaks - :animate: fade-in-slide-down - - If you have line breaks in you paragraphs, and also want to apply additional text alignment or - indentation, you must apply the alignment tags to the first line. - - For example, this will centre the two lines. - - .. code-block:: md - - >> Line one is centred. << - Line two is also centred. - - This text is not centred, because it is a new paragraph. - - See :ref:`a_fmt_align` for more details. - -.. dropdown:: Create a Simple Table +.. dropdown:: How do I create a table? :animate: fade-in-slide-down The formatting tools available in novelWriter don't allow for complex structures like tables. @@ -69,12 +59,22 @@ Layout Tricks This is most suitable for your notes, as the result in exported documents cannot be guaranteed to match. Especially if you don't use the same font in your manuscript as in the editor. -.. dropdown:: Turn Off First Line Indent for a Paragraph +.. dropdown:: How do I force a line break when line breaks are ignored in my manuscript? + :animate: fade-in-slide-down + + In the **Manuscript Build Settings** you can choose to ignore line breaks within paragraphs in + your text. However, some times you still need those breaks. Like for instance on the cover page + where you may need to add your name and address. In such cases, you can add ``[br]`` where you + want line breaks. These breaks cannot be ignored by any settings and will always be respected. + + .. versionadded:: 2.6 + +.. dropdown:: How do I turn off first line indent for a specific paragraph? :animate: fade-in-slide-down If you have first line indent enabled, but have a specific paragraph that you don't want - indented, you can disable the indentation by explicitly add text alignment. Aligned paragraphs - are not indented. For instance by adding ``<<`` to the end to left-align it, + indented, you can disable the indentation by explicitly adding text alignment. For instance by + adding ``<<`` to the end to left-align it. Aligned paragraphs are not indented. See :ref:`a_fmt_align` for more details. @@ -82,7 +82,7 @@ Layout Tricks Organising Your Text ==================== -.. dropdown:: Add Introductory Text to Chapters +.. dropdown:: How do I add introductory text to chapters? :animate: fade-in-slide-down Sometimes chapters have a short preface, like a brief piece of text or a quote to set the stage @@ -92,7 +92,7 @@ Organising Your Text such text. Separating chapter and scene files also allows you to make scene files child documents of the chapter. -.. dropdown:: Distinguishing Soft and Hard Scene Breaks +.. dropdown:: How do I distinguishing between soft and hard scene breaks? :animate: fade-in-slide-down Depending on your writing style, you may need to separate between soft and hard scene breaks @@ -101,8 +101,8 @@ Organising Your Text In such cases you may want to use different scene headings for hard and soft scene breaks. The **Build Manuscript** tool will let you define a different format for scenes using the ``###`` and ``###!`` heading codes when you generate your manuscript. You can for instance add the - common "``* * *``" for hard breaks and select to soft scene breaks, which will just insert an - empty paragraph in their place. See :ref:`a_manuscript_settings` for more details. + common "``* * *``" for hard breaks and select to hide soft scene breaks, which will just insert + an empty paragraph in their place. See :ref:`a_manuscript_settings` for more details. .. versionadded:: 2.4 @@ -110,7 +110,7 @@ Organising Your Text Other Tools =========== -.. dropdown:: Convert Project to/from yWriter Format +.. dropdown:: How do I convert my project to/from the yWriter format? :animate: fade-in-slide-down There is a tool available that lets you convert a `yWriter `_ diff --git a/docs/source/int_introduction.rst b/docs/source/int_introduction.rst index ca20986e..ab50a55b 100644 --- a/docs/source/int_introduction.rst +++ b/docs/source/int_introduction.rst @@ -39,7 +39,8 @@ your notes about your characters, your world building, and so on. You can at any point split the individual documents by their headings up into multiple documents, or merge multiple documents into a single document. This makes it easier to use variations of the Snowflake_ method for writing. You can start by writing larger structure-focused documents, like -for instance one document per act, and later effortlessly split these up into chapters or scenes. +for instance one document per act, and later effortlessly split these up into individual chapter or +scene documents. .. _a_intro_features: @@ -53,7 +54,7 @@ Below are some key features of novelWriter. The aim of the user interface is to let you focus on writing instead of spending time formatting text. Formatting is therefore limited to a small set of formatting tags for simple things like text emphasis and paragraph alignment. Additional shortcodes are available for special - formatting cases. + formatting cases when you need them. When you really want to focus on just writing, you can switch the editor into **Focus Mode** where only the text editor panel itself is visible, and the project structure view is hidden @@ -78,19 +79,19 @@ Below are some key features of novelWriter. Your main story text lives in the "Novel" root folder. You can have multiple such folders in a project, and rename them to whatever you want. This allows you to keep a series of individual novels with the same characters and world building in the same project, and create manuscripts - for them individually. + for them separately. **Keep track of your story elements** - All notes in your project can be assigned a :term:`tag` that you can then :term:`reference` from - any other document or note. In fact, you can add a new tag under each heading of a note if you - need to be able to reference specific sections of it, or you want to keep several topics in the - same note. + All documents in your project can be assigned a :term:`tag` that you can then :term:`reference` + from any other document or note. In fact, you can add a new tag under each heading of a note if + you need to be able to reference specific sections of it, or you want to keep several topics or + scenes in the same document. **Get an overview of your story** It is not the documents themselves that define the chapters and scenes of your story, but the - headings that separate them. In the **Outline View** on the main window you can see an outline - of all the chapter and scene headings of each novel root folder in your project. If they have - any references in them, like which character is in what chapter and scene, these are listed in + headings within them. In the **Outline View** on the main window you can see an outline of all + the chapter and scene headings of each novel root folder in your project. If they have any + references in them, like which character is in what chapter and scene, these are listed in additional columns. You can also add a synopsis to each chapter or scene, which can be listed here as well. You have @@ -107,9 +108,9 @@ Below are some key features of novelWriter. Whether you want to assemble a manuscript, or export all your notes, or generate an outline of your chapters and scenes with a synopsis included, you can use the **Build Manuscript** tool to do so. The tool lets you select what information you want to include in the generated document, - and how it is formatted. You can send the result to a printer or PDF, or generate an Open - Document file that can be opened by most office type word processors. You can also generate the - result as HTML, or Markdown, both suitable for further conversion to other formats. + and how it is formatted. You can send the result to a printer, or generate an Open Document or + Word Document file that can be opened by most office type word processors. You can also generate + the result as HTML, or Markdown, both suitable for further conversion to other formats. .. _a_intro_screenshots: diff --git a/docs/source/int_overview.rst b/docs/source/int_overview.rst index db450b5c..1f6b6176 100644 --- a/docs/source/int_overview.rst +++ b/docs/source/int_overview.rst @@ -5,10 +5,10 @@ What to Read First ****************** The documentation of novelWriter is quite extensive. There are a lot of features to get used to, -but you don't need all of them to get started. +but you don't need to know all of them to get started. The chapters below labelled "Essential Information" are the ones you need to know to use the -application correctly. By "correctly", it is meant: in a way so novelWriter understands the basic +application correctly. By "correctly" it is meant: in a way so novelWriter understands the basic structure of your text. It collects a lot of information from your text and uses it to display the structure of it in various ways to help you get an overview of your writing. @@ -23,7 +23,7 @@ Using novelWriter ================= In order to use novelWriter effectively, you need to know the basics of how it works. The following -chapters will explain the main principles. It starts with the basics, and gets more detailed as you +chapters will explain the main principles. They start with the basics, and get more detailed as you read on. :ref:`a_breakdown` – Essential Information diff --git a/docs/source/int_started.rst b/docs/source/int_started.rst index d361de2f..fe2502ae 100644 --- a/docs/source/int_started.rst +++ b/docs/source/int_started.rst @@ -4,7 +4,7 @@ Setup and Installation ********************** -.. _Enchant: https://abiword.github.io/enchant/ +.. _Enchant: http://rrthomas.github.io/enchant/ .. _GitHub: https://github.com/vkbo/novelWriter .. _Downloads page: https://download.novelwriter.io .. _PPA: https://launchpad.net/~vkbo/+archive/ubuntu/novelwriter @@ -15,7 +15,7 @@ Setup and Installation .. _AppImage: https://appimage.org/ Ready-made packages and installers for novelWriter are available for all major platforms, including -Linux, Windows and MacOS, from the `Downloads page`_. See below for install additional instructions +Linux, Windows and MacOS, from the `Downloads page`_. See below for additional install instructions for each platform. You can also install novelWriter from the Python Package Index (PyPi_). See :ref:`a_started_pip`. @@ -40,12 +40,6 @@ If you have any issues, try uninstalling the previous version and making a fresh already had a version installed via a different method, you should uninstall that first as having multiple installations has been known to cause problems. -.. note:: - The novelWriter installer is not signed because Microsoft doesn't currently provide a way for - non-profit open source projects to properly sign their installers. The novelWriter project - doesn't have the funding to pay for commercial software signing certificates. You will therefore - see an additional warning about this when you download and run the installer. - .. _a_started_linux: @@ -93,10 +87,6 @@ Then run the update and install commands as for Ubuntu: sudo apt update sudo apt install novelwriter -.. note:: - You may need to use the Ubuntu 20.04 (focal) packages for Debian 11 or earlier. The newer Ubuntu - packages use a different compression algorithm that may not be supported. - .. tip:: If you get an error message like ``gpg: failed to create temporary file`` when importing the key from the Ubuntu keyserver, try creating the folder it fails on, and import the key again: @@ -142,7 +132,7 @@ done by holding down the option key on your keyboard and clicking on the applica .. note:: The novelWriter DMG is not signed because Apple doesn't currently provide a way for non-profit open source projects to properly sign their installers. The novelWriter project doesn't have the - funding to pay for commercial software signing certificates. + funding to pay for a commercial software signing certificate. .. _a_started_pip: diff --git a/docs/source/project_manuscript.rst b/docs/source/project_manuscript.rst index 4f4657bc..18e64441 100644 --- a/docs/source/project_manuscript.rst +++ b/docs/source/project_manuscript.rst @@ -11,6 +11,7 @@ from the text in your project. All of this is handled by the **Manuscript Build* activate it from the sidebar, the **Tools** menu, or by pressing :kbd:`F5`. .. versionadded:: 2.1 + This tool is new for version 2.1. A simpler tool was used for earlier versions. The simpler tool only allows you to define a single set of options for the build, but otherwise had much the same functionality. @@ -58,6 +59,7 @@ Each build definition can be edited by opening it in the **Manuscript Build Sett either by double-clicking or by selecting it and pressing the edit button in the toolbar. .. tip:: + You can keep the **Manuscript Build Settings** dialog open while testing the different options, and just hit the :guilabel:`Apply` button. You can test the result of your settings by pressing the :guilabel:`Preview` button in the main **Manuscript Build** window. When you're happy with @@ -177,21 +179,34 @@ Open Document Format flat version of the document format as a single XML file. Most rich text editors support the former, and only a few the latter. +Microsoft Word Document Format + The Microsoft Word Document format writes a single ``.docx`` file. It uses a fairly basic format + that should be compatible with most rich text editors. + +Portable Document Format (PDF) + The PDF is generated from a copy of the preview document, and should have the same formatting + capabilities as the preview. It's identical to what is produced if you select the print option + and print to PDF. + novelWriter HTML The HTML format writes a single ``.htm`` file with minimal style formatting. The HTML document is suitable for further processing by document conversion tools like Pandoc_, for importing in word processors, or for printing from browser. +Standard/Extended Markdown + The Markdown format comes in both Standard and Extended flavour. The *only* difference in terms + of novelWriter functionality is the support for strike through text, which is not supported by + the Standard flavour. + novelWriter Markup This is simply a concatenation of the project documents selected by the filters into a ``.txt`` file. The documents are stacked together in the order they appear in the project tree, 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/Extended Markdown - The Markdown format comes in both Standard and Extended flavour. The *only* difference in terms - of novelWriter functionality is the support for strike through text, which is not supported by - the Standard flavour. +.. versionadded:: 2.6 + + Microsoft Word and PDF output options were added. Additional Formats @@ -211,13 +226,14 @@ file can be imported directly into a Python dict object or a PHP array, to menti .. _a_manuscript_print: -Print and PDF -============= +Printing +======== The :guilabel:`Print` button allows you to print the content in the preview window. You can either print to one of your system's printers, or select PDF as your output format from the printer icon on the print dialog. .. note:: + The paper format should in all cases default to whatever your system default is. If you want to change it, you have to select it from the **Print Preview** dialog. diff --git a/docs/source/project_overview.rst b/docs/source/project_overview.rst index eb169b47..0fe08327 100644 --- a/docs/source/project_overview.rst +++ b/docs/source/project_overview.rst @@ -115,19 +115,17 @@ Root Folder Types options. Tags in this folder type can be references using the ``@custom`` keyword. The root folders are closely tied to the tags and reference system. Each folder type corresponds to -the categories of tags that can be used to reference them. For more information about the tags -listed, see :ref:`a_references_references`. +categories of tags that can be used to reference them. For more information about the tags listed, +see :ref:`a_references_references`. There is also a ``@mention`` keyword that can be used to reference any tag. See :ref:`a_references_references` for more details. .. note:: + You can rename root folders to whatever you want. However, this doesn't change the reference keyword or what they do. -.. versionadded:: 2.0 - As of version 2.0, you can make multiple root folders of each kind to split up your project. - .. _a_proj_roots_del: @@ -170,11 +168,10 @@ The folders are there purely as a way for you to organise the documents in meani to be able to collapse and hide them in the project tree when you're not working on those documents. -.. versionadded:: 2.0 - As of version 2.0 it is possible to add child documents to other documents. This is particularly - useful when you create chapters and scenes. If you add separate scene documents, you should also - add separate chapter documents, even if they only contain a chapter heading. You can then add - scene documents as child items to the chapters. +In addition to using folders. it is also possible to add child documents to other documents. This +is particularly useful when you create chapters and scenes. If you add separate scene documents, +you should also add separate chapter documents, even if they only contain a chapter heading. You +can then add scene documents as child items to the chapters. .. _a_proj_roots_orphaned: @@ -185,7 +182,7 @@ Recovered Documents If novelWriter crashes or otherwise exits without saving the project state, or if you're using a file synchronisation tool that runs out of sync, there may be files in the project storage folder that aren't tracked in the core project file. These files, when discovered, are recovered and added -back into the project. +back into the project when a project is opened. The discovered files are scanned for metadata that give clues as to where the document may previously have been located in the project. The project loading routine will try to put them back @@ -205,19 +202,21 @@ be named after its internal key, which is a string of characters and numbers. Project Lockfile ---------------- -To prevent lost documents caused by file conflicts when novelWriter projects are synchronised via -file synchronisation tools, a project lockfile is written to the project storage folder when a -project is open. If you try to open a project which already 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 given the option to ignore this warning, and continue opening the project at -your own risk. +To prevent data loss caused by file conflicts when novelWriter projects are synchronised via file +synchronisation tools, a project lockfile is written to the project storage folder when a project +is open. If you try to open a project which already 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 given the option to ignore this warning, and continue opening the project at your own +risk. .. note:: + If, for some reason, novelWriter or your computer 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. You are not likely to @@ -318,9 +317,14 @@ use these to indicate at what stage of completion each novel document is, or how content of a note is to the story. 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. +Both status and importance labels can be exported and imported so you can share them between +projects, or define a standard set for all your writing projects. When you import labels to a +project, they are always added as *new* labels. + See also :ref:`a_ui_tree_status`. .. note:: + The status or importance level currently in use by one or more documents cannot be deleted, but they can be edited. @@ -384,6 +388,7 @@ also export the filtered data to a JSON file or to a CSV file that can be opened application like for instance Libre Office Calc or Excel. .. versionadded:: 1.2 + As of version 1.2, the log file also stores how much of the session time was spent idle. The definition of idle here is that the novelWriter main window loses focus, or the user hasn't made any changes to the currently open document in five minutes. The number of minutes can be altered @@ -400,4 +405,5 @@ If you do not wish to see the timer, you can click on it once to hide it. The ic visible. Click the icon once more to display the timer again. .. versionadded:: 2.6 + As of version 2.6, clicking the timer text or icon in the status bar will toggle its visibility. diff --git a/docs/source/project_references.rst b/docs/source/project_references.rst index 2a0911df..1bea77b2 100644 --- a/docs/source/project_references.rst +++ b/docs/source/project_references.rst @@ -15,8 +15,9 @@ applications. It is therefore not always obvious to new users how this is suppos this chapter hopes to explain in more detail how to use this tags and references system. .. tip:: + If you find the Tags and Reference system difficult to follow just from reading this chapter, - you can create a new project in the **Welcome** dialog's New project form and select "Create an + you can create a new project in the **Welcome** dialog's New project form and select "Create an example project" from the "Pre-fill project" option. The example project contains several examples of tags and references. @@ -39,7 +40,8 @@ documents up using the document split feature. See :ref:`a_ui_tree_split_merge` You can do the same with your notes. You can treat each heading as an independent element of your notes that can be referenced somewhere else. That way you can collect all your minor or background characters in a single note file, and still be able to reference them individually by separating -them with headings and assigning each a tag. +them with headings and assigning each a tag. Or, you can lay out your plot in a single document and +have a tag for each plot stage under separate headings. .. _a_references_tags: @@ -82,13 +84,20 @@ to the manuscript, or an outline document. If you want to compile a single docum notes, you can do this from the **Manuscript Build** tool. .. versionadded:: 2.2 + Tags are no longer case sensitive. The tags are by default displayed with the capitalisation you use when defining the tag, but you don't have to use the same capitalisation when referencing it later. .. versionadded:: 2.3 + Tags can have an optional display name for manuscript builds. +.. versionadded:: 2.6 + + You can now add tags also to Novel Documents. These can be used for cross-referencing between + chapters and scenes, and also from notes if desired. + Example of a heading with a tag for a character of the story: .. code-block:: md @@ -168,15 +177,21 @@ reference keywords allow multiple values. it. This can be useful when checking for consistency later. Any tag in any root note folder can be listed under mentions. +``@story`` + This is used when referencing a Novel Document, like a scene or chapter, from somewhere else in + your project. + The syntax highlighter will alert the user that the tags and references are used correctly, and that the tags referenced exist. .. note:: + 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 **Rebuild Index** from the **Tools** menu. In general, the index for a document is regenerated when it is saved, so this shouldn't normally be necessary. .. tip:: + If you add a reference in the editor to a tag that doesn't yet exist, you can right-click it and select **Create Note for Tag**. This will generate a new project note automatically with the new tag defined. In order for this to be possible, a root folder for that category of references @@ -192,6 +207,7 @@ meaningful if you want to be able to click-navigate between them, or of course i highlight that two notes are related. .. tip:: + If you cross-reference between notes and export your project as an HTML document using the **Manuscript Build** tool, the cross-references become clickable links in the exported HTML document as well. diff --git a/docs/source/project_structure.rst b/docs/source/project_structure.rst index e344ecd8..ea78cc4a 100644 --- a/docs/source/project_structure.rst +++ b/docs/source/project_structure.rst @@ -11,8 +11,8 @@ Active novel documents can only live in a **Novel** type root folder. You can al **Archive** and **Trash** of course, where they become inactive. The project tree can distinguish between the different heading levels of the novel documents using -coloured icons, and optionally add emphasis on the label, set in **Preferences** for easier -identification. +coloured icons, and optionally add emphasis on the label. Emphasis can be enabled in +**Preferences**. .. _a_struct_heads: @@ -27,6 +27,7 @@ Four levels of headings are supported, signified by the number of hashes (``#``) title. See also the :ref:`a_fmt` section for more details about the markup syntax. .. note:: + The heading levels are not only important when generating the manuscript, they are also used by the indexer when building the outline tree in the **Outline View** as well as in the **Novel Tree**. Each heading also starts a new region where new Tags and References can be defined. See @@ -60,16 +61,25 @@ The syntax for the four basic heading types, and the three special types, is lis mid-scene, like if you change the point-of-view character. You are free to use sections as you wish, and you can filter them out of the final manuscript. -Page breaks can be automatically added before partition, chapter and scene headings from the -**Manuscript Build** tool when you build your project to a format that supports page breaks. If you -want page breaks in other places, you have to specify them manually. See :ref:`a_fmt_break`. +Page breaks can be automatically added before titles, partition, chapter and scene headings from +the **Manuscript Build** tool when you build your project to a format that supports page breaks. If +you want page breaks in other places, you have to specify them manually. See :ref:`a_fmt_break`. .. tip:: + There are multiple options of how to process novel headings when building the manuscript. For instance, chapter numbers can be applied automatically, and so can scene numbers if you want them in a draft manuscript. You can also insert point-of-view character names in chapter titles. See the :ref:`a_manuscript` page for more details. +.. note:: + + As of 2.6, the heading levels internally in novelWriter do not map directly to heading levels in + manuscript documents. In manuscript documents, chapters are considered the top level heading, + and partitions become plain text paragraphs with a larger font. + + .. versionadded:: 2.6 + .. _a_struct_heads_title: @@ -77,15 +87,28 @@ Novel Title and Front Matter ---------------------------- It is recommended that you add a document at the very top of each **Novel** root folder with the -novel title as the first line. You should modify the level 1 heading format code with an ``!`` in -order to render it as a document title that is excluded from any automatic Table of Content in a -manuscript build document, like so: +novel title in it. You should modify the level 1 heading format code with an ``!`` in order to +render it as a document title that is excluded from any automatic Table of Content in a manuscript +build document. + +You can also add the author name and address above this if this is required by the manuscript +format you use, and additional space added before the title. + +This is the title page novelWriter generates automatically for a new project as of version 2.6: .. code-block:: md + Jane Doe[br] + Address 1[br] + Address 2 << + + [vspace:5] + #! My Novel - >> _by Jane Doe_ << + >> **By Jane Doe** << + + >> Word Count: [field:textWords] << The title is by default centred on the page. You can add more text to the page as you wish, like for instance the author's name and details. diff --git a/docs/source/usage_breakdown.rst b/docs/source/usage_breakdown.rst index 814a445b..d4bc5fad 100644 --- a/docs/source/usage_breakdown.rst +++ b/docs/source/usage_breakdown.rst @@ -7,6 +7,8 @@ How it Works .. _Fusion: https://doc.qt.io/qt-6/gallery.html .. _Pandoc: https://pandoc.org/ .. _Open Document: https://en.wikipedia.org/wiki/OpenDocument +.. _Office Open XML: https://en.wikipedia.org/wiki/Office_Open_XML +.. _version control: https://en.wikipedia.org/wiki/Version_control The main features of novelWriter are listed in the :ref:`a_intro` chapter. In this chapter, we go into some more details on how they are implemented. This is intended as an overview. Later on in @@ -42,9 +44,10 @@ views you can switch between, a quick link to the **Build Manuscript** tool, and project-related tools and quick access to settings at the bottom. .. versionadded:: 2.2 + A number of new formatting options were added in 2.2 to allow for some special formatting cases. At the same time, a small formatting toolbar was added to the editor. It is hidden by default, - but can be opened by pressing the button in the top right corner of the editor header. + but can be opened by pressing the button in the top--left corner of the editor header. Project Tree and Editor View @@ -54,9 +57,9 @@ Project Tree and Editor View A screenshot of the Project Tree and Editor View. -When the application is in **Project Tree View** mode, the main work area of the main window is -split in two, or optionally three, panels. The left-most panel contains the project tree and all -the documents in your project. The second panel is the document editor. +When the application is in **Project Tree View** mode, the work area of the main window is split in +two, or optionally three, panels. The left-most panel contains the project tree and all the +documents in your project. The second panel is the document editor. An optional third panel on the right side contains a document viewer which can view any document in your project independently of what is open in the document editor. This panel is not intended as a @@ -68,6 +71,14 @@ The editor also has a **Focus Mode** you can toggle either from the menu, from t editor's header, or by pressing :kbd:`F8`. When **Focus Mode** is enabled, all the user interface elements other than the document editor itself are hidden away. +The project tree will highlight with a different background colour the document that is currently +open in the editor. + +.. versionadded:: 2.6 + + You can now drag and drop documents from the project tree onto the editor or viewer panels to + open them. + Novel View and Editor View -------------------------- @@ -110,21 +121,20 @@ Novel Outline View A screenshot of the Novel Outline View. -When the application is in **Novel Outline View** mode, the tree, editor and viewer will be -replaced by a large table that shows the entire novel structure with all the tags and references -listed. Pretty much all collected meta data is available here in different columns. +When the application is in **Novel Outline View** mode, the tree, editor and viewer are replaced by +a large table that shows the entire novel structure with all the tags and references listed. Pretty +much all collected meta data is available here in different columns. You can select which novel root folder to display from the dropdown box, and you can select which columns to show or hide from the menu button. You can also rearrange the columns by drag and drop. -The app will remember your column order and size between sessions, and for each individual project. +The app remembers your column order and sizes between sessions, and for each individual project. Colour Themes ------------- -By default, novelWriter will use the colour theme provided by the Qt library, which is determined -by the Fusion_ style setting. You can also choose between a standard dark and light theme that have -neutral colours from **Preferences**. +By default, novelWriter uses a light colour theme. You can also choose between a standard dark +theme that have neutral colours, or a series of other included themes, from **Preferences**. If you wish, you *can* create your own colour themes, and even have them added to the application. See :ref:`a_custom_theme` for more details. @@ -134,6 +144,7 @@ separate colour selectable from the "Document colour theme" setting in **Prefere separated because there are a lot more options to choose from for the editor and viewer. .. note:: + If you switch between light and dark mode on the GUI, you should also switch editor theme to match, otherwise icons may be hard to see in the editor and viewer. @@ -155,11 +166,11 @@ If the project or novel view does not have focus, pressing :kbd:`Ctrl+T` switche whichever of the two is visible. If one of them already has focus, the key press will switch between them instead. -Likewise, pressing :kbd:`Ctrl+E` with switch focus to the document editor or viewer, or if any of +Likewise, pressing :kbd:`Ctrl+E` will switch focus to the document editor or viewer, or if any of them already have focus, it will switch focus between them, -These two shortcuts makes it possible to jump between all these GUI elements without having to -reach for the mouse or touchpad. +These two shortcuts make it possible to jump between all these GUI elements without having to reach +for the mouse or touchpad. .. _a_breakdown_project: @@ -167,7 +178,7 @@ reach for the mouse or touchpad. Project Layout ============== -This is a brief introduction to how you structure your writing projects. All of this will be +This is a brief introduction to how you should structure your writing projects. All of this will be covered in more detail later. The main point of novelWriter is that you are free to organise your project documents as you wish @@ -193,12 +204,19 @@ This heading level structure is only taken into account for :term:`novel documen :term:`project notes`, the heading levels have no structural meaning, and you are free to use them however you want. See :ref:`a_struct` and :ref:`a_references` for more details. -.. versionadded:: 2.0 +.. tip:: + You can add documents as child items of other documents. This is often more useful than adding folders, since you anyway may want to have the chapter heading in a separate document from your individual scene documents so that you can rearrange scene documents freely without affecting chapter placement. +.. versionadded:: 2.6 + + The heading levels for partitions, chapters and scenes only apply within novelWriter. When you + generate your manuscript, chapters are considered as the topmost heading level, with scenes + below it. Partitions are inserted as text elements in most formats. + .. _a_breakdown_export: @@ -206,22 +224,24 @@ Building a Manuscript ===================== The project can at any time be assembled into a range of different formats through the -**Build Manuscript** tool. Natively, novelWriter supports `Open Document`_, HTML5, and -various flavours of Markdown. +**Build Manuscript** tool. Natively, novelWriter supports `Open Document`_, Microsoft Word Document +(known as `Office Open XML`_), HTML5, and various flavours of Markdown. You can also generate a PDF +document. The HTML5 format is suitable for conversion by a number of other tools like Pandoc_, or for -importing into word processors if the Open Document format isn't suitable. The Open Document format -is supported by most office type applications. In addition, printing is also possible. Print to PDF -is available from the print dialog. +importing into word processors if the Open Document or Word Document format isn't suitable. The +Open Document format is supported by most office type applications, so is the Word Document format. +In addition, printing is also possible. For advanced processing, you can export the content of the project to a JSON file. This is useful if you want to write your own custom processing script in for instance Python, as the entire novel can be read into a Python dictionary with a couple of lines of code. The JSON file can be populated -with either HTML formatted text, or with the raw text as typed into the novel documents. +with either HTML formatted text, or with the raw text as typed it into the novel documents. See :ref:`a_manuscript` for more details. .. versionadded:: 2.1 + You can now define multiple build definitions in the **Build Manuscript** tool. This allows you to define specific settings for various types of draft documents, outline documents, and manuscript formats. See :ref:`a_manuscript` for more details. @@ -234,8 +254,8 @@ Project Storage The files of a novelWriter project are stored in a dedicated project folder. The project structure is kept in a file at the root of this folder called ``nwProject.nwx``. All the document files and -associated meta data is stored in other folders below the project folder. For more technical -details about what all the files mean and how they're organised, see the :ref:`a_storage` section. +associated meta data are stored in other folders below the project folder. For a more technical +description of what all the files mean and how they're organised, see the :ref:`a_storage` section. This way of storing data was chosen for several reasons. @@ -247,17 +267,19 @@ crashes. Secondly, having multiple small files means it is very easy to synchronise them between computers with standard file synchronisation tools. -Thirdly, if you use version control software to track the changes to your project, the file formats -used for the files are well suited. All the JSON documents have line breaks and indents as well, -which makes it easier to track them with version control software. +Thirdly, if you use `version control`_ software to track the changes to your project, the file +formats used for the files are well suited. All the JSON documents have line breaks and indents as +well, which makes it easier to track them with version control software. .. note:: + Since novelWriter has to keep track of a bunch of files and folders when a project is open, it may not run well on some virtual file systems. A file or folder must be accessible with exactly the path it was saved or created with. An example where this is not the case is the way Google Drive is mapped on Linux Gnome desktops using gvfs/gio. .. caution:: + You should not add additional files to the project folder yourself. Nor should you, as a rule, manually edit files within it. If you really must manually edit the text files, e.g. with some automated task you want to perform, you need to rebuild the :term:`Project Index` when you open diff --git a/docs/source/usage_format.rst b/docs/source/usage_format.rst index b87ab3a9..c57a10fb 100644 --- a/docs/source/usage_format.rst +++ b/docs/source/usage_format.rst @@ -14,6 +14,10 @@ In addition to formatting codes, novelWriter allows for comments, a synopsis tag keyword and value sets used for :term:`tags` and :term:`references`. There are also some codes that apply to whole paragraphs. See :ref:`a_fmt_text` for more details. +URLs should also be highlighted and become clickable. However, only URLs starting with "http" or +"https" are recognised. In the editor, you must hold down the :kbd:`Ctrl` key when clicking a URL +to follow it. + .. _a_fmt_hlight: @@ -76,14 +80,13 @@ For headings level one through three, adding a ``!`` modifies the meaning of the ``#! Title Text`` This tells the build tool that the level one heading is intended to be used for the novel or - notes folder's main title, like for instance on the front page. When building the manuscript, - this will use a different styling and will exclude the title from, for instance, a Table of - Contents in Libre Office. + notes folder's main title, like for instance the novel title on the cover page. When building + the manuscript, this will use a different styling. ``##! Title Text`` This tells the build tool to not assign a chapter number to this chapter title if automatic - chapter numbers are being used. Such titles are useful for a prologue for instance. See - :ref:`a_struct_heads_unnum` for more details. + chapter numbers are being used. Such titles are useful for prologues and epilogues for instance. + See :ref:`a_struct_heads_unnum` for more details. ``###! Title Text`` This is an alternative scene heading that can be formatted differently in the **Manuscript @@ -92,6 +95,7 @@ For headings level one through three, adding a ``!`` modifies the meaning of the details. .. note:: + The space after the ``#`` or ``!`` character is mandatory. The syntax highlighter will change colour and font size when the heading is correctly formatted. @@ -118,10 +122,18 @@ Non-breaking spaces are highlighted by the syntax highlighter with an alternate background, depending on the selected theme. .. tip:: + Non-breaking spaces are for instance the correct type of space to separate a number from its unit. Generally, non-breaking spaces are used to prevent line wrapping algorithms from adding line breaks where they shouldn't. +.. note:: + + You should not manually apply text indentation in your paragraphs in the editor. These can be + added automatically in the **Manuscript Build** tool if you want to have them in the manuscript. + Each new paragraph should be separated from the previous content by an empty line and with no + indentation. + .. _a_fmt_emph: @@ -160,6 +172,7 @@ In addition, the following rules apply: allow for formatting, and any formatting markup will be rendered as-is. .. tip:: + novelWriter supports standard escape syntax for the emphasis markup characters in case the editor misunderstands your intended usage of them. That is, ``\*``, ``\_`` and ``\~`` will generate a plain ``*``, ``_`` and ``~``, respectively, without interpreting them as part of the @@ -216,8 +229,8 @@ In addition to the above formatting features, novelWriter also allows for commen The text of a comment is always ignored by the word counter. The text can also be filtered out when building the manuscript or viewing the document. -The first word of a comment, followed by a colon, can be one of a small set of modifiers that -indicates the comment is intended for a specific purpose. For instance, if the comment starts with +The first word of a comment, followed by a colon, can be one of a set of modifiers that indicates +the comment is intended for a specific purpose. For instance, if the comment starts with ``Synopsis:``, the comment is treated in a special manner and will show up in the :ref:`a_ui_outline` in a dedicated column. 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. @@ -246,6 +259,7 @@ The different styles of comments are as follows: use them in your text. .. note:: + Only one comment can be flagged as a synopsis or short comment for each heading. If multiple comments are flagged as synopsis or short comments, the last one will be used and the rest ignored. @@ -365,6 +379,7 @@ Examples: "``> Left/right indented text <``", "The text has both margins increased." .. note:: + The text editor will not show the alignment and indentation live. But the viewer will show them when you open the document there. It will of course also be reflected in the document generated from the manuscript build tool as long as the format supports paragraph alignment. @@ -373,18 +388,15 @@ Examples: Alignment with Line Breaks -------------------------- -If you have line breaks in the paragraph, like for instance when you are writing verses, the -alignment markers must be applied to the first line. Markers on the other lines are ignored. The -markers for the first line are used for all the other lines. - -For the following text, all lines will be centred, not just the first: +If you have line breaks in the paragraph, the markers for all the lines are combined and used for +the entire paragraph. For the following text, all lines will be centred: .. code-block:: md - >> I am the very model of a modern Major-General << + >> I am the very model of a modern Major-General I've information vegetable, animal, and mineral I know the kings of England, and I quote the fights historical - From Marathon to Waterloo, in order categorical + From Marathon to Waterloo, in order categorical << Alignment with First Line Indent @@ -424,6 +436,7 @@ If you need to add a page break somewhere, put the text ``[new page]`` on a line the text you wish to start on a new page. .. note:: + The page break code is applied to the text that follows it. It adds a "page break before" mark to the text when exporting to HTML or Open Document. This means that a ``[new page]`` which has no text following it, it will not result in a page break. @@ -442,3 +455,16 @@ the text you wish to start on a new page. [new page] This text will start on a new page if the build format has pages. + + +.. _a_fmt_stats: + +Inserting Word Counts in the Text +================================= + +The cover page of a manuscript normally has the word count stated on it. Any statistics value +collected by novelWriter can be inserted into any document. You can generate the code for this from +the **Insert** menu under **Word/Character Count**. + +The value inserted is the actual count for your entire manuscript, so it is not populated until you +run the **Manuscript Build** tool. Until then they will show up as "0" in the viewer panel. diff --git a/docs/source/usage_project.rst b/docs/source/usage_project.rst index 7a1a8948..0a19c7bd 100644 --- a/docs/source/usage_project.rst +++ b/docs/source/usage_project.rst @@ -63,6 +63,7 @@ currently selected item. This panel also includes the latest paragraph and chara addition to the word count. .. tip:: + If you want to set the label of a document to be the same as a header within it, you can right-click a header in the document when it is open in the editor and select :guilabel:`Set as Document Name` from the context menu. @@ -140,23 +141,19 @@ lives in. If it's in a **Novel** type folder, it uses the "Status" flag, otherwi Project Tree Drag & Drop ------------------------ -The project tree allows drag & drop to a certain extent to allow you to reorder your documents and -folders. Moving a document in the project tree will affect the text's position when you assemble -your manuscript in the **Manuscript Build** tool. +The project tree allows drag & drop to allow you to reorder your documents and folders. Moving a +document in the project tree will affect the text's position when you assemble your manuscript in +the **Manuscript Build** tool. .. versionadded:: 2.2 + You can now select multiple items in the project tree by holding down the :kbd:`Ctrl` or :kbd:`Shift` key while selecting items. -You can drag and drop documents and regular folders, but not root folders. If you select multiple -items, they can only be dragged and dropped if they are siblings. That is, they have the same -parent item in the project. This limitation is due to the way drag and drop is implemented in the -user interface framework novelWriter is built upon. - Documents and their folders can be rearranged freely within their root folders. If you move a **Novel Document** out of a **Novel** folder, it will be converted to a **Project Note**. Notes can be moved freely between all root folders, but keep in mind that if you move a note into a **Novel** -type root folder, its "Importance" setting will be switched with a "Status" setting. See +type root folder, its "Importance" setting will be replaced by a "Status" setting. See :ref:`a_ui_tree_status`. The old value will not be overwritten though, and should be restored if you move it back at some point. @@ -164,6 +161,10 @@ Root folders in the project tree cannot be dragged and dropped at all. If you wa you can move them up or down with respect to each other from the arrow buttons at the top of the project tree, or by pressing :kbd:`Ctrl+Up` or :kbd:`Ctrl+Down` when they are selected. +.. tip:: + + You can drag and drop documents onto the editor or viewer panel to open them. + .. _a_ui_tree_novel: @@ -180,6 +181,7 @@ the view in the **Outline View**. It is convenient when you want to browse the s story itself rather than the document files. .. note:: + You cannot reorganise the entries in the novel view, or add any new documents, as that would imply restructuring the content of the document files themselves. Any such editing must be done in the project tree. However, you can add new headings to existing documents, or change @@ -208,6 +210,7 @@ You can select which novel folder to display from the dropdown menu. You can opt to show a combination of all novel folders. .. note:: + Since the internal structure of the novel does not depend directly on the folder and document structure of the project tree, this view will not necessarily look the same, depending on how you choose to organise your documents. See the :ref:`a_struct` page for more details. @@ -218,6 +221,7 @@ the menu button in the toolbar. The order of the columns can also be rearranged a different position. You column settings are saved between sessions on a per-project basis. .. note:: + The **Title** column cannot be disabled or moved. The information viewed in the outline is based on the :term:`project index`. While novelWriter does diff --git a/docs/source/usage_writing.rst b/docs/source/usage_writing.rst index a82bdd06..245cd631 100644 --- a/docs/source/usage_writing.rst +++ b/docs/source/usage_writing.rst @@ -18,10 +18,10 @@ Editing a Document A screenshot of the Document Editor panel. -To edit a document, double-click it 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 -Markdown-like syntax for some features, and a novelWriter-specific syntax for others. The syntax -format is described in the :ref:`a_fmt` chapter. +To edit a document, double-click it in the project tree, press the :kbd:`Return` key while having +it selected, or drag and drop it onto the editor panel. This will open the document in the document +editor. The editor uses a Markdown-like syntax for some features, and a novelWriter-specific syntax +for others. The syntax format is described in the :ref:`a_fmt` chapter. The editor has a maximise button, which toggles the **Focus Mode**, and a close button in the top--right corner. On the top--left side you will find a tools button that opens a toolbar with a @@ -33,6 +33,7 @@ header at the top of the edit or view panel. Optionally, the full project path t be shown. This can be set in **Preferences**. .. tip:: + Clicking on the document title bar will select the document in the project tree and thus reveal its location there, making it easier to find in a large project. @@ -79,14 +80,14 @@ Viewing a Document A screenshot of the Document Viewer panel. 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+R`, or select **View Document** in the menu or context -menu. If you have a middle mouse button, middle-clicking on the document will also open it in the -viewer. +viewer. To view a document, press :kbd:`Ctrl+R`, select **View Document** in the menu or context +menu, or drag and drop the document onto the viewer panel. If you have a middle mouse button, +middle-clicking on the document will also open it in the viewer. The document viewed does not have to be the same document as the one currently being edited. -However, If you *are* viewing the same document, pressing :kbd:`Ctrl+R` again will update the -document with your latest changes. You can also press the reload button in the top--right corner of -the viewer panel, next to the close button, to achieve the same thing. +However, If you *are* viewing the same document, pressing :kbd:`Ctrl+R` from the editor will update +the document with your latest changes. You can also press the reload button in the top--right +corner of the viewer panel, next to the close button, to achieve the same thing. In the viewer :term:`references` become clickable links. Clicking them will replace the content of the viewer with the content of the document the reference points to. @@ -95,7 +96,7 @@ The document viewer keeps a history of viewed documents, which you can navigate buttons in the top--left corner of the viewer. If your mouse has backward and forward navigation buttons, these can be used as well. They work just like the backward and forward features in a browser. The left-most button is a dropdown menu for quickly navigation between headings in the -document. +document. The edit button on the right will open the viewed document in the editor. At the bottom of the view panel there is a **References** panel. (If it is hidden, click the button on the left side of the footer area to reveal it.) This panel contains a References tab with links @@ -104,12 +105,14 @@ you have created root folders and tags for various story elements like character these will appear as additional tabs in this panel. .. note:: + The **References** panel relies on an up-to-date :term:`index` of the project. The index is maintained automatically. However, if anything is missing, or seems wrong, the index can always be rebuilt by selecting **Rebuild Index** from the **Tools** menu, or by pressing :kbd:`F9`. .. versionadded:: 2.2 + The reference panel was redesigned and the additional tabs added. @@ -137,6 +140,7 @@ when the replacement is made. That is, it will try to keep the word upper, lower match the word being replaced. .. seealso:: + For more information on the capabilities of the Regular Expression option, see the Qt documentation for the `QRegularExpression `_ class. @@ -151,6 +155,7 @@ A few auto-replace features are supported by the editor. You can control every a auto-replace feature from **Preferences**. You can also disable this feature entirely if you wish. .. tip:: + If you don't like auto-replacement, all symbols inserted by this feature are also available in the :guilabel:`Insert` menu, and via :ref:`a_kb_ins`. You may also be using a `Compose Key`_ setup, which means you may not need the auto-replace feature at all. @@ -162,6 +167,22 @@ always accurate. Especially distinguishing between closing single quote and apos tricky for languages that use the same symbol for these, like English does. .. tip:: + If the auto-replace feature changes a symbol when you did not want it to change, pressing :kbd:`Ctrl+Z` once after the auto-replacement will undo it without undoing the character you typed before it. + + +.. _a_ui_edit_dialogue: + +Dialogue Highlighting +===================== + +The editor and viewer can optionally highlight character dialogue in your novel documents. By +default, this feature is set to display text in double quotes as dialogue. In **Preferences**, you +can change this to support various other dialogue markers that instead uses dashes to indicate +dialogue, like those used in Spanish, Portuguese, Polish, etc. + +Various styles are supported by changing the settings under "Text Highlighting" in **Preferences**. + +It is also possible to include the dialogue highlighting in your manuscripts. diff --git a/i18n/nw_base.ts b/i18n/nw_base.ts index eadcf053..fc052990 100644 --- a/i18n/nw_base.ts +++ b/i18n/nw_base.ts @@ -178,68 +178,103 @@ Text Margins + + + Title and Partition + + - Page Layout + Heading 1 and Chapter - Unit + Heading 2 and Scene - Page Size + Heading 3 and Section - Page Margins + Heading 4 + + + + + Text Paragraph - Document Style - - - - - Page Header + Scene Separator - Page Counter Offset + Page Layout - Add Colours to Headings + Unit - Increase Size of Headings + Page Size - Bold Headings + Page Margins - HTML Options + Document Style - Add CSS Styles + Page Header + Page Counter Offset + + + + + Add Colours to Headings + + + + + Increase Size of Headings + + + + + Bold Headings + + + + + HTML Options + + + + + Add CSS Styles + + + + Preserve Tab Characters @@ -1363,12 +1398,12 @@ - + Class - + Usage @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders @@ -4896,121 +4931,121 @@ _TreeContextMenu - + Empty Trash - + Rename - + Duplicate - + Open Document - + View Document - + Create New ... - + Rename to Heading - + Set Active to ... - + Toggle Active - + Set Status to ... - - + + Manage Labels ... - + Set Importance to ... - + Transform ... - - - - + + + + Convert to {0} - + Merge Child Items into Self - + Merge Child Items into New - + Merge Documents in Folder - + Split Document by Headings - + Expand All - + Collapse All - + Delete Permanently - + Move to Trash - + Do you want to convert the folder to a {0}? This action cannot be reversed. @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template diff --git a/i18n/nw_de_DE.ts b/i18n/nw_de_DE.ts index 154485e7..4b48f924 100644 --- a/i18n/nw_de_DE.ts +++ b/i18n/nw_de_DE.ts @@ -61,22 +61,22 @@ Title Styling - + Titel Partition Styling - + Teil Chapter Styling - + Kapitel Scene Styling - + Szene @@ -156,7 +156,7 @@ First Line Indent - Erste Zeile einrücken + Zeileneinzug @@ -176,70 +176,105 @@ Text Margins - + Textabstände + + + + Title and Partition + Titel und Teil + Heading 1 and Chapter + Überschrift 1 und Kapitel + + + + Heading 2 and Scene + Überschrift 2 und Szene + + + + Heading 3 and Section + Überschrift 3 und Abschnitt + + + + Heading 4 + Überschrift 4 + + + + Text Paragraph + Textabsatz + + + + Scene Separator + Szenentrenner + + + Page Layout Seitenlayout - + Unit Einheit - + Page Size Seitenformat - + Page Margins - + Seitenränder - + Document Style - Darstellung von Dokumenten + Dokument - + Page Header Kopfzeile - + Page Counter Offset Seitenzahl-Offset - + Add Colours to Headings - + Überschriften farbig - + Increase Size of Headings - + Überschriften größer - + Bold Headings - + Überschriften fett - + HTML Options - + HTML-Einstellungen - + Add CSS Styles CSS hinzufügen - + Preserve Tab Characters Tabs behalten @@ -328,32 +363,32 @@ Heading 1 (Partition) - Überschrift 1 (Teil) + Überschrift 1 (Teil) Heading 2 (Chapter) - Überschrift 2 (Kapitel) + Überschrift 2 (Kapitel) Heading 3 (Scene) - Überschrift 3 (Szene) + Überschrift 3 (Szene) Heading 4 (Section) - Überschrift 4 (Abschnitt) + Überschrift 4 (Abschnitt) Text Paragraph - + Textabsatz Scene Separator - + Szenentrenner @@ -365,43 +400,43 @@ Novel - Roman + Roman Plot - Handlung + Handlung Characters - Charaktere + Charaktere Locations - Schauplätze + Schauplätze Timeline - Zeitleiste + Zeitleiste Objects - Objekte + Objekte Entities - Organisationen + Organisationen @@ -413,17 +448,17 @@ Archive - Archiv + Archiv Templates - Vorlagen + Vorlagen Trash - Papierkorb + Papierkorb @@ -470,22 +505,22 @@ Active - Aktiv + Aktiv Inactive - Inaktiv + Inaktiv Tag - Schlagwort + Schlagwort Point of View - Perspektive + Perspektive @@ -496,12 +531,12 @@ Story - + Geschichte Mentions - + Erwähnungen @@ -521,7 +556,7 @@ Status - Status + Status @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Microsoft-Word-Dokument (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + Portable Document Format (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - Allgemein + Allgemein @@ -808,7 +843,7 @@ Formatting - + Formatierung @@ -1033,7 +1068,7 @@ Open URL - + URL öffnen @@ -1088,7 +1123,7 @@ Ignore Word - + Wort ignorieren @@ -1283,7 +1318,7 @@ Open in Editor - + Im Editor öffnen @@ -1363,12 +1398,12 @@ Status - + Class Gruppe - + Usage Kategorie @@ -1845,12 +1880,12 @@ Word/Character Count - + Wort-/Seitenanzahl Breaks and Vertical Space - + Umbrüche und Leerräume @@ -1860,7 +1895,7 @@ Forced Line Break - + Harter Zeilenumbruch @@ -2060,7 +2095,7 @@ &Tools - E&xtras + &Werkzeuge @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + Ausgewählten Build duplizieren @@ -2262,7 +2297,7 @@ Show Page Breaks - + Seitenumbrüche anzeigen @@ -2577,7 +2612,7 @@ Document Style - Darstellung von Dokumenten + Darstellung (Dokumente) @@ -2592,7 +2627,7 @@ Document font - Schriftart (Dokument) + Schriftart (Dokumente) @@ -2924,32 +2959,32 @@ Dialogue line symbols - + Zeichen für Dialogzeile Lines starting with any of these symbols are dialogue. - + Zeilen, die mit einem dieser Zeichen beginnen, werden als wörtliche Rede behandeln. Narrator break symbol - + Zeichen für Erzähleinschub Symbol to indicate a narrator break in dialogue. - + Zeichen für einen Erzähleinschub innerhalb von wörtlicher Rede. Alternating dialogue/narration symbol - + Wechseln zwischen wörtlicher Rede und Erzählung Alternates dialogue highlighting within any paragraph. - + Dieses Zeichen wechselt zwischen wörtlicher Rede und Erzählung innerhalb eines Absatzes. @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + Ausgewählte Elemente endgültig löschen? Move selected item(s) to Trash? - + Ausgewählte Elemente in den Papierkorb legen? @@ -3408,12 +3443,12 @@ Add Word - + Wort hinzufügen Remove Word - + Wort entfernen @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders Alle Romanordner @@ -3769,7 +3804,7 @@ Address - + Anschrift @@ -3779,7 +3814,7 @@ Word Count - Wörter + Wörter @@ -3978,102 +4013,102 @@ Square - Quadrat + Quadrat Triangle - Dreieck + Dreieck Nabla - Nabla + Nabla Diamond - Raute + Raute Pentagon - Fünfeck + Fünfeck Hexagon - Sechseck + Sechseck Star - Stern + Stern Pacman - Pacman + Pacman 1/4 Circle - 1/4-Kreis + 1/4-Kreis Half Circle - Halbkreis + Halbkreis 3/4 Circle - 3/4-Kreis + 3/4-Kreis Full Circle - Voller Kreis + Voller Kreis 1 Bar - 1 Balken + 1 Balken 2 Bars - 2 Balken + 2 Balken 3 Bars - 3 Balken + 3 Balken 4 Bars - 4 Balken + 4 Balken 1 Block - 1 Block + 1 Block 2 Blocks - 2 Blöcke + 2 Blöcke 3 Blocks - 3 Blöcke + 3 Blöcke 4 Blocks - 4 Blöcke + 4 Blöcke @@ -4104,57 +4139,57 @@ Characters - Charaktere + Zeichen Characters in Text - Zeichen im Text + Zeichen im Text Characters in Headings - Zeichen in Überschriften + Zeichen in Überschriften Paragraphs - Absätze + Absätze Headings - Überschriften + Überschriften Characters, No Spaces - Zeichen ohne Leerzeichen + Zeichen ohne Leerzeichen Characters in Text, No Spaces - Zeichen im Text ohne Leerzeichen + Zeichen im Text ohne Leerzeichen Characters in Headings, No Spaces - Zeichen in Überschriften ohne Leerzeichen + Zeichen in Überschriften ohne Leerzeichen Words - Wörter + Wörter Words in Text - Wörter im Text + Wörter im Text Words in Headings - Wörter in Überschriften + Wörter in Überschriften @@ -4765,7 +4800,7 @@ Status - Status + Status @@ -4775,7 +4810,7 @@ Importance - Wichtigkeit + Wichtigkeit @@ -4805,7 +4840,7 @@ Label - Name + Etikett @@ -4815,32 +4850,32 @@ Add Label - + Etikett hinzufügen Delete Label - + Etikett entfernen Move Up - Nach oben + Nach oben Move Down - Nach unten + Nach unten Import Labels - + Etiketten importieren Export Labels - + Etiketten exportieren @@ -4885,132 +4920,132 @@ Import File - Datei importieren + Datei importieren Export File - Datei exportieren + Datei exportieren _TreeContextMenu - + Empty Trash Papierkorb leeren - + Rename Umbenennen - + Duplicate Duplizieren - + Open Document Dokument öffnen - + View Document Dokument anzeigen - + Create New ... Neu erstellen ... - + Rename to Heading Umbenennen: Überschrift übernehmen - + Set Active to ... Aktiv setzen auf ... - + Toggle Active Aktivieren ein/aus - + Set Status to ... Status setzen auf ... - - + + Manage Labels ... Beschriftungen verwalten ... - + Set Importance to ... Wichtigkeit setzen auf ... - + Transform ... Umwandeln ... - - - - + + + + Convert to {0} Umwandeln in {0} - + Merge Child Items into Self Unterelemente in dieses Dokument zusammenführen - + Merge Child Items into New Unterelemente in neues Dokument zusammenführen - + Merge Documents in Folder Dokumente im Ordner zusammenführen - + Split Document by Headings Dokument nach Überschriften aufteilen - + Expand All Alle aufklappen - + Collapse All Alle zuklappen - + Delete Permanently Endgültig löschen - + Move to Trash In den Papierkorb legen - + Do you want to convert the folder to a {0}? This action cannot be reversed. Möchten Sie den Ordner umwandeln in {0}? Diese Aktion kann nicht rückgängig gemacht werden. @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template Von Vorlage diff --git a/i18n/nw_en_US.ts b/i18n/nw_en_US.ts index 2bbb4650..ae3857ee 100644 --- a/i18n/nw_en_US.ts +++ b/i18n/nw_en_US.ts @@ -61,22 +61,22 @@ Title Styling - + Title Styling Partition Styling - + Partition Styling Chapter Styling - + Chapter Styling Scene Styling - + Scene Styling @@ -176,70 +176,105 @@ Text Margins - + Text Margins + + + + Title and Partition + Title and Partition + Heading 1 and Chapter + Heading 1 and Chapter + + + + Heading 2 and Scene + Heading 2 and Scene + + + + Heading 3 and Section + Heading 3 and Section + + + + Heading 4 + Heading 4 + + + + Text Paragraph + Text Paragraph + + + + Scene Separator + Scene Separator + + + Page Layout Page Layout - + Unit Unit - + Page Size Page Size - + Page Margins - + Page Margins - + Document Style - Document Style + Document Style - + Page Header Page Header - + Page Counter Offset Page Counter Offset - + Add Colours to Headings - + Add Colors to Headings - + Increase Size of Headings - + Increase Size of Headings - + Bold Headings - + Bold Headings - + HTML Options - + HTML Options - + Add CSS Styles Add CSS Styles - + Preserve Tab Characters Preserve Tab Characters @@ -328,32 +363,32 @@ Heading 1 (Partition) - Heading 1 (Partition) + Heading 1 (Partition) Heading 2 (Chapter) - Heading 2 (Chapter) + Heading 2 (Chapter) Heading 3 (Scene) - Heading 3 (Scene) + Heading 3 (Scene) Heading 4 (Section) - Heading 4 (Section) + Heading 4 (Section) Text Paragraph - + Text Paragraph Scene Separator - + Scene Separator @@ -365,43 +400,43 @@ Novel - Novel + Novel Plot - Plot + Plot Characters - Characters + Characters Locations - Locations + Locations Timeline - Timeline + Timeline Objects - Objects + Objects Entities - Entities + Entities @@ -413,17 +448,17 @@ Archive - Archive + Archive Templates - Templates + Templates Trash - Trash + Trash @@ -470,22 +505,22 @@ Active - Active + Active Inactive - Inactive + Inactive Tag - Tag + Tag Point of View - Point of View + Point of View @@ -496,12 +531,12 @@ Story - + Story Mentions - + Mentions @@ -521,7 +556,7 @@ Status - Status + Status @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Microsoft Word Document (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + Portable Document Format (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - General + General @@ -808,7 +843,7 @@ Formatting - + Formatting @@ -1033,7 +1068,7 @@ Open URL - + Open URL @@ -1088,7 +1123,7 @@ Ignore Word - + Ignore Word @@ -1283,7 +1318,7 @@ Open in Editor - + Open in Editor @@ -1363,12 +1398,12 @@ Status - + Class Class - + Usage Usage @@ -1845,12 +1880,12 @@ Word/Character Count - + Word/Character Count Breaks and Vertical Space - + Breaks and Vertical Space @@ -1860,7 +1895,7 @@ Forced Line Break - + Forced Line Break @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + Duplicate Selected Build @@ -2262,7 +2297,7 @@ Show Page Breaks - + Show Page Breaks @@ -2924,32 +2959,32 @@ Dialogue line symbols - + Dialog line symbols Lines starting with any of these symbols are dialogue. - + Lines starting with any of these symbols are dialog. Narrator break symbol - + Narrator break symbol Symbol to indicate a narrator break in dialogue. - + Symbol to indicate a narrator break in dialog. Alternating dialogue/narration symbol - + Alternating dialog/narration symbol Alternates dialogue highlighting within any paragraph. - + Alternates dialog highlighting within any paragraph. @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + Permanently delete selected item(s)? Move selected item(s) to Trash? - + Move selected item(s) to Trash? @@ -3408,12 +3443,12 @@ Add Word - + Add Word Remove Word - + Remove Word @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders All Novel Folders @@ -3769,7 +3804,7 @@ Address - + Address @@ -3779,7 +3814,7 @@ Word Count - Word Count + Word Count @@ -3978,102 +4013,102 @@ Square - Square + Square Triangle - Triangle + Triangle Nabla - Nabla + Nabla Diamond - Diamond + Diamond Pentagon - Pentagon + Pentagon Hexagon - Hexagon + Hexagon Star - Star + Star Pacman - Pacman + Pacman 1/4 Circle - 1/4 Circle + 1/4 Circle Half Circle - Half Circle + Half Circle 3/4 Circle - 3/4 Circle + 3/4 Circle Full Circle - Full Circle + Full Circle 1 Bar - 1 Bar + 1 Bar 2 Bars - 2 Bars + 2 Bars 3 Bars - 3 Bars + 3 Bars 4 Bars - 4 Bars + 4 Bars 1 Block - 1 Block + 1 Block 2 Blocks - 2 Blocks + 2 Blocks 3 Blocks - 3 Blocks + 3 Blocks 4 Blocks - 4 Blocks + 4 Blocks @@ -4104,57 +4139,57 @@ Characters - Characters + Characters Characters in Text - Characters in Text + Characters in Text Characters in Headings - Characters in Headings + Characters in Headings Paragraphs - Paragraphs + Paragraphs Headings - Headings + Headings Characters, No Spaces - Characters, No Spaces + Characters, No Spaces Characters in Text, No Spaces - Characters in Text, No Spaces + Characters in Text, No Spaces Characters in Headings, No Spaces - Characters in Headings, No Spaces + Characters in Headings, No Spaces Words - Words + Words Words in Text - Words in Text + Words in Text Words in Headings - Words in Headings + Words in Headings @@ -4765,7 +4800,7 @@ Status - Status + Status @@ -4775,7 +4810,7 @@ Importance - Importance + Importance @@ -4815,32 +4850,32 @@ Add Label - + Add Label Delete Label - + Delete Label Move Up - Move Up + Move Up Move Down - Move Down + Move Down Import Labels - + Import Labels Export Labels - + Export Labels @@ -4885,132 +4920,132 @@ Import File - Import File + Import File Export File - Export File + Export File _TreeContextMenu - + Empty Trash Empty Trash - + Rename Rename - + Duplicate Duplicate - + Open Document Open Document - + View Document View Document - + Create New ... Create New ... - + Rename to Heading Rename to Heading - + Set Active to ... Set Active to ... - + Toggle Active Toggle Active - + Set Status to ... Set Status to ... - - + + Manage Labels ... Manage Labels ... - + Set Importance to ... Set Importance to ... - + Transform ... Transform ... - - - - + + + + Convert to {0} Convert to {0} - + Merge Child Items into Self Merge Child Items into Self - + Merge Child Items into New Merge Child Items into New - + Merge Documents in Folder Merge Documents in Folder - + Split Document by Headings Split Document by Headings - + Expand All Expand All - + Collapse All Collapse All - + Delete Permanently Delete Permanently - + Move to Trash Move to Trash - + Do you want to convert the folder to a {0}? This action cannot be reversed. Do you want to convert the folder to a {0}? This action cannot be reversed. @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template From Template diff --git a/i18n/nw_it_IT.ts b/i18n/nw_it_IT.ts index f1f3f00e..44633a34 100644 --- a/i18n/nw_it_IT.ts +++ b/i18n/nw_it_IT.ts @@ -61,22 +61,22 @@ Title Styling - + Stile del titolo Partition Styling - + Stile della partizione Chapter Styling - + Stile del capitolo Scene Styling - + Stile della scena @@ -176,70 +176,105 @@ Text Margins - + Margini del testo + + + + Title and Partition + Titolo e partizione + Heading 1 and Chapter + Intestazione 1 e Capitolo + + + + Heading 2 and Scene + Intestazione 2 e Scena + + + + Heading 3 and Section + Intestazione 3 e Sezione + + + + Heading 4 + Intestazione 4 + + + + Text Paragraph + Paragrafo di testo + + + + Scene Separator + Separatore di scena + + + Page Layout Impaginazione - + Unit Unità - + Page Size Dimensioni pagina - + Page Margins - + Margini della pagina - + Document Style - Stile del documento + Stile del documento - + Page Header Intestazione della pagina - + Page Counter Offset Scostamento del contatore di pagina - + Add Colours to Headings - + Aggiungi colori ai titoli - + Increase Size of Headings - + Aumenta la dimensione dei titoli - + Bold Headings - + Titoli in grassetto - + HTML Options - + Opzioni HTML - + Add CSS Styles Aggiungi stile CSS - + Preserve Tab Characters Conserva gli spazi di tabulazione @@ -328,32 +363,32 @@ Heading 1 (Partition) - Titolo 1 (Partizione) + Titolo 1 (Partizione) Heading 2 (Chapter) - Titolo 2 (Capitolo) + Titolo 2 (Capitolo) Heading 3 (Scene) - Titolo 3 (Scena) + Titolo 3 (Scena) Heading 4 (Section) - Titolo 4 (Sezione) + Titolo 4 (Sezione) Text Paragraph - + Paragrafo di testo Scene Separator - + Separatore di scena @@ -365,43 +400,43 @@ Novel - Romanzo + Romanzo Plot - Trama + Trama Characters - Personaggi + Personaggi Locations - Luoghi + Luoghi Timeline - Sequenza temporale + Sequenza temporale Objects - Oggetti + Oggetti Entities - Entità + Entità @@ -413,17 +448,17 @@ Archive - Archivio + Archivio Templates - Modelli + Modelli Trash - Cestino + Cestino @@ -470,22 +505,22 @@ Active - Attivo + Attivo Inactive - Inattivo + Inattivo Tag - Etichetta + Etichetta Point of View - Punto di vista + Punto di vista @@ -496,12 +531,12 @@ Story - + Storia Mentions - + Menzioni @@ -521,7 +556,7 @@ Status - Stato + Stato @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Documento Microsoft Word (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + Portable Document Format (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - Generale + Generale @@ -808,7 +843,7 @@ Formatting - + Formattazione @@ -1033,7 +1068,7 @@ Open URL - + Apri URL @@ -1088,7 +1123,7 @@ Ignore Word - + Ignora parola @@ -1283,7 +1318,7 @@ Open in Editor - + Apri nell'editor @@ -1363,12 +1398,12 @@ Stato - + Class Classe - + Usage Utilizzo @@ -1845,12 +1880,12 @@ Word/Character Count - + Conteggio Parole/Caratteri Breaks and Vertical Space - + Interruzioni e spazio verticale @@ -1860,7 +1895,7 @@ Forced Line Break - + Interruzione di riga forzata @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + Duplica la costruzione selezionata @@ -2262,7 +2297,7 @@ Show Page Breaks - + Mostra interruzione di pagina @@ -2924,32 +2959,32 @@ Dialogue line symbols - + Simboli delle righe di dialogo Lines starting with any of these symbols are dialogue. - + Le linee che iniziano con uno di questi simboli sono dialogo. Narrator break symbol - + Simbolo per gli interventi del narratore Symbol to indicate a narrator break in dialogue. - + Simbolo che indica l'intervento del narratore nel dialogo. Alternating dialogue/narration symbol - + Simbolo alternativo di dialogo/narrazione Alternates dialogue highlighting within any paragraph. - + Alterna l'evidenziazione dei dialoghi all'interno di qualsiasi paragrafo. @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + Eliminare permanentemente gli elementi selezionati? Move selected item(s) to Trash? - + Spostare gli elementi selezionati nel cestino? @@ -3408,12 +3443,12 @@ Add Word - + Aggiungi parola Remove Word - + Rimuovi parola @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders Tutte le cartelle del romanzo @@ -3769,7 +3804,7 @@ Address - + Indirizzo @@ -3779,7 +3814,7 @@ Word Count - Conteggio delle parole + Conteggio delle parole @@ -3978,102 +4013,102 @@ Square - Quadrato + Quadrato Triangle - Triangolo + Triangolo Nabla - Triangolo capovolto + Triangolo capovolto Diamond - Diamante + Diamante Pentagon - Pentagono + Pentagono Hexagon - Esagono + Esagono Star - Stella + Stella Pacman - Pacman + Pacman 1/4 Circle - 1/4 di cerchio + 1/4 di cerchio Half Circle - Mezzo cerchio + Mezzo cerchio 3/4 Circle - 3/4 di cerchio + 3/4 di cerchio Full Circle - Cerchio intero + Cerchio intero 1 Bar - 1 barra + 1 barra 2 Bars - 2 barre + 2 barre 3 Bars - 3 barre + 3 barre 4 Bars - 4 barre + 4 barre 1 Block - 1 blocco + 1 blocco 2 Blocks - 2 blocchi + 2 blocchi 3 Blocks - 3 blocchi + 3 blocchi 4 Blocks - 4 blocchi + 4 blocchi @@ -4104,57 +4139,57 @@ Characters - Personaggi + Caratteri Characters in Text - Caratteri nel testo + Caratteri nel testo Characters in Headings - Caratteri nelle intestazioni + Caratteri nelle intestazioni Paragraphs - Paragrafi + Paragrafi Headings - Intestazioni + Intestazioni Characters, No Spaces - Caratteri, esclusi gli spazi + Caratteri, esclusi gli spazi Characters in Text, No Spaces - Caratteri nel testo, esclusi gli spazi + Caratteri nel testo, esclusi gli spazi Characters in Headings, No Spaces - Caratteri nelle intestazioni, esclusi gli spazi + Caratteri nelle intestazioni, esclusi gli spazi Words - Parole + Parole Words in Text - Parole nel testo + Parole nel testo Words in Headings - Parole nelle intestazioni + Parole nelle intestazioni @@ -4765,7 +4800,7 @@ Status - Stato + Stato @@ -4775,7 +4810,7 @@ Importance - Importanza + Importanza @@ -4815,32 +4850,32 @@ Add Label - + Aggiungi etichetta Delete Label - + Elimina etichetta Move Up - Sposta su + Sposta su Move Down - Sposta giù + Sposta giù Import Labels - + Importa etichette Export Labels - + Esporta etichette @@ -4885,132 +4920,132 @@ Import File - Importa file + Importa file Export File - Esporta file + Esporta file _TreeContextMenu - + Empty Trash Svuota il cestino - + Rename Rinomina - + Duplicate Duplica - + Open Document Apri documento - + View Document Visualizza documento - + Create New ... Crea nuovo ... - + Rename to Heading Rinomina nell'intestazione - + Set Active to ... Imposta attività su ... - + Toggle Active Commuta Attiva/Disattiva - + Set Status to ... Imposta lo stato su ... - - + + Manage Labels ... Gestisci Etichette ... - + Set Importance to ... Imposta l'importanza su ... - + Transform ... Trasforma ... - - - - + + + + Convert to {0} Converti in {0} - + Merge Child Items into Self Fondi elementi figli - + Merge Child Items into New Fondi elementi figli in uno nuovo - + Merge Documents in Folder Fondi i documenti nella cartella - + Split Document by Headings Dividi il documento alle intestazioni - + Expand All Espandi tutto - + Collapse All Collassa tutto - + Delete Permanently Elimina definitivamente - + Move to Trash Sposta nel cestino - + Do you want to convert the folder to a {0}? This action cannot be reversed. Vuoi convertire la cartella in un {0}? Questa azione non può essere annullata. @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template Dal modello diff --git a/i18n/nw_ja_JP.ts b/i18n/nw_ja_JP.ts index ab19b0ef..143b1043 100644 --- a/i18n/nw_ja_JP.ts +++ b/i18n/nw_ja_JP.ts @@ -61,22 +61,22 @@ Title Styling - + タイトルのスタイル Partition Styling - + パーティションのスタイル Chapter Styling - + チャプターのスタイル Scene Styling - + シーンのスタイル @@ -151,7 +151,7 @@ Apply Dialogue Highlighting - 会話にハイライトを適用 + ダイアログにハイライトを適用 @@ -176,70 +176,105 @@ Text Margins - + テキストの余白 + + + + Title and Partition + タイトルおよびパーティション + Heading 1 and Chapter + 見出し 1 およびチャプター + + + + Heading 2 and Scene + 見出し 2 およびシーン + + + + Heading 3 and Section + 見出し 3 およびセクション + + + + Heading 4 + 見出し 4 + + + + Text Paragraph + テキスト段落 + + + + Scene Separator + シーンセパレーター + + + Page Layout ページレイアウト - + Unit ユニット - + Page Size ページサイズ - + Page Margins - + ページの余白 - + Document Style - ドキュメントスタイル + ドキュメントスタイル - + Page Header ページヘッダー - + Page Counter Offset ページカウンターオフセット - + Add Colours to Headings - + 見出しに色を追加 - + Increase Size of Headings - + 見出しのサイズを拡大 - + Bold Headings - + 太字の見出し - + HTML Options - + HTMLオプション - + Add CSS Styles CSSスタイルを追加 - + Preserve Tab Characters タブ文字を保持 @@ -328,32 +363,32 @@ Heading 1 (Partition) - 見出し1 (パーティション) + 見出し 1 (パーティション) Heading 2 (Chapter) - 見出し2 (チャプター) + 見出し 2 (チャプター) Heading 3 (Scene) - 見出し3 (シーン) + 見出し 3 (シーン) Heading 4 (Section) - 見出し4 (セクション) + 見出し 4 (セクション) Text Paragraph - + テキスト段落 Scene Separator - + シーンセパレーター @@ -365,43 +400,43 @@ Novel - 小説 + 小説 Plot - プロット + プロット Characters - 登場人物 + 登場人物 Locations - 場所 + 場所 Timeline - タイムライン + タイムライン Objects - オブジェクト + オブジェクト Entities - エンティティ + エンティティ @@ -413,17 +448,17 @@ Archive - アーカイブ + アーカイブ Templates - テンプレート + テンプレート Trash - ごみ箱 + ごみ箱 @@ -470,22 +505,22 @@ Active - アクティブ + アクティブ Inactive - 非アクティブ + 非アクティブ Tag - タグ + タグ Point of View - 視点 + 視点 @@ -496,12 +531,12 @@ Story - + ストーリー Mentions - + メンション @@ -521,7 +556,7 @@ Status - ステータス + ステータス @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Microsoft Word 文書 (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + ポータブルドキュメントフォーマット (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - 一般 + 一般 @@ -808,7 +843,7 @@ Formatting - + 書式設定 @@ -1033,7 +1068,7 @@ Open URL - + URLを開く @@ -1088,7 +1123,7 @@ Ignore Word - + 単語を無視 @@ -1103,7 +1138,7 @@ Do you want to create a new project note for the tag '{0}'? - タグ '{0}' の新しいプロジェクトノートを作成しますか? + タグ '{0}' の新規プロジェクトノートを作成しますか? @@ -1169,7 +1204,7 @@ Split into a new folder - 新しいフォルダーに分割 + 新規フォルダーに分割 @@ -1283,7 +1318,7 @@ Open in Editor - + エディターで開く @@ -1363,12 +1398,12 @@ ステータス - + Class クラス - + Usage 用途 @@ -1845,12 +1880,12 @@ Word/Character Count - + 単語/文字数カウント Breaks and Vertical Space - + 区切りと垂直スペース @@ -1860,7 +1895,7 @@ Forced Line Break - + 強制的な改行 @@ -2020,7 +2055,7 @@ Remove In-Paragraph Breaks - 段落内の区切りを削除 + 段落内の改行を削除 @@ -2207,7 +2242,7 @@ Add New Build - 新しいビルドを追加 + 新規ビルドを追加 @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + 選択したビルドを複製 @@ -2262,7 +2297,7 @@ Show Page Breaks - + 改ページを表示 @@ -2894,7 +2929,7 @@ Highlight dialogue - 会話のハイライト + ダイアログのハイライト @@ -2904,52 +2939,52 @@ Alternative dialogue symbols - 代替会話記号 + 代替ダイアログ記号 Custom highlighting of dialogue text. - 会話テキストのカスタムハイライト。 + ダイアログテキストのカスタムハイライト。 Allow open-ended dialogue - 閉じない会話を許可 + 閉じないダイアログを許可 Highlight dialogue line with no closing quote. - 終了引用符の無い会話行を強調表示します。 + 終了引用符の無いダイアログ行を強調表示します。 Dialogue line symbols - + ダイアログ行記号 Lines starting with any of these symbols are dialogue. - + これらの記号で始まる行はダイアログとなります。 Narrator break symbol - + ナレーター区切り記号 Symbol to indicate a narrator break in dialogue. - + ダイアログ内のナレーターの区切りを示すシンボルです。 Alternating dialogue/narration symbol - + ダイアログ/ナレーションの切替記号 Alternates dialogue highlighting within any paragraph. - + 任意の段落内の会話の強調表示を切り替えます。 @@ -3214,7 +3249,7 @@ Cannot add new files or folders to the Trash folder. - ごみ箱フォルダには新しいファイルやフォルダを追加できません。 + ごみ箱フォルダには新規ファイルやフォルダを追加できません。 @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + 選択したアイテムを完全に削除しますか? Move selected item(s) to Trash? - + 選択したアイテムをごみ箱に移動しますか? @@ -3408,12 +3443,12 @@ Add Word - + 単語を追加 Remove Word - + 単語を削除 @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders すべての小説フォルダー @@ -3769,7 +3804,7 @@ Address - + アドレス @@ -3779,7 +3814,7 @@ Word Count - 単語カウント + 単語カウント @@ -3836,12 +3871,12 @@ Failed to create a new example project. - 新しいサンプルプロジェクトの作成に失敗しました。 + 新規サンプルプロジェクトの作成に失敗しました。 Failed to create a new example project. Could not find the necessary files. They seem to be missing from this installation. - 新しいサンプルプロジェクトの作成に失敗しました。必要なファイルが見つかりませんでした。インストール時に欠落しているようです。 + 新規サンプルプロジェクトの作成に失敗しました。必要なファイルが見つかりませんでした。インストール時に欠落しているようです。 @@ -3978,102 +4013,102 @@ Square - 正方形 + 正方形 Triangle - 三角形 + 三角形 Nabla - 逆三角形 + 逆三角形 Diamond - 菱形 + 菱形 Pentagon - 五角形 + 五角形 Hexagon - 六角形 + 六角形 Star - + Pacman - パックマン + パックマン 1/4 Circle - 1/4の円 + 1/4の円 Half Circle - 半円 + 半円 3/4 Circle - 3/4の円 + 3/4の円 Full Circle - 全円 + 全円 1 Bar - 1バー + 1バー 2 Bars - 2バー + 2バー 3 Bars - 3バー + 3バー 4 Bars - 4バー + 4バー 1 Block - 1ブロック + 1ブロック 2 Blocks - 2ブロック + 2ブロック 3 Blocks - 3ブロック + 3ブロック 4 Blocks - 4ブロック + 4ブロック @@ -4104,57 +4139,57 @@ Characters - 登場人物 + 文字数 Characters in Text - テキスト内の文字数 + テキスト内の文字数 Characters in Headings - 見出し内の文字数 + 見出し内の文字数 Paragraphs - 段落 + 段落 Headings - 見出し + 見出し Characters, No Spaces - スペースなし文字数 + スペースなし文字数 Characters in Text, No Spaces - テキスト内のスペースなし文字数 + テキスト内のスペースなし文字数 Characters in Headings, No Spaces - 見出し内のスペースなし文字数 + 見出し内のスペースなし文字数 Words - 単語 + 単語数 Words in Text - テキスト内の単語数 + テキスト内の単語数 Words in Headings - 見出し内の単語数 + 見出し内の単語数 @@ -4765,7 +4800,7 @@ Status - ステータス + ステータス @@ -4775,7 +4810,7 @@ Importance - 重要度 + 重要度 @@ -4815,32 +4850,32 @@ Add Label - + ラベルを追加 Delete Label - + ラベルを削除 Move Up - 上へ移動 + 上へ移動 Move Down - 下へ移動 + 下へ移動 Import Labels - + ラベルをインポート Export Labels - + ラベルをエクスポート @@ -4885,132 +4920,132 @@ Import File - ファイルをインポート + ファイルをインポート Export File - ファイルをエクスポート + ファイルをエクスポート _TreeContextMenu - + Empty Trash ごみ箱を空にする - + Rename 名前を変更 - + Duplicate 複製 - + Open Document ドキュメントを開く - + View Document ドキュメントを表示 - + Create New ... 新規作成... - + Rename to Heading 見出し名に変更 - + Set Active to ... アクティブに設定... - + Toggle Active アクティブを切り替え - + Set Status to ... ステータスを... に設定 - - + + Manage Labels ... ラベルを管理... - + Set Importance to ... 重要度を... に設定 - + Transform ... 変換... - - - - + + + + Convert to {0} {0} へ変換 - + Merge Child Items into Self 子アイテムを自分に結合 - + Merge Child Items into New 子アイテムを新規アイテムに結合 - + Merge Documents in Folder フォルダ内のドキュメントを結合 - + Split Document by Headings 見出しでドキュメントを分割 - + Expand All すべて展開 - + Collapse All すべて折りたたむ - + Delete Permanently 完全に削除 - + Move to Trash ごみ箱に移動 - + Do you want to convert the folder to a {0}? This action cannot be reversed. フォルダーを {0} に変換しますか? この操作は元に戻せません。 @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template テンプレートから diff --git a/i18n/nw_nb_NO.ts b/i18n/nw_nb_NO.ts index ab088b49..3d8c5566 100644 --- a/i18n/nw_nb_NO.ts +++ b/i18n/nw_nb_NO.ts @@ -61,22 +61,22 @@ Title Styling - + Tittel-stil Partition Styling - + Partisjon-stil Chapter Styling - + Kapittel-stil Scene Styling - + Scene-stil @@ -176,70 +176,105 @@ Text Margins - + Tekstmarg + + + + Title and Partition + Tittel og partisjon + Heading 1 and Chapter + Overskrift 1 og kapittel + + + + Heading 2 and Scene + Overskrift 2 og scene + + + + Heading 3 and Section + Overskrift 3 og seksjon + + + + Heading 4 + Overskrift 4 + + + + Text Paragraph + Tekstavsnitt + + + + Scene Separator + Scene-separator + + + Page Layout Sideoppsett - + Unit Enhet - + Page Size Sidestørrelse - + Page Margins - + Sidemarg - + Document Style - Dokumentets stil + Dokumentets stil - + Page Header Topptekst - + Page Counter Offset Første side for sideteller - + Add Colours to Headings - + Bruk farge på overskrifter - + Increase Size of Headings - + Bruk større skrift for overskrifter - + Bold Headings - + Uthev overskrifter - + HTML Options - + HTML-instillinger - + Add CSS Styles Legg til CSS style - + Preserve Tab Characters Bevar tabulatorer @@ -328,32 +363,32 @@ Heading 1 (Partition) - Overskrift 1 (inndeling) + Overskrift 1 (inndeling) Heading 2 (Chapter) - Overskrift 2 (kapittel) + Overskrift 2 (kapittel) Heading 3 (Scene) - Overskrift 3 (scene) + Overskrift 3 (scene) Heading 4 (Section) - Overskrift 4 (seksjon) + Overskrift 4 (seksjon) Text Paragraph - + Tekstavsnitt Scene Separator - + Scene-separator @@ -365,43 +400,43 @@ Novel - Roman + Roman Plot - Plott + Plott Characters - Karakterer + Karakterer Locations - Lokasjoner + Lokasjoner Timeline - Tidslinje + Tidslinje Objects - Objekter + Objekter Entities - Enheter + Enheter @@ -413,17 +448,17 @@ Archive - Arkiv + Arkiv Templates - Maler + Maler Trash - Søppel + Søppel @@ -470,22 +505,22 @@ Active - Aktiv + Aktiv Inactive - Inaktiv + Inaktiv Tag - Knagg + Knagg Point of View - Perspektiv + Perspektiv @@ -496,12 +531,12 @@ Story - + Fortelling Mentions - + Nevnt @@ -521,7 +556,7 @@ Status - Status + Status @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Microsoft Word-dokument (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + Portabelt dokument-format (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - Generelt + Generelt @@ -808,7 +843,7 @@ Formatting - + Formattering @@ -1033,7 +1068,7 @@ Open URL - + Åpne lenke @@ -1088,7 +1123,7 @@ Ignore Word - + Ignorer ord @@ -1283,7 +1318,7 @@ Open in Editor - + Åpne i editor @@ -1363,12 +1398,12 @@ Status - + Class Klasse - + Usage Formål @@ -1845,12 +1880,12 @@ Word/Character Count - + Statistikk Breaks and Vertical Space - + Linjeskift og avstand @@ -1860,7 +1895,7 @@ Forced Line Break - + Tvunget linjeskift @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + Dupliser byggedefinisjon @@ -2262,7 +2297,7 @@ Show Page Breaks - + Vis markør for ny side @@ -2924,32 +2959,32 @@ Dialogue line symbols - + Symbol for dialog Lines starting with any of these symbols are dialogue. - + Linjer som begynner med dette symbolet er ansett som dialog. Narrator break symbol - + Symbol for forteller-innslag Symbol to indicate a narrator break in dialogue. - + Bytt til fortellerstemme i dialog. Alternating dialogue/narration symbol - + Symbol for dialog/forteller-skifte Alternates dialogue highlighting within any paragraph. - + Veksler mellom dialog og forteller i alle typer avsnitt. @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + Slett merkede elementer permanent? Move selected item(s) to Trash? - + Flytte valgte elementer til papirkurven? @@ -3408,12 +3443,12 @@ Add Word - + Legg til ord Remove Word - + Fjern ord @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders Alle roman-mapper @@ -3769,7 +3804,7 @@ Address - + Adresse @@ -3779,7 +3814,7 @@ Word Count - Antall ord + Antall ord @@ -3978,102 +4013,102 @@ Square - Kvadrat + Firkant Triangle - Trekant + Trekant Nabla - Nabla + Nabla Diamond - Diamant + Diamant Pentagon - Pentagon + Pentagon Hexagon - Heksagon + Heksagon Star - Stjerne + Stjerne Pacman - Pacman + Pacman 1/4 Circle - 1/4 sirkel + 1/4 sirkel Half Circle - Halv sirkel + Halv sirkel 3/4 Circle - 3/4 sirkel + 3/4 sirkel Full Circle - Hel sirkel + Hel sirkel 1 Bar - 1 strek + 1 strek 2 Bars - 2 streker + 2 streker 3 Bars - 3 streker + 3 streker 4 Bars - 4 streker + 4 streker 1 Block - 1 kloss + 1 kloss 2 Blocks - 2 klosser + 2 klosser 3 Blocks - 3 klosser + 3 klosser 4 Blocks - 4 klosser + 4 klosser @@ -4104,57 +4139,57 @@ Characters - Karakterer + Tegn Characters in Text - Tegn i tekst + Tegn i tekst Characters in Headings - Tegn i overskrifter + Tegn i overskrifter Paragraphs - Avsnitt + Avsnitt Headings - Overskrifter + Overskrifter Characters, No Spaces - Tegn, utenom mellomrom + Tegn, utenom mellomrom Characters in Text, No Spaces - Tegn i tekst, utenom mellomrom + Tegn i tekst, utenom mellomrom Characters in Headings, No Spaces - Tegn i overskrifter, utenom mellomrom + Tegn i overskrifter, utenom mellomrom Words - Ord + Ord Words in Text - Ord i tekst + Ord i tekst Words in Headings - Ord i overskrifter + Ord i overskrifter @@ -4765,7 +4800,7 @@ Status - Status + Status @@ -4775,7 +4810,7 @@ Importance - Viktighet + Viktighet @@ -4815,32 +4850,32 @@ Add Label - + Legg til Delete Label - + Slett Move Up - Flytt opp + Flytt opp Move Down - Flytt ned + Flytt ned Import Labels - + Importer fra fil Export Labels - + Eksporter til fil @@ -4885,132 +4920,132 @@ Import File - Importer fil + Importer fil Export File - Eksporter fil + Eksporter fil _TreeContextMenu - + Empty Trash Tøm papirkurven - + Rename Endre navn - + Duplicate Dupliser - + Open Document Åpne dokument - + View Document Vis dokument - + Create New ... Opprett ny ... - + Rename to Heading Endre navn til overskriften - + Set Active to ... Sett aktiv til ... - + Toggle Active Aktiver/deaktiver - + Set Status to ... Sett status til ... - - + + Manage Labels ... Administrer etiketter ... - + Set Importance to ... Sett viktighetsnivå til ... - + Transform ... Endre ... - - - - + + + + Convert to {0} Konverter til {0} - + Merge Child Items into Self Lim inn underelementer i dette dokumentet - + Merge Child Items into New Lim inn underelementer i nytt dokument - + Merge Documents in Folder Slå sammen dokumenter i mappen - + Split Document by Headings Splitt dokumentet etter overskrifter - + Expand All Utvid alle - + Collapse All Lukk alle - + Delete Permanently Slett permanent - + Move to Trash Flytt til papirkurv - + Do you want to convert the folder to a {0}? This action cannot be reversed. Vil du konvertere mappen til et {0}? Denne handlingen kan ikke angres. @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template Fra mal diff --git a/i18n/nw_pl_PL.ts b/i18n/nw_pl_PL.ts index 57b95719..9ac70a98 100644 --- a/i18n/nw_pl_PL.ts +++ b/i18n/nw_pl_PL.ts @@ -61,22 +61,22 @@ Title Styling - + Formatowanie tytułu Partition Styling - + Formatowanie części Chapter Styling - + Formatowanie rozdziału Scene Styling - + Formatowanie sceny @@ -176,70 +176,105 @@ Text Margins - + Marginesy tekstu + + + + Title and Partition + Tytuł i część + Heading 1 and Chapter + Nagłówek 1 i rozdział + + + + Heading 2 and Scene + Nagłówek 2 i scena + + + + Heading 3 and Section + Nagłówek 3 i sekcja + + + + Heading 4 + Nagłówek 4 + + + + Text Paragraph + Akapit tekstu + + + + Scene Separator + Odstęp między scenami + + + Page Layout Układ strony - + Unit Jednostka - + Page Size Wielkość strony - + Page Margins - + Marginesy strony - + Document Style - Styl dokumentu + Styl dokumentu - + Page Header Nagłówek strony - + Page Counter Offset Przesunięcie licznika stron - + Add Colours to Headings - + Dodaj kolory do nagłówków - + Increase Size of Headings - + Zwiększ rozmiar nagłówków - + Bold Headings - + Pogrubienie nagłówków - + HTML Options - + Opcje HTML - + Add CSS Styles Dodaj style CSS - + Preserve Tab Characters Zachowaj znaki tabulacji @@ -328,32 +363,32 @@ Heading 1 (Partition) - Nagłówek 1 (część) + Nagłówek 1 (część) Heading 2 (Chapter) - Nagłówek 2 (rozdział) + Nagłówek 2 (rozdział) Heading 3 (Scene) - Nagłówek 3 (scena) + Nagłówek 3 (scena) Heading 4 (Section) - Nagłówek 4 (sekcja) + Nagłówek 4 (sekcja) Text Paragraph - + Akapit tekstu Scene Separator - + Odstęp między scenami @@ -365,43 +400,43 @@ Novel - Powieść + Powieść Plot - Fabuła + Fabuła Characters - Postacie + Postacie Locations - Miejsca + Miejsca Timeline - Linia czasu + Linia czasu Objects - Obiekty + Obiekty Entities - Podmioty + Podmioty @@ -413,17 +448,17 @@ Archive - Archiwum + Archiwum Templates - Szablony + Szablony Trash - Kosz + Kosz @@ -470,22 +505,22 @@ Active - Aktywny + Aktywny Inactive - Nieaktywny + Nieaktywny Tag - Znacznik + Znacznik Point of View - Punkt widzenia + Punkt widzenia @@ -496,12 +531,12 @@ Story - + Historia Mentions - + Wzmianka @@ -521,7 +556,7 @@ Status - Status + Status @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Dokument Word Microsoft (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + Portable Document Format (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - Podstawowe + Podstawowe @@ -808,7 +843,7 @@ Formatting - + Formatowanie @@ -1033,7 +1068,7 @@ Open URL - + Otwórz adres URL @@ -1088,7 +1123,7 @@ Ignore Word - + Ignoruj słowo @@ -1283,7 +1318,7 @@ Open in Editor - + Otwórz w edytorze @@ -1363,12 +1398,12 @@ Status - + Class Klasa - + Usage Użycie @@ -1845,12 +1880,12 @@ Word/Character Count - + Ilość słów/znaków Breaks and Vertical Space - + Wcięcia i odstępy @@ -1860,7 +1895,7 @@ Forced Line Break - + Ręczny podział wiersza @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + Duplikuj wybrany wzorzec @@ -2262,7 +2297,7 @@ Show Page Breaks - + Pokazuj podziały stron @@ -2924,32 +2959,32 @@ Dialogue line symbols - + Symbol kwestii dialogowej Lines starting with any of these symbols are dialogue. - + Wiersze zaczynające się od tego symbolu są dialogiem. Narrator break symbol - + Symbol wtrącenia narratora Symbol to indicate a narrator break in dialogue. - + Symbol wskazujący na wtrącenie narratora w dialogu. Alternating dialogue/narration symbol - + Symbol przeplatania dialogu i narracji Alternates dialogue highlighting within any paragraph. - + Zmienia wyróżnianie dialogu w dowolnym akapicie. @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + Trwale usunąć zaznaczone element(y)? Move selected item(s) to Trash? - + Przenieść zaznaczone element(y) do kosza? @@ -3408,12 +3443,12 @@ Add Word - + Dodaj słowo Remove Word - + Usuń słowo @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders Wszystkie katalogi powieści @@ -3769,7 +3804,7 @@ Address - + Adres @@ -3779,7 +3814,7 @@ Word Count - Ilość słów + Ilość słów @@ -3978,102 +4013,102 @@ Square - Kwadrat + Kwadrat Triangle - Trójkąt + Trójkąt Nabla - Nabla + Nabla Diamond - Diament + Diament Pentagon - Pentagon + Pięciokąt Hexagon - Heksagon + Sześciokąt Star - Gwiazda + Gwiazda Pacman - Pacman + Pacman 1/4 Circle - Ćwierć koła + Ćwierć koła Half Circle - Pół koła + Pół koła 3/4 Circle - 3/4 koła + 3/4 koła Full Circle - Pełne koło + Pełne koło 1 Bar - 1 pasek + 1 pasek 2 Bars - 2 paski + 2 paski 3 Bars - 3 paski + 3 paski 4 Bars - 4 paski + 4 paski 1 Block - 1 bloczek + 1 bloczek 2 Blocks - 2 bloczki + 2 bloczki 3 Blocks - 3 bloczki + 3 bloczki 4 Blocks - 4 bloczki + 4 bloczki @@ -4104,57 +4139,57 @@ Characters - Postacie + Znaki Characters in Text - Znaki w tekście + Znaki w tekście Characters in Headings - Znaki w nagłówkach + Znaki w nagłówkach Paragraphs - Akapity + Akapity Headings - Nagłówki + Nagłówki Characters, No Spaces - Znaki bez spacji + Znaki bez spacji Characters in Text, No Spaces - Znaki w tekście bez spacji + Znaki w tekście bez spacji Characters in Headings, No Spaces - Znaki w nagłówkach bez spacji + Znaki w nagłówkach bez spacji Words - Słowa + Słowa Words in Text - Słowa w tekście + Słowa w tekście Words in Headings - Słowa w nagłówkach + Słowa w nagłówkach @@ -4765,7 +4800,7 @@ Status - Status + Status @@ -4775,7 +4810,7 @@ Importance - Ważność + Ważność @@ -4815,32 +4850,32 @@ Add Label - + Dodaj etykietę Delete Label - + Usuń etykietę Move Up - Przenieś wyżej + Przenieś wyżej Move Down - Przenieś niżej + Przenieś niżej Import Labels - + Importuj etykiety Export Labels - + Importuj etykiety @@ -4885,132 +4920,132 @@ Import File - Importuj plik + Importuj plik Export File - Eksportuj plik + Eksportuj plik _TreeContextMenu - + Empty Trash Opróżnij kosz - + Rename Zmień nazwę - + Duplicate Powiel - + Open Document Otwórz dokument - + View Document Podgląd dokumentu - + Create New ... Utwórz nowy... - + Rename to Heading Zmień na nazwę nagłówka - + Set Active to ... Ustaw aktywność jako... - + Toggle Active Przełącz aktywność - + Set Status to ... Ustaw status jako... - - + + Manage Labels ... Zarządzaj etykietami... - + Set Importance to ... Ustaw ważność jako... - + Transform ... Przekształć... - - - - + + + + Convert to {0} Zmień na {0} - + Merge Child Items into Self Połącz elementy podrzędne razem - + Merge Child Items into New Połącz elementy podrzędne jako nowy dokument - + Merge Documents in Folder Połącz dokumenty w katalogu - + Split Document by Headings Podziel dokument według nagłówków - + Expand All Maksymalizuj wszystko - + Collapse All Minimalizuj wszystko - + Delete Permanently Usuń trwale - + Move to Trash Przenieś do kosza - + Do you want to convert the folder to a {0}? This action cannot be reversed. Czy chcesz przekształcić katalog na {0}? Tego działania nie można cofnąć. @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template Z szablonu diff --git a/i18n/nw_pt_BR.ts b/i18n/nw_pt_BR.ts index aaf083bd..12735dca 100644 --- a/i18n/nw_pt_BR.ts +++ b/i18n/nw_pt_BR.ts @@ -61,22 +61,22 @@ Title Styling - + Estilo do título Partition Styling - + Estilo da parte Chapter Styling - + Estilo do capítulo Scene Styling - + Estilo da cena @@ -176,70 +176,105 @@ Text Margins + Margem do texto + + + + Title and Partition + Heading 1 and Chapter + + + + + Heading 2 and Scene + + + + + Heading 3 and Section + + + + + Heading 4 + + + + + Text Paragraph + Parágrafo de texto + + + + Scene Separator + Separador de cena + + + Page Layout Layout da página - + Unit Unidade - + Page Size Tamanho da página - + Page Margins - + Margens da página - + Document Style - Estilo do documento + Estilo do documento - + Page Header Cabeçalho da página - + Page Counter Offset Deslocamento da numeração de página - + Add Colours to Headings - + Colorir cabeçalhos - + Increase Size of Headings - + Aumentar tamanho dos cabeçalhos - + Bold Headings - + Cabeçalhos em negrito - + HTML Options - + Opções de HTML - + Add CSS Styles Adicionar estilos CSS - + Preserve Tab Characters Manter caracteres de tabulação @@ -328,32 +363,32 @@ Heading 1 (Partition) - Cabeçalho 1 (parte) + Cabeçalho 1 (parte) Heading 2 (Chapter) - Cabeçalho 2 (capítulo) + Cabeçalho 2 (capítulo) Heading 3 (Scene) - Cabeçalho 3 (cena) + Cabeçalho 3 (cena) Heading 4 (Section) - Cabeçalho 4 (seção) + Cabeçalho 4 (seção) Text Paragraph - + Parágrafo de texto Scene Separator - + Separador de cena @@ -365,43 +400,43 @@ Novel - Livro + Livro Plot - Enredo + Enredo Characters - Personagens + Personagens Locations - Lugares + Lugares Timeline - Linha do tempo + Linha do tempo Objects - Objetos + Objetos Entities - Entidades + Entidades @@ -413,17 +448,17 @@ Archive - Arquivados + Arquivados Templates - Modelos + Modelos Trash - Lixeira + Lixeira @@ -470,22 +505,22 @@ Active - Ativo + Ativo Inactive - Inativo + Inativo Tag - Etiqueta + Etiqueta Point of View - Ponto de vista + Ponto de vista @@ -496,12 +531,12 @@ Story - + História Mentions - + Menções @@ -521,7 +556,7 @@ Status - Estado + Estado @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Documento do Microsoft Word (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + Portable Document Format (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - Geral + Geral @@ -808,7 +843,7 @@ Formatting - + Formatação @@ -1033,7 +1068,7 @@ Open URL - + Abrir URL @@ -1088,7 +1123,7 @@ Ignore Word - + Ignorar palavra @@ -1283,7 +1318,7 @@ Open in Editor - + Abrir no editor @@ -1363,12 +1398,12 @@ Estado - + Class Classe - + Usage Uso @@ -1845,12 +1880,12 @@ Word/Character Count - + Contagem de palavras/caracteres Breaks and Vertical Space - + Quebras e espaço vertical @@ -1860,7 +1895,7 @@ Forced Line Break - + Quebra de linha forçada @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + Duplicar a compilação selecionada @@ -2262,7 +2297,7 @@ Show Page Breaks - + Mostrar quebras de página @@ -2924,32 +2959,32 @@ Dialogue line symbols - + Símbolos de diálogo Lines starting with any of these symbols are dialogue. - + Linhas que começam com qualquer um destes símbolos são diálogo. Narrator break symbol - + Símbolo de intervenção do narrador Symbol to indicate a narrator break in dialogue. - + Símbolo para indicar a intervenção do narrador em uma linha de diálogo. Alternating dialogue/narration symbol - + Símbolo de alternância diálogo/narração Alternates dialogue highlighting within any paragraph. - + Alterna o destaque dos diálogos em um mesmo parágrafo. @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + Excluir permanentemente o(s) item(ns) selecionado(s)? Move selected item(s) to Trash? - + Mover item(ns) selecionado(s) para a lixeira? @@ -3408,12 +3443,12 @@ Add Word - + Adicionar palavra Remove Word - + Remover palavra @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders Todos os diretórios do livro @@ -3769,7 +3804,7 @@ Address - + Endereço @@ -3779,7 +3814,7 @@ Word Count - Contagem de palavras + Contagem de palavras @@ -3978,102 +4013,102 @@ Square - Quadrado + Quadrado Triangle - Triângulo + Triângulo Nabla - Nabla + Nabla Diamond - Diamante + Diamante Pentagon - Pentágono + Pentágono Hexagon - Hexágono + Hexágono Star - Estrela + Estrela Pacman - Pacman + Pacman 1/4 Circle - 1/4 de círculo + 1/4 de círculo Half Circle - Meio círculo + Meio círculo 3/4 Circle - 3/4 de círculo + 3/4 de círculo Full Circle - Círculo completo + Círculo completo 1 Bar - 1 barra + 1 barra 2 Bars - 2 barras + 2 barras 3 Bars - 3 barras + 3 barras 4 Bars - 4 barras + 4 barras 1 Block - 1 bloco + 1 bloco 2 Blocks - 2 blocos + 2 blocos 3 Blocks - 3 blocos + 3 blocos 4 Blocks - 4 blocos + 4 blocos @@ -4104,57 +4139,57 @@ Characters - Personagens + Caracteres Characters in Text - Caracteres no texto + Caracteres no texto Characters in Headings - Caracteres em cabeçalhos + Caracteres em cabeçalhos Paragraphs - Parágrafos + Parágrafos Headings - Cabeçalhos + Cabeçalhos Characters, No Spaces - Caracteres, sem espaços + Caracteres, sem espaços Characters in Text, No Spaces - Caracteres no texto, sem espaços + Caracteres no texto, sem espaços Characters in Headings, No Spaces - Caracteres em cabeçalhos, sem espaços + Caracteres em cabeçalhos, sem espaços Words - Palavras + Palavras Words in Text - Palavras no texto + Palavras no texto Words in Headings - Palavras em cabeçalhos + Palavras em cabeçalhos @@ -4765,7 +4800,7 @@ Status - Estado + Estado @@ -4775,7 +4810,7 @@ Importance - Importância + Importância @@ -4815,32 +4850,32 @@ Add Label - + Adicionar rótulo Delete Label - + Excluir rótulo Move Up - Mover para cima + Mover para cima Move Down - Mover para baixo + Mover para baixo Import Labels - + Importar rótulos Export Labels - + Exportar rótulos @@ -4885,132 +4920,132 @@ Import File - Importar arquivo + Importar arquivo Export File - Exportar arquivo + Exportar arquivo _TreeContextMenu - + Empty Trash Esvaziar a lixeira - + Rename Renomear - + Duplicate Duplicar - + Open Document Abrir documento - + View Document Ver documento - + Create New ... Criar novo ... - + Rename to Heading Renomear para título - + Set Active to ... Definir inclusão como... - + Toggle Active Alternar inclusão - + Set Status to ... Definir estado como... - - + + Manage Labels ... Gerenciar rótulos ... - + Set Importance to ... Definir importância como... - + Transform ... Transformar ... - - - - + + + + Convert to {0} Converter em {0} - + Merge Child Items into Self Combinar subitens neste documento - + Merge Child Items into New Combinar subitens em um novo documento - + Merge Documents in Folder Combinar documentos no diretório - + Split Document by Headings Dividir documento por cabeçalhos - + Expand All Expandir tudo - + Collapse All Recolher tudo - + Delete Permanently Excluir permanentemente - + Move to Trash Mover para a lixeira - + Do you want to convert the folder to a {0}? This action cannot be reversed. Deseja converter o diretório em {0}? Esta ação não pode ser desfeita. @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template Do modelo diff --git a/i18n/nw_zh_CN.ts b/i18n/nw_zh_CN.ts index 479a8fbe..6c76ea25 100644 --- a/i18n/nw_zh_CN.ts +++ b/i18n/nw_zh_CN.ts @@ -61,22 +61,22 @@ Title Styling - + 标题样式 Partition Styling - + 分区样式 Chapter Styling - + 章节样式 Scene Styling - + 场景样式 @@ -176,70 +176,105 @@ Text Margins + 文本间距 + + + + Title and Partition + Heading 1 and Chapter + + + + + Heading 2 and Scene + + + + + Heading 3 and Section + + + + + Heading 4 + + + + + Text Paragraph + 文本段落 + + + + Scene Separator + 场景分隔符 + + + Page Layout 页面布局 - + Unit 单位设置 - + Page Size 页面大小 - + Page Margins - + 页面边距 - + Document Style - 文档样式 + 文档样式 - + Page Header 页眉 - + Page Counter Offset 页面计数器偏移 - + Add Colours to Headings - + 添加颜色到标题 - + Increase Size of Headings - + 增加标题大小 - + Bold Headings - + 粗标题 - + HTML Options - + HTML 选项 - + Add CSS Styles 添加CSS样式 - + Preserve Tab Characters 保留制表符 @@ -328,32 +363,32 @@ Heading 1 (Partition) - 标题 1 (分区) + 标题 1 (分区) Heading 2 (Chapter) - 标题2(章节) + 标题2(章节) Heading 3 (Scene) - 标题 3 (场景) + 标题 3 (场景) Heading 4 (Section) - 标题 4 (小节) + 标题 4 (小节) Text Paragraph - + 文本段落 Scene Separator - + 场景分隔符 @@ -365,43 +400,43 @@ Novel - 小说 + 小说 Plot - 情节 + 情节 Characters - 角色 + 角色 Locations - 位置 + 位置 Timeline - 时间线 + 时间线 Objects - 物品 + 物品 Entities - 条目 + 条目 @@ -413,17 +448,17 @@ Archive - 归档 + 归档 Templates - 模板 + 模板 Trash - 回收站 + 回收站 @@ -470,22 +505,22 @@ Active - 活跃 + 活跃 Inactive - 非活跃 + 非活跃 Tag - 标签 + 标签 Point of View - 视角 + 视角 @@ -496,12 +531,12 @@ Story - + 故事 Mentions - + 提及 @@ -521,7 +556,7 @@ Status - 状态 + 状态 @@ -561,12 +596,12 @@ Microsoft Word Document (.docx) - + Microsoft Word 文档 (.docx) HTML 5 (.html) - + HTML 5 (.html) @@ -586,12 +621,12 @@ Portable Document Format (.pdf) - + 便携文档格式 (.pdf) JSON + HTML 5 (.json) - + JSON + HTML 5 (.json) @@ -793,7 +828,7 @@ General - 通用 + 通用 @@ -808,7 +843,7 @@ Formatting - + 格式化 @@ -1033,7 +1068,7 @@ Open URL - + 打开 URL @@ -1088,7 +1123,7 @@ Ignore Word - + 忽略单词 @@ -1283,7 +1318,7 @@ Open in Editor - + 在编辑器中打开 @@ -1363,12 +1398,12 @@ 状态 - + Class 分类 - + Usage 用法 @@ -1845,12 +1880,12 @@ Word/Character Count - + 单词/字符计数 Breaks and Vertical Space - + 间断和垂直间距 @@ -1860,7 +1895,7 @@ Forced Line Break - + 强制换行 @@ -2217,7 +2252,7 @@ Duplicate Selected Build - + 复制所选构建 @@ -2262,7 +2297,7 @@ Show Page Breaks - + 显示分页符 @@ -2924,32 +2959,32 @@ Dialogue line symbols - + 对话线符号 Lines starting with any of these symbols are dialogue. - + 以这些符号开头的台词都是对话。 Narrator break symbol - + 叙述者中断符号 Symbol to indicate a narrator break in dialogue. - + 表示叙述者在对话中中断的符号。 Alternating dialogue/narration symbol - + 交替对话/叙述符号 Alternates dialogue highlighting within any paragraph. - + 在任意段落中替换高亮对话。 @@ -3280,12 +3315,12 @@ Permanently delete selected item(s)? - + 永久删除所选项目? Move selected item(s) to Trash? - + 将所选项目移动到回收站? @@ -3408,12 +3443,12 @@ Add Word - + 添加单词 Remove Word - + 删除单词 @@ -3739,7 +3774,7 @@ NovelSelector - + All Novel Folders 所有小说文件夹 @@ -3769,7 +3804,7 @@ Address - + 地址 @@ -3779,7 +3814,7 @@ Word Count - 字数 + 字数 @@ -3978,102 +4013,102 @@ Square - 方块 + 正方形 Triangle - 三角形 + 三角形 Nabla - 倒三角形 + 倒三角形 Diamond - 菱形 + 菱形 Pentagon - 五边形 + 五边形 Hexagon - 六边形 + 六边形 Star - 星形 + 星形 Pacman - 吃豆人形 + 吃豆人形 1/4 Circle - 1/4 圆 + 1/4 圆 Half Circle - 半圆 + 半圆 3/4 Circle - 3/4 圈 + 3/4 圈 Full Circle - 圆形 + 圆形 1 Bar - 1 条 + 1 条 2 Bars - 2 条 + 2 条 3 Bars - 3 条 + 3 条 4 Bars - 4 条 + 4 条 1 Block - 1 块 + 1 块 2 Blocks - 2 块 + 2 块 3 Blocks - 3 块 + 3 块 4 Blocks - 4 块 + 4 块 @@ -4104,57 +4139,57 @@ Characters - 角色 + 字符数 Characters in Text - 文本中的字符 + 文本中的字符 Characters in Headings - 标题中的字符 + 标题中的字符 Paragraphs - 段落 + 段落 Headings - 标题 + 标题 Characters, No Spaces - 字符,无空格 + 字符,无空格 Characters in Text, No Spaces - 文本中的字符,无空格 + 文本中的字符,无空格 Characters in Headings, No Spaces - 标题中的字符,无空格 + 标题中的字符,无空格 Words - 单词 + 单词 Words in Text - 文本中的单词 + 文本中的单词 Words in Headings - 标题中的单词 + 标题中的单词 @@ -4765,7 +4800,7 @@ Status - 状态 + 状态 @@ -4775,7 +4810,7 @@ Importance - 重要级 + 重要级 @@ -4815,32 +4850,32 @@ Add Label - + 添加标签 Delete Label - + 删除标签 Move Up - 上移 + 上移 Move Down - 下移 + 下移 Import Labels - + 导入标签 Export Labels - + 导出标签 @@ -4885,132 +4920,132 @@ Import File - 导入文件 + 导入文件 Export File - 导出文件 + 导出文件 _TreeContextMenu - + Empty Trash 清空回收站 - + Rename 重命名 - + Duplicate 重复 - + Open Document 打开文档 - + View Document 查看文档 - + Create New ... 创建新的... - + Rename to Heading 重命名为标题 - + Set Active to ... 设置活跃性为... - + Toggle Active 切换活动状态 - + Set Status to ... 设置状态为... - - + + Manage Labels ... 管理标签... - + Set Importance to ... 设置重要性为... - + Transform ... 转换 ... - - - - + + + + Convert to {0} 转换为 {0} - + Merge Child Items into Self 将子项合并到该项 - + Merge Child Items into New 将子项合并为新项 - + Merge Documents in Folder 合并文件夹中的文档 - + Split Document by Headings 按标题拆分文档 - + Expand All 全部展开 - + Collapse All 全部折叠 - + Delete Permanently 永久删除 - + Move to Trash 移动到回收站 - + Do you want to convert the folder to a {0}? This action cannot be reversed. 您想要将文件夹转换为 {0} 吗?此操作不能被撤销。 @@ -5018,7 +5053,7 @@ _UpdatableMenu - + From Template 从模板 diff --git a/novelwriter/assets/i18n/project_de_DE.json b/novelwriter/assets/i18n/project_de_DE.json index 5b5e2fd7..de81cccd 100644 --- a/novelwriter/assets/i18n/project_de_DE.json +++ b/novelwriter/assets/i18n/project_de_DE.json @@ -1,6 +1,7 @@ { "Synopsis": "Synopsis", "Short Description": "Kurzbeschreibung", + "Footnotes": "Fußnoten", "Comment": "Kommentar", "Notes": "Notizen", "Tag": "Schlagwort", @@ -13,6 +14,7 @@ "Objects": "Objekte", "Entities": "Organisationen", "Custom": "Benutzerdefiniert", + "New Page": "Neue Seite", "0": "Null", "1": "Eins", "2": "Zwei", diff --git a/novelwriter/assets/i18n/project_en_US.json b/novelwriter/assets/i18n/project_en_US.json index f8e30410..19cdda1e 100644 --- a/novelwriter/assets/i18n/project_en_US.json +++ b/novelwriter/assets/i18n/project_en_US.json @@ -1,6 +1,7 @@ { "Synopsis": "Synopsis", "Short Description": "Short Description", + "Footnotes": "Footnotes", "Comment": "Comment", "Notes": "Notes", "Tag": "Tag", @@ -13,6 +14,7 @@ "Objects": "Objects", "Entities": "Entities", "Custom": "Custom", + "New Page": "New Page", "0": "Zero", "1": "One", "2": "Two", diff --git a/novelwriter/assets/i18n/project_it_IT.json b/novelwriter/assets/i18n/project_it_IT.json index 2de0c507..63cf8e2b 100644 --- a/novelwriter/assets/i18n/project_it_IT.json +++ b/novelwriter/assets/i18n/project_it_IT.json @@ -1,6 +1,7 @@ { "Synopsis": "Sinossi", "Short Description": "Breve descrizione", + "Footnotes": "Note a piè pagina", "Comment": "Commento", "Notes": "Note", "Tag": "Etichetta", @@ -13,6 +14,7 @@ "Objects": "Oggetti", "Entities": "Enti", "Custom": "Personalizzato", + "New Page": "Nuova pagina", "0": "Zero", "1": "Uno", "2": "Due", diff --git a/novelwriter/assets/i18n/project_ja_JP.json b/novelwriter/assets/i18n/project_ja_JP.json index ec00438d..fc25009b 100644 --- a/novelwriter/assets/i18n/project_ja_JP.json +++ b/novelwriter/assets/i18n/project_ja_JP.json @@ -1,6 +1,7 @@ { "Synopsis": "あらすじ", "Short Description": "短い説明", + "Footnotes": "脚注", "Comment": "コメント ", "Notes": "ノート", "Tag": "タグ", @@ -13,6 +14,7 @@ "Objects": "オブジェクト", "Entities": "エンティティ", "Custom": "カスタム", + "New Page": "新規ページ", "0": "零", "1": "一", "2": "二", diff --git a/novelwriter/assets/i18n/project_nb_NO.json b/novelwriter/assets/i18n/project_nb_NO.json index cad8fb0c..813ac49b 100644 --- a/novelwriter/assets/i18n/project_nb_NO.json +++ b/novelwriter/assets/i18n/project_nb_NO.json @@ -1,6 +1,7 @@ { "Synopsis": "Sammendrag", "Short Description": "Kort beskrivelse", + "Footnotes": "Fotnoter", "Comment": "Kommentar", "Notes": "Notat", "Tag": "Knagg", @@ -13,6 +14,7 @@ "Objects": "Objekter", "Entities": "Enheter", "Custom": "Annet", + "New Page": "Ny side", "0": "null", "1": "én", "2": "to", diff --git a/novelwriter/assets/i18n/project_nl_NL.json b/novelwriter/assets/i18n/project_nl_NL.json index 0dbebd4e..0385af13 100644 --- a/novelwriter/assets/i18n/project_nl_NL.json +++ b/novelwriter/assets/i18n/project_nl_NL.json @@ -1,6 +1,7 @@ { "Synopsis": "Synopsis", "Short Description": "Korte beschrijving", + "Footnotes": "Voetnoten", "Comment": "Opmerking", "Notes": "Notities", "Tag": "Label", @@ -13,6 +14,7 @@ "Objects": "Objecten", "Entities": "Entiteiten", "Custom": "Aangepast", + "New Page": "Nieuwe pagina", "0": "nul", "1": "één", "2": "twee", diff --git a/novelwriter/assets/i18n/project_pl_PL.json b/novelwriter/assets/i18n/project_pl_PL.json index a5c86b1b..c1504d72 100644 --- a/novelwriter/assets/i18n/project_pl_PL.json +++ b/novelwriter/assets/i18n/project_pl_PL.json @@ -1,6 +1,7 @@ { "Synopsis": "Streszczenie", "Short Description": "Krótki opis", + "Footnotes": "Przypisy", "Comment": "Komentarz", "Notes": "Notatki", "Tag": "Znacznik", @@ -13,6 +14,7 @@ "Objects": "Obiekty", "Entities": "Podmioty", "Custom": "Różne", + "New Page": "Nowa strona", "0": "zero", "1": "pierwszy", "2": "drugi", diff --git a/novelwriter/assets/i18n/project_pt_BR.json b/novelwriter/assets/i18n/project_pt_BR.json index 15836cff..68dab5cd 100644 --- a/novelwriter/assets/i18n/project_pt_BR.json +++ b/novelwriter/assets/i18n/project_pt_BR.json @@ -1,6 +1,7 @@ { "Synopsis": "Sinopse", "Short Description": "Descrição breve", + "Footnotes": "Notas de rodapé", "Comment": "Comentário", "Notes": "Notas", "Tag": "Etiqueta", @@ -13,6 +14,7 @@ "Objects": "Objetos", "Entities": "Entidades", "Custom": "Outros", + "New Page": "Nova página", "0": "Zero", "1": "Um", "2": "Dois", diff --git a/novelwriter/assets/i18n/project_zh_CN.json b/novelwriter/assets/i18n/project_zh_CN.json index aa70ae65..b58192a0 100644 --- a/novelwriter/assets/i18n/project_zh_CN.json +++ b/novelwriter/assets/i18n/project_zh_CN.json @@ -1,6 +1,7 @@ { "Synopsis": "概要", "Short Description": "简短描述", + "Footnotes": "注释", "Comment": "注释", "Notes": "笔记", "Tag": "标签", @@ -13,6 +14,7 @@ "Objects": "物品", "Entities": "条目", "Custom": "自定义", + "New Page": "新建页面", "0": "零", "1": "一", "2": "二", diff --git a/novelwriter/core/buildsettings.py b/novelwriter/core/buildsettings.py index d390d2d2..b45021a7 100644 --- a/novelwriter/core/buildsettings.py +++ b/novelwriter/core/buildsettings.py @@ -159,6 +159,13 @@ SETTINGS_LABELS = { "format.indentFirstPar": QT_TRANSLATE_NOOP("Builds", "Indent First Paragraph"), "format.grpMargins": QT_TRANSLATE_NOOP("Builds", "Text Margins"), + "format.titleMargin": QT_TRANSLATE_NOOP("Builds", "Title and Partition"), + "format.h1Margin": QT_TRANSLATE_NOOP("Builds", "Heading 1 and Chapter"), + "format.h2Margin": QT_TRANSLATE_NOOP("Builds", "Heading 2 and Scene"), + "format.h3Margin": QT_TRANSLATE_NOOP("Builds", "Heading 3 and Section"), + "format.h4Margin": QT_TRANSLATE_NOOP("Builds", "Heading 4"), + "format.textMargin": QT_TRANSLATE_NOOP("Builds", "Text Paragraph"), + "format.sepMargin": QT_TRANSLATE_NOOP("Builds", "Scene Separator"), "format.grpPage": QT_TRANSLATE_NOOP("Builds", "Page Layout"), "format.pageUnit": QT_TRANSLATE_NOOP("Builds", "Unit"), diff --git a/novelwriter/formats/shared.py b/novelwriter/formats/shared.py index 549f6f19..8a2ab5e6 100644 --- a/novelwriter/formats/shared.py +++ b/novelwriter/formats/shared.py @@ -104,17 +104,18 @@ class BlockTyp(IntEnum): EMPTY = 1 # Empty line (new paragraph) TITLE = 2 # Title - HEAD1 = 3 # Heading 1 - HEAD2 = 4 # Heading 2 - HEAD3 = 5 # Heading 3 - HEAD4 = 6 # Heading 4 - TEXT = 7 # Text line - SEP = 8 # Scene separator - SKIP = 9 # Paragraph break - SUMMARY = 10 # Synopsis/short comment - NOTE = 11 # Note - COMMENT = 12 # Comment - KEYWORD = 13 # Tag/reference keywords + PART = 3 # Partition + HEAD1 = 4 # Heading 1 or Chapter + HEAD2 = 5 # Heading 2 or Scene + HEAD3 = 6 # Heading 3 or Section + HEAD4 = 7 # Heading 4 + TEXT = 8 # Text line + SEP = 9 # Scene separator + SKIP = 10 # Paragraph break + SUMMARY = 11 # Synopsis/short comment + NOTE = 12 # Note + COMMENT = 13 # Comment + KEYWORD = 14 # Tag/reference keywords class BlockFmt(Flag): diff --git a/novelwriter/formats/todocx.py b/novelwriter/formats/todocx.py index f3df8a31..ece62a23 100644 --- a/novelwriter/formats/todocx.py +++ b/novelwriter/formats/todocx.py @@ -271,7 +271,7 @@ class ToDocX(Tokenizer): if tType == BlockTyp.TEXT: self._processFragments(par, S_NORM, tText, tFormat) - elif tType == BlockTyp.TITLE: + elif tType in (BlockTyp.TITLE, BlockTyp.PART): self._processFragments(par, S_TITLE, tText, tFormat) elif tType == BlockTyp.HEAD1: diff --git a/novelwriter/formats/tohtml.py b/novelwriter/formats/tohtml.py index 51e746d0..fb2c1ee5 100644 --- a/novelwriter/formats/tohtml.py +++ b/novelwriter/formats/tohtml.py @@ -30,7 +30,7 @@ from pathlib import Path from time import time from novelwriter.common import formatTimeStamp -from novelwriter.constants import nwHtmlUnicode +from novelwriter.constants import nwHtmlUnicode, nwStyles from novelwriter.core.project import NWProject from novelwriter.formats.shared import BlockFmt, BlockTyp, T_Formats, TextFmt, stripEscape from novelwriter.formats.tokenizer import Tokenizer @@ -130,20 +130,6 @@ class ToHtml(Tokenizer): def doConvert(self) -> None: """Convert the list of text tokens into an HTML document.""" - if self._isNovel: - # For story files, we bump the titles one level up - h1Cl = " class='title'" - h1 = "h1" - h2 = "h1" - h3 = "h2" - h4 = "h3" - else: - h1Cl = "" - h1 = "h1" - h2 = "h2" - h3 = "h3" - h4 = "h4" - lines = [] for tType, tMeta, tText, tFmt, tStyle in self._blocks: @@ -213,25 +199,25 @@ class ToHtml(Tokenizer): if tType == BlockTyp.TEXT: lines.append(f"{self._formatText(tText, tFmt)}

\n") - elif tType == BlockTyp.TITLE: + elif tType in (BlockTyp.TITLE, BlockTyp.PART): tHead = tText.replace("\n", "
") lines.append(f"

{aNm}{tHead}

\n") elif tType == BlockTyp.HEAD1: tHead = tText.replace("\n", "
") - lines.append(f"<{h1}{h1Cl}{hStyle}>{aNm}{tHead}\n") + lines.append(f"{aNm}{tHead}\n") elif tType == BlockTyp.HEAD2: tHead = tText.replace("\n", "
") - lines.append(f"<{h2}{hStyle}>{aNm}{tHead}\n") + lines.append(f"{aNm}{tHead}\n") elif tType == BlockTyp.HEAD3: tHead = tText.replace("\n", "
") - lines.append(f"<{h3}{hStyle}>{aNm}{tHead}\n") + lines.append(f"{aNm}{tHead}\n") elif tType == BlockTyp.HEAD4: tHead = tText.replace("\n", "
") - lines.append(f"<{h4}{hStyle}>{aNm}{tHead}\n") + lines.append(f"{aNm}{tHead}\n") elif tType == BlockTyp.SEP: lines.append(f"

{tText}

\n") @@ -310,9 +296,7 @@ class ToHtml(Tokenizer): "\n" "\n" "\n" - "
\n" "{body:s}\n" - "
\n" "\n" "\n" ).format( @@ -359,6 +343,12 @@ class ToHtml(Tokenizer): mtSP = self._marginSep[0] mbSP = self._marginSep[1] + fSz0 = nwStyles.H_SIZES[0] + fSz1 = nwStyles.H_SIZES[1] + fSz2 = nwStyles.H_SIZES[2] + fSz3 = nwStyles.H_SIZES[3] + fSz4 = nwStyles.H_SIZES[4] + font = self._textFont fFam = font.family() fSz = font.pointSize() @@ -379,12 +369,25 @@ class ToHtml(Tokenizer): styles.append(f"a {{color: {lColor};}}") styles.append(f"mark {{background: {mColor};}}") styles.append(f"h1, h2, h3, h4 {{color: {hColor}; page-break-after: avoid;}}") - styles.append(f"h1 {{margin-top: {mtH1:.2f}em; margin-bottom: {mbH1:.2f}em;}}") - styles.append(f"h2 {{margin-top: {mtH2:.2f}em; margin-bottom: {mbH2:.2f}em;}}") - styles.append(f"h3 {{margin-top: {mtH3:.2f}em; margin-bottom: {mbH3:.2f}em;}}") - styles.append(f"h4 {{margin-top: {mtH4:.2f}em; margin-bottom: {mbH4:.2f}em;}}") styles.append( - f".title {{font-size: 2.5em; margin-top: {mtH0:.2f}em; margin-bottom: {mbH0:.2f}em;}}" + f"h1 {{font-size: {fSz1:.2f}em; " + f"margin-top: {mtH1:.2f}em; margin-bottom: {mbH1:.2f}em;}}" + ) + styles.append( + f"h2 {{font-size: {fSz2:.2f}em; " + f"margin-top: {mtH2:.2f}em; margin-bottom: {mbH2:.2f}em;}}" + ) + styles.append( + f"h3 {{font-size: {fSz3:.2f}em; " + f"margin-top: {mtH3:.2f}em; margin-bottom: {mbH3:.2f}em;}}" + ) + styles.append( + f"h4 {{font-size: {fSz4:.2f}em; " + f"margin-top: {mtH4:.2f}em; margin-bottom: {mbH4:.2f}em;}}" + ) + styles.append( + f".title {{font-size: {fSz0:.2f}em; " + f"margin-top: {mtH0:.2f}em; margin-bottom: {mbH0:.2f}em;}}" ) styles.append( f".sep {{text-align: center; margin-top: {mtSP:.2f}em; margin-bottom: {mbSP:.2f}em;}}" diff --git a/novelwriter/formats/tokenizer.py b/novelwriter/formats/tokenizer.py index b254400b..cd390f16 100644 --- a/novelwriter/formats/tokenizer.py +++ b/novelwriter/formats/tokenizer.py @@ -68,11 +68,11 @@ COMMENT_STYLE = { nwComment.COMMENT: ComStyle(), nwComment.STORY: ComStyle("", "modifier", "note"), } -HEADINGS = [BlockTyp.TITLE, BlockTyp.HEAD1, BlockTyp.HEAD2, BlockTyp.HEAD3, BlockTyp.HEAD4] -SKIP_INDENT = [ - BlockTyp.TITLE, BlockTyp.HEAD1, BlockTyp.HEAD2, BlockTyp.HEAD2, BlockTyp.HEAD3, - BlockTyp.HEAD4, BlockTyp.SEP, BlockTyp.SKIP, +HEADINGS = [ + BlockTyp.TITLE, BlockTyp.PART, BlockTyp.HEAD1, + BlockTyp.HEAD2, BlockTyp.HEAD3, BlockTyp.HEAD4, ] +SKIP_INDENT = HEADINGS + [BlockTyp.SEP, BlockTyp.SKIP] B_EMPTY: T_Block = (BlockTyp.EMPTY, "", "", [], BlockFmt.NONE) @@ -654,6 +654,7 @@ class Tokenizer(ABC): if not (isPlain or isNovel and sHide): tStyle |= self._titleStyle if isNovel: + tType = BlockTyp.PART if isPlain else BlockTyp.TITLE if sHide: tText = "" tType = BlockTyp.EMPTY @@ -687,6 +688,7 @@ class Tokenizer(ABC): sHide = self._hideChapter if isPlain else self._hideUnNum tFormat = self._fmtChapter if isPlain else self._fmtUnNum if isNovel: + tType = BlockTyp.HEAD1 # Promote if isPlain: self._hFormatter.incChapter() if sHide: @@ -721,6 +723,7 @@ class Tokenizer(ABC): sHide = self._hideScene if isPlain else self._hideHScene tFormat = self._fmtScene if isPlain else self._fmtHScene if isNovel: + tType = BlockTyp.HEAD2 # Promote self._hFormatter.incScene() if sHide: tText = "" @@ -752,6 +755,7 @@ class Tokenizer(ABC): tText = aLine[5:].strip() tType = BlockTyp.HEAD4 if isNovel: + tType = BlockTyp.HEAD3 # Promote if self._hideSection: tText = "" tType = BlockTyp.EMPTY @@ -927,12 +931,14 @@ class Tokenizer(ABC): for tType, tKey, tText, _, _ in self._blocks: if tType == BlockTyp.TITLE: prefix = "TT" + elif tType == BlockTyp.PART: + prefix = "PT" elif tType == BlockTyp.HEAD1: - prefix = "PT" if isNovel else "H1" + prefix = "CH" if isNovel else "H1" elif tType == BlockTyp.HEAD2: - prefix = "CH" if isNovel else "H2" - elif tType == BlockTyp.HEAD3: - prefix = "SC" if isNovel else "H3" + prefix = "SC" if isNovel else "H2" + elif tType == BlockTyp.HEAD3 and not isNovel: + prefix = "H3" else: continue diff --git a/novelwriter/formats/tomarkdown.py b/novelwriter/formats/tomarkdown.py index 85622025..2f87813b 100644 --- a/novelwriter/formats/tomarkdown.py +++ b/novelwriter/formats/tomarkdown.py @@ -113,9 +113,10 @@ class ToMarkdown(Tokenizer): tTemp = self._formatText(tText, tFormat, mTags).replace("\n", " \n") lines.append(f"{tTemp}\n\n") - elif tType == BlockTyp.TITLE: + elif tType in (BlockTyp.TITLE, BlockTyp.PART): tHead = tText.replace("\n", " - ") - lines.append(f"# {tHead}\n\n") + lines.append(f"{tHead}\n") + lines.append("="*len(tHead) + "\n\n") elif tType == BlockTyp.HEAD1: tHead = tText.replace("\n", " - ") diff --git a/novelwriter/formats/toodt.py b/novelwriter/formats/toodt.py index 347c1235..cc5005aa 100644 --- a/novelwriter/formats/toodt.py +++ b/novelwriter/formats/toodt.py @@ -363,7 +363,7 @@ class ToOdt(Tokenizer): else: self._addTextPar(xText, S_TEXT, oStyle, tText, tFmt=tFormat) - elif tType == BlockTyp.TITLE: + elif tType in (BlockTyp.TITLE, BlockTyp.PART): # Title must be text:p self._addTextPar(xText, S_TITLE, oStyle, tText, isHead=False) diff --git a/novelwriter/formats/toqdoc.py b/novelwriter/formats/toqdoc.py index 731990f5..0cccfd09 100644 --- a/novelwriter/formats/toqdoc.py +++ b/novelwriter/formats/toqdoc.py @@ -156,6 +156,7 @@ class ToQTextDocument(Tokenizer): self._mHead = { BlockTyp.TITLE: (fPx * self._marginTitle[0], fPx * self._marginTitle[1]), + BlockTyp.PART: (fPx * self._marginTitle[0], fPx * self._marginTitle[1]), BlockTyp.HEAD1: (fPx * self._marginHead1[0], fPx * self._marginHead1[1]), BlockTyp.HEAD2: (fPx * self._marginHead2[0], fPx * self._marginHead2[1]), BlockTyp.HEAD3: (fPx * self._marginHead3[0], fPx * self._marginHead3[1]), @@ -165,6 +166,7 @@ class ToQTextDocument(Tokenizer): hScale = self._scaleHeads self._sHead = { BlockTyp.TITLE: (nwStyles.H_SIZES.get(0, 1.0) * fPt) if hScale else fPt, + BlockTyp.PART: (nwStyles.H_SIZES.get(0, 1.0) * fPt) if hScale else fPt, BlockTyp.HEAD1: (nwStyles.H_SIZES.get(1, 1.0) * fPt) if hScale else fPt, BlockTyp.HEAD2: (nwStyles.H_SIZES.get(2, 1.0) * fPt) if hScale else fPt, BlockTyp.HEAD3: (nwStyles.H_SIZES.get(3, 1.0) * fPt) if hScale else fPt, diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index dbc64771..4e182a23 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -38,7 +38,7 @@ from PyQt6.QtWidgets import ( from novelwriter import CONFIG, SHARED from novelwriter.common import describeFont, fontMatcher, qtAddAction, qtLambda -from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwStyles, trConst +from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, trConst from novelwriter.core.buildsettings import BuildSettings, FilterMode from novelwriter.extensions.configlayout import ( NColorLabel, NFixedPage, NScrollableForm, NScrollablePage @@ -1065,7 +1065,7 @@ class _FormattingTab(NScrollableForm): self.titleMarginB.setFixedWidth(dbW) self.addRow( - trConst(nwStyles.T_LABEL["H0"]), + self._build.getLabel("format.titleMargin"), [pixT, self.titleMarginT, 6, pixB, self.titleMarginB], unit="em", ) @@ -1078,7 +1078,7 @@ class _FormattingTab(NScrollableForm): self.h1MarginB.setFixedWidth(dbW) self.addRow( - trConst(nwStyles.T_LABEL["H1"]), + self._build.getLabel("format.h1Margin"), [pixT, self.h1MarginT, 6, pixB, self.h1MarginB], unit="em", ) @@ -1091,7 +1091,7 @@ class _FormattingTab(NScrollableForm): self.h2MarginB.setFixedWidth(dbW) self.addRow( - trConst(nwStyles.T_LABEL["H2"]), + self._build.getLabel("format.h2Margin"), [pixT, self.h2MarginT, 6, pixB, self.h2MarginB], unit="em", ) @@ -1104,7 +1104,7 @@ class _FormattingTab(NScrollableForm): self.h3MarginB.setFixedWidth(dbW) self.addRow( - trConst(nwStyles.T_LABEL["H3"]), + self._build.getLabel("format.h3Margin"), [pixT, self.h3MarginT, 6, pixB, self.h3MarginB], unit="em", ) @@ -1117,7 +1117,7 @@ class _FormattingTab(NScrollableForm): self.h4MarginB.setFixedWidth(dbW) self.addRow( - trConst(nwStyles.T_LABEL["H4"]), + self._build.getLabel("format.h4Margin"), [pixT, self.h4MarginT, 6, pixB, self.h4MarginB], unit="em", ) @@ -1130,7 +1130,7 @@ class _FormattingTab(NScrollableForm): self.textMarginB.setFixedWidth(dbW) self.addRow( - trConst(nwStyles.T_LABEL["TT"]), + self._build.getLabel("format.textMargin"), [pixT, self.textMarginT, 6, pixB, self.textMarginB], unit="em", ) @@ -1143,7 +1143,7 @@ class _FormattingTab(NScrollableForm): self.sepMarginB.setFixedWidth(dbW) self.addRow( - trConst(nwStyles.T_LABEL["SP"]), + self._build.getLabel("format.sepMargin"), [pixT, self.sepMarginT, 6, pixB, self.sepMarginB], unit="em", ) diff --git a/tests/reference/baseConfig_novelwriter.conf b/tests/reference/baseConfig_novelwriter.conf index 530be083..acd76ca2 100644 --- a/tests/reference/baseConfig_novelwriter.conf +++ b/tests/reference/baseConfig_novelwriter.conf @@ -1,5 +1,5 @@ [Meta] -timestamp = 2025-01-11 00:46:32 +timestamp = 2025-01-26 18:17:44 [Main] font = @@ -86,4 +86,3 @@ searchmatchcap = False searchprojcase = False searchprojword = False searchprojregex = False - diff --git a/tests/reference/coreTools_ProjectBuilderA_Project.md b/tests/reference/coreTools_ProjectBuilderA_Project.md index f1fe2be4..d608ae09 100644 --- a/tests/reference/coreTools_ProjectBuilderA_Project.md +++ b/tests/reference/coreTools_ProjectBuilderA_Project.md @@ -12,25 +12,26 @@ Address 2   -# Test Project A +Test Project A +============== **By Jane Doe** Word Count: 11 -## Chapter 1 +# Chapter 1 * * * * * * -## Chapter 2 +# Chapter 2 * * * * * * -## Chapter 3 +# Chapter 3 * * * diff --git a/tests/reference/coreTools_ProjectBuilderB_Project.md b/tests/reference/coreTools_ProjectBuilderB_Project.md index 386a773c..7f6329f2 100644 --- a/tests/reference/coreTools_ProjectBuilderB_Project.md +++ b/tests/reference/coreTools_ProjectBuilderB_Project.md @@ -12,7 +12,8 @@ Address 2   -# Test Project B +Test Project B +============== **By Jane Doe** diff --git a/tests/reference/fmtToDocX_SaveDocument_document.xml b/tests/reference/fmtToDocX_SaveDocument_document.xml index 7ac52384..68bd89f3 100644 --- a/tests/reference/fmtToDocX_SaveDocument_document.xml +++ b/tests/reference/fmtToDocX_SaveDocument_document.xml @@ -121,7 +121,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -221,7 +221,7 @@ - + @@ -624,7 +624,7 @@ - + diff --git a/tests/reference/fmtToOdt_SaveFlat_document.fodt b/tests/reference/fmtToOdt_SaveFlat_document.fodt index 5c824b94..766b6d72 100644 --- a/tests/reference/fmtToOdt_SaveFlat_document.fodt +++ b/tests/reference/fmtToOdt_SaveFlat_document.fodt @@ -1,13 +1,13 @@ - 2024-11-29T00:34:11 - novelWriter/2.6b1 + 2025-01-25T16:05:30 + novelWriter/2.6rc1 Jane Smith 1234 P42DT12H34M56S Test Project - 2024-11-29T00:34:11 + 2025-01-25T16:05:30 Jane Smith @@ -79,7 +79,7 @@ - + @@ -116,9 +116,9 @@ My Novel Word Count: 00 paragrphsWeb: http://example.com - Chapter One + Chapter One Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc maximus justo non dictum commodo. Curabitur lacinia tempor orci vel luctus. Phasellus porta metus eu massa luctus, eget euismod risus rhoncus. Vestibulum sed arcu nisi. Maecenas pretium facilisis velit, vel semper lacus aliquam sit amet. Vestibulum vulputate neque ligula, rhoncus blandit turpis consequat id. Mauris sagittis vehicula imperdiet. Duis sed nunc pretium, ornare purus vel, sodales augue. Maecenas a suscipit risus. Quisque volutpat justo eleifend est ullamcorper fermentum. Donec ullamcorper et tortor a laoreet. Nam id risus nisi. Vivamus non imperdiet erat, sit amet imperdiet felis. Mauris vitae neque et est aliquam scelerisque non non ipsum. - Chapter Two + Chapter Two Nullam laoreet lorem nec malesuada vehicula. Vivamus tempus sodales lectus sed viverra. Aenean lacinia sollicitudin quam, quis tempus eros suscipit id. Duis sed rutrum nisi, ut pulvinar magna. Nam et cursus tortor. Phasellus ac odio tellus. Nullam in iaculis ipsum. Vivamus ante sem, ultricies sed varius quis, tristique nec tellus. Nullam eu urna vitae lacus hendrerit gravida. Quisque pulvinar erat ex, id efficitur velit sodales vitae. Proin vestibulum, sapien eget mattis euismod, tortor quam viverra risus, at congue mauris tortor eu nunc. Mauris pellentesque elit leo, quis eleifend sem placerat a. Vivamus iaculis dui eget tellus volutpat, ac varius nisi facilisis. 1 diff --git a/tests/reference/fmtToOdt_SaveFull_content.xml b/tests/reference/fmtToOdt_SaveFull_content.xml index 4c99fd4b..bbd01503 100644 --- a/tests/reference/fmtToOdt_SaveFull_content.xml +++ b/tests/reference/fmtToOdt_SaveFull_content.xml @@ -4,7 +4,7 @@ - + @@ -38,9 +38,9 @@ 0 paragrphsWeb: http://example.com - Chapter One + Chapter One Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc maximus justo non dictum commodo. Curabitur lacinia tempor orci vel luctus. Phasellus porta metus eu massa luctus, eget euismod risus rhoncus. Vestibulum sed arcu nisi. Maecenas pretium facilisis velit, vel semper lacus aliquam sit amet. Vestibulum vulputate neque ligula, rhoncus blandit turpis consequat id. Mauris sagittis vehicula imperdiet. Duis sed nunc pretium, ornare purus vel, sodales augue. Maecenas a suscipit risus. Quisque volutpat justo eleifend est ullamcorper fermentum. Donec ullamcorper et tortor a laoreet. Nam id risus nisi. Vivamus non imperdiet erat, sit amet imperdiet felis. Mauris vitae neque et est aliquam scelerisque non non ipsum. - Chapter Two + Chapter Two Nullam laoreet lorem nec malesuada vehicula. Vivamus tempus sodales lectus sed viverra. Aenean lacinia sollicitudin quam, quis tempus eros suscipit id. Duis sed rutrum nisi, ut pulvinar magna. Nam et cursus tortor. Phasellus ac odio tellus. Nullam in iaculis ipsum. Vivamus ante sem, ultricies sed varius quis, tristique nec tellus. Nullam eu urna vitae lacus hendrerit gravida. Quisque pulvinar erat ex, id efficitur velit sodales vitae. Proin vestibulum, sapien eget mattis euismod, tortor quam viverra risus, at congue mauris tortor eu nunc. Mauris pellentesque elit leo, quis eleifend sem placerat a. Vivamus iaculis dui eget tellus volutpat, ac varius nisi facilisis. 1 diff --git a/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md b/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md index a9627afd..96b1fc07 100644 --- a/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md +++ b/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md @@ -1,4 +1,5 @@ -# Lorem Ipsum +Lorem Ipsum +=========== **By lipsum.com** @@ -16,7 +17,7 @@ Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from “de Finibus Bonorum et Malorum” by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. -## Prologue +# Prologue **Synopsis:** Explanation from the lipsum.com website. @@ -24,11 +25,12 @@ _Lorem Ipsum_ is simply dummy text[1] of the printing and typesetting industry. See http://lipsum.com -# Part: Act One +Part: Act One +============= “Fusce maximus felis libero” -## Chapter: Chapter One +# Chapter: Chapter One **Point of View:** Bod **Plot:** Main @@ -38,7 +40,7 @@ See http://lipsum.com Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam. Praesent magna nunc, lacinia sit amet quam eget, aliquet ultrices justo. Morbi ornare enim et lorem rutrum finibus ut eu dolor. Aliquam a orci odio. Ut ultrices sem quis massa placerat, eget mollis nisl cursus. Cras vel sagittis justo. Ut non ultricies leo. Maecenas rutrum velit in est varius, et egestas massa pulvinar. -### Scene: Scene One +## Scene: Scene One **Point of View:** Bod **Plot:** Main @@ -50,13 +52,13 @@ Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim sc Aliquam ut nisl arcu. Ut ultricies, lorem dignissim rutrum convallis, risus orci tempus lectus, congue feugiat sem lectus vitae odio. Duis sit amet justo finibus, hendrerit nulla at, ullamcorper enim. Praesent vel tellus sit amet tellus vulputate bibendum. Morbi eleifend sagittis sem, ac volutpat ante congue non. In hac habitasse platea dictumst. Morbi lobortis fermentum elit, dignissim sagittis ligula volutpat lacinia. Vestibulum eu interdum odio. Integer ac purus commodo metus congue tempor non at urna. Sed eget tortor vel quam viverra egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec non convallis mauris, ac feugiat ex. -#### Section: Scene One, Section Two +### Section: Scene One, Section Two Integer vel libero ipsum. Donec varius aliquam libero, sit amet commodo urna hendrerit non. Nullam quis erat mollis nunc viverra volutpat tincidunt in odio. Nam vitae quam sem. Aliquam suscipit nulla non lorem pharetra semper. Ut suscipit erat eu ligula accumsan ultrices. Phasellus nisl tellus, placerat sed laoreet id, consectetur nec dolor. Sed fringilla ipsum id dapibus posuere. Aenean finibus pharetra tincidunt. Ut molestie malesuada nulla, id posuere lorem tincidunt eu. Aliquam tempor eros a est vulputate, scelerisque pulvinar ipsum fermentum. In hac habitasse platea dictumst. Curabitur congue, justo quis interdum fermentum, tellus nulla imperdiet sapien, eu interdum enim tellus condimentum metus. Vivamus nunc velit, dignissim ut ultrices sit amet, ultricies quis enim. Donec ut vestibulum neque. Vivamus semper neque id ex ullamcorper varius. Fusce mattis nibh viverra lorem sagittis, et tempor arcu congue. Suspendisse sit amet felis sed urna facilisis mattis eget vitae arcu. Proin eu magna hendrerit, tristique sem maximus, placerat diam. Nulla tristique sed velit sit amet varius. Etiam vel ornare magna, in vulputate arcu. Cras velit orci, tincidunt sed volutpat cursus, bibendum vel sem. Nunc vulputate pharetra tortor, ac consectetur neque tincidunt sit amet. Nulla ornare mi sed mi dignissim ultricies. Ut tincidunt bibendum mauris, sed elementum ex vulputate vel. Mauris fermentum, felis nec vehicula congue, felis lorem facilisis erat, a dictum dolor augue vitae quam. Maecenas rutrum tortor nec consequat eleifend. -### Scene: Scene Two +## Scene: Scene Two **Point of View:** Bod **Plot:** Main @@ -70,7 +72,7 @@ Proin vitae gravida nisl. Integer viverra orci turpis, sit amet pretium ligula f Nulla accumsan ante in pulvinar efficitur. Nulla non velit quis urna hendrerit bibendum. Suspendisse ultrices ante eu justo malesuada, sed fermentum enim rutrum. Nunc fermentum pharetra felis, vitae sollicitudin quam rutrum porta. Aliquam fringilla velit a mi laoreet, et luctus est rutrum. In gravida non ipsum sit amet tempus. Curabitur et eleifend purus. Nulla facilisi. -#### Section: Scene Two, Section Two +### Section: Scene Two, Section Two Suspendisse potenti. Fusce tempus lorem nec laoreet suscipit. Fusce vulputate nisl ac diam tincidunt, nec malesuada quam pellentesque. Maecenas congue, tellus quis commodo rutrum, magna leo egestas arcu, quis suscipit ex risus id ligula. Suspendisse potenti. Morbi blandit lacus vitae laoreet vulputate. Donec vitae tellus eleifend, lobortis eros eu, tincidunt enim. Nullam et ullamcorper nisi. Vivamus tellus ex, lobortis quis rutrum ut, dapibus sit amet turpis. Phasellus pellentesque metus diam, commodo tristique ante commodo ac. Ut mollis ipsum nec diam blandit sollicitudin. Duis bibendum lacus nec commodo dapibus. Sed condimentum luctus ante, id ultricies urna varius nec. Nam convallis magna nec bibendum ultrices. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed auctor pharetra quam, vitae porta ex bibendum eu. @@ -78,17 +80,17 @@ Vivamus ut venenatis lectus. Phasellus nec elit id sem dictum ornare. Quisque fe Ut et consequat enim, quis ornare nibh. In lectus neque, mollis et suscipit et, vestibulum vitae augue. Praesent id ante sit amet odio venenatis placerat a at erat. Sed sed metus sed nisi dictum varius. Integer tincidunt fermentum purus ac porta. Fusce porttitor non risus eget tristique. Donec augue nunc, maximus at fermentum vel, varius et neque. Ut sed consectetur mauris. Quisque ipsum enim, porttitor vitae imperdiet sit amet, tempor et mauris. Aliquam malesuada tincidunt lectus quis blandit. Sed commodo orci felis, quis ultrices tellus facilisis sed. Nunc vel varius est. Duis ullamcorper eu metus in pulvinar. Morbi at sapien dictum, rutrum mauris eget, interdum tellus. -## Why do we use it? +# Why do we use it? **Comment:** Exctracted from the lipsum.com website. - It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. + It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. - The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. + The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. - Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). -## Chapter: Chapter Two +# Chapter: Chapter Two **Point of View:** Bod **Plot:** Main @@ -98,7 +100,7 @@ Ut et consequat enim, quis ornare nibh. In lectus neque, mollis et suscipit et, Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue. Vestibulum pharetra fermentum leo, sed faucibus eros placerat quis. In hac habitasse platea dictumst. Donec metus massa, rutrum quis consequat et, tincidunt ac felis. Duis mollis metus ac nunc tincidunt blandit. Ut aliquet velit eu odio pharetra condimentum. Integer rutrum lacus orci, id venenatis libero accumsan at. -### Scene: Scene Three +## Scene: Scene Three **Point of View:** Bod **Plot:** Main @@ -114,7 +116,7 @@ Maecenas ullamcorper lacus nec turpis finibus aliquet eget rutrum augue. Integer Aenean dapibus vulputate purus, sit amet tempor nunc suscipit consequat. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris auctor congue eros, non pellentesque neque dapibus ac. Vestibulum non leo nec urna lacinia eleifend quis et diam. Praesent eu nisi magna. Nulla at magna massa. Suspendisse porta varius scelerisque. Duis at auctor dolor, non dapibus urna. Nunc venenatis feugiat magna non molestie. Aliquam non ornare ex. Quisque eu ultrices velit, quis pellentesque eros. Phasellus eleifend, elit id imperdiet aliquam, nulla quam molestie turpis, at egestas odio ante et tortor. Suspendisse fringilla condimentum justo, at aliquet odio aliquam ac. -### Scene: Scene Four +## Scene: Scene Four **Point of View:** Bod **Plot:** Main @@ -134,7 +136,7 @@ Donec ipsum eros, vestibulum sit amet cursus eget, iaculis quis dolor. Pellentes Phasellus eu nunc ut nunc faucibus laoreet. Aliquam at magna risus. Praesent lobortis, risus finibus semper varius, magna purus vestibulum eros, at pulvinar sapien enim a ex. In scelerisque malesuada ex, sit amet egestas neque condimentum sed. Praesent vulputate efficitur massa. Cras at accumsan ligula. In elementum lectus eget blandit dictum. Nam vitae libero ut justo eleifend rutrum ac nec arcu. Aliquam sodales in quam congue vestibulum. Aliquam in accumsan sapien. Quisque lobortis nisl nisi, vitae bibendum turpis efficitur sed. Vestibulum tempor nulla eget nisi convallis, blandit sagittis ipsum convallis. Donec odio nibh, ultrices quis odio in, mollis euismod libero. -### Scene: Scene Five +## Scene: Scene Five **Point of View:** Bod **Plot:** Main @@ -152,7 +154,8 @@ Pellentesque rhoncus pharetra eros, non mollis nisi pretium non. Mauris accumsan Integer egestas maximus leo eu facilisis. Nunc rhoncus dignissim lectus eu lacinia. Praesent lacinia urna porttitor aliquam condimentum. Nulla eu eros dictum, dictum nunc vitae, sagittis nibh. Integer ante neque, consequat nec sollicitudin id, consectetur vitae dolor. Nullam volutpat sem orci, quis viverra magna auctor a. Suspendisse potenti. Maecenas commodo sed neque pellentesque vehicula. Sed luctus nisl risus, elementum semper purus interdum vel. Ut pulvinar, massa sit amet venenatis placerat, nunc lacus hendrerit odio, non aliquet nunc risus eu lectus. Maecenas feugiat semper ligula, id lobortis sem porta eu. Integer posuere elit magna, at mollis eros bibendum et. Ut imperdiet purus vel nulla aliquam maximus. Morbi sodales purus tellus, a rhoncus sem rutrum sit amet. Quisque risus sem, laoreet nec convallis nec, rutrum vitae justo. -# Notes: Characters +Notes: Characters +================= # Nobody Owens @@ -165,7 +168,8 @@ Suspendisse faucibus est auctor orci mollis luctus. Praesent quis sodales neque. Nullam scelerisque velit et tortor congue vestibulum a at nisi. Vivamus sodales ut turpis a convallis. In dignissim nibh at luctus sodales. Etiam sit amet rhoncus massa. Phasellus ligula magna, sollicitudin non imperdiet sit amet, volutpat vel magna. Nunc vestibulum tempor lectus, sit amet porta nunc hendrerit in. Curabitur non odio sit amet massa tincidunt facilisis. Integer et luctus nunc, eget euismod leo. Praesent faucibus metus sed purus convallis scelerisque. Fusce viverra lorem et placerat malesuada. In at elit malesuada, ullamcorper risus vitae, sodales dolor. Donec quis elementum lectus. Quisque eu eros at dui imperdiet euismod ut id neque. -# Notes: Plot +Notes: Plot +=========== # Main Plot @@ -175,7 +179,8 @@ Suspendisse vulputate malesuada pellentesque. Aenean sollicitudin cursus mi, vit Mauris ut erat eu lorem malesuada egestas vel vel urna. Maecenas ac semper quam. Maecenas aliquet metus non interdum mattis. Proin consectetur molestie ligula. Aliquam sollicitudin pulvinar urna a pellentesque. Suspendisse ultrices, est mattis scelerisque porta, nisi nisi laoreet nisl, non condimentum quam ante a velit. Proin scelerisque justo augue, nec laoreet ligula egestas at. Etiam enim quam, ultrices non accumsan hendrerit, elementum vel ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam efficitur odio libero, in vestibulum arcu aliquam at. Cras non vehicula augue. Integer lobortis, est vitae aliquam facilisis, metus ligula aliquet eros, at porttitor sem tortor eget massa. Aliquam varius scelerisque neque sed gravida. Aenean eleifend lorem id ante elementum sollicitudin. Proin commodo massa a quam volutpat, mollis fermentum turpis efficitur. -# Notes: World +Notes: World +============ # Ancient Europe diff --git a/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.htm b/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.htm index 8632ec97..f605b0fa 100644 --- a/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.htm +++ b/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.htm @@ -9,16 +9,15 @@ p {text-align: left; line-height: 150%; margin-top: 0.00em; margin-bottom: 0.60e a {color: #4271ae;} mark {background: #ffffa6;} h1, h2, h3, h4 {color: #4271ae; page-break-after: avoid;} -h1 {margin-top: 1.50em; margin-bottom: 0.60em;} -h2 {margin-top: 1.50em; margin-bottom: 0.60em;} -h3 {margin-top: 1.20em; margin-bottom: 0.60em;} -h4 {margin-top: 1.20em; margin-bottom: 0.60em;} -.title {font-size: 2.5em; margin-top: 1.50em; margin-bottom: 0.60em;} +h1 {font-size: 2.00em; margin-top: 1.50em; margin-bottom: 0.60em;} +h2 {font-size: 1.75em; margin-top: 1.50em; margin-bottom: 0.60em;} +h3 {font-size: 1.50em; margin-top: 1.20em; margin-bottom: 0.60em;} +h4 {font-size: 1.25em; margin-top: 1.20em; margin-bottom: 0.60em;} +.title {font-size: 2.50em; margin-top: 1.50em; margin-bottom: 0.60em;} .sep {text-align: center; margin-top: 1.20em; margin-bottom: 1.20em;} -

Lorem Ipsum

By lipsum.com

Word Count: 4,169

@@ -125,6 +124,5 @@ h4 {margin-top: 1.20em; margin-bottom: 0.60em;}
  1. Lorem ipsum is typically a corrupted version of De finibus bonorum et malorum, a 1st-century BC text by the Roman statesman and philosopher Cicero, with words altered, added, and removed to make it nonsensical and improper Latin. (Source: Wikipedia)

-
diff --git a/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.json b/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.json index 8ad0ccc8..7a4134ef 100644 --- a/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.json +++ b/tests/reference/mBuildDocBuild_HTML5_Lorem_Ipsum.json @@ -2,8 +2,8 @@ "meta": { "projectName": "Lorem Ipsum", "novelAuthor": "lipsum.com", - "buildTime": 1731526420, - "buildTimeStr": "2024-11-13 20:33:40" + "buildTime": 1737835371, + "buildTimeStr": "2025-01-25 21:02:51" }, "text": { "css": [ @@ -12,11 +12,11 @@ "a {color: #4271ae;}", "mark {background: #ffffa6;}", "h1, h2, h3, h4 {color: #4271ae; page-break-after: avoid;}", - "h1 {margin-top: 1.50em; margin-bottom: 0.60em;}", - "h2 {margin-top: 1.50em; margin-bottom: 0.60em;}", - "h3 {margin-top: 1.20em; margin-bottom: 0.60em;}", - "h4 {margin-top: 1.20em; margin-bottom: 0.60em;}", - ".title {font-size: 2.5em; margin-top: 1.50em; margin-bottom: 0.60em;}", + "h1 {font-size: 2.00em; margin-top: 1.50em; margin-bottom: 0.60em;}", + "h2 {font-size: 1.75em; margin-top: 1.50em; margin-bottom: 0.60em;}", + "h3 {font-size: 1.50em; margin-top: 1.20em; margin-bottom: 0.60em;}", + "h4 {font-size: 1.25em; margin-top: 1.20em; margin-bottom: 0.60em;}", + ".title {font-size: 2.50em; margin-top: 1.50em; margin-bottom: 0.60em;}", ".sep {text-align: center; margin-top: 1.20em; margin-bottom: 1.20em;}" ], "html": [ diff --git a/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt b/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt index 94125e3a..ffb82ce7 100644 --- a/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt +++ b/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt @@ -1,13 +1,13 @@ - 2024-11-29T00:39:37 - novelWriter/2.6b1 + 2025-01-25T16:15:30 + novelWriter/2.6rc1 lipsum.com 51 P0DT0H40M56S Lorem Ipsum - 2024-11-29T00:39:37 + 2025-01-25T16:15:30 lipsum.com @@ -88,7 +88,7 @@ - + @@ -97,7 +97,7 @@ - + @@ -106,9 +106,6 @@ - - - @@ -174,7 +171,7 @@ Comment: Exctracted from the lipsum.com website. Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of “de Finibus Bonorum et Malorum” (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, “Lorem ipsum dolor sit amet..”, comes from a line in section 1.10.32. The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from “de Finibus Bonorum et Malorum” by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. - Prologue + Prologue Synopsis: Explanation from the lipsum.com website. Lorem Ipsum is simply dummy text 1 @@ -183,25 +180,25 @@
of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
See http://lipsum.com - Part: Act One + Part: Act One “Fusce maximus felis libero” - Chapter: Chapter One + Chapter: Chapter One Point of View: Bod Plot: Main Locations: Europe Synopsis: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam. Praesent magna nunc, lacinia sit amet quam eget, aliquet ultrices justo. Morbi ornare enim et lorem rutrum finibus ut eu dolor. Aliquam a orci odio. Ut ultrices sem quis massa placerat, eget mollis nisl cursus. Cras vel sagittis justo. Ut non ultricies leo. Maecenas rutrum velit in est varius, et egestas massa pulvinar. - Scene: Scene One + Scene: Scene One Point of View: Bod Plot: Main Locations: Europe Synopsis: Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur. Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur. Donec quis ante nunc. Mauris ut leo ipsum. Vestibulum est neque, hendrerit nec neque a, ullamcorper lobortis tellus. Fusce sollicitudin purus quis congue bibendum. Aliquam condimentum ipsum tristique blandit tristique. Donec pulvinar neque ac suscipit malesuada. Aliquam ut nisl arcu. Ut ultricies, lorem dignissim rutrum convallis, risus orci tempus lectus, congue feugiat sem lectus vitae odio. Duis sit amet justo finibus, hendrerit nulla at, ullamcorper enim. Praesent vel tellus sit amet tellus vulputate bibendum. Morbi eleifend sagittis sem, ac volutpat ante congue non. In hac habitasse platea dictumst. Morbi lobortis fermentum elit, dignissim sagittis ligula volutpat lacinia. Vestibulum eu interdum odio. Integer ac purus commodo metus congue tempor non at urna. Sed eget tortor vel quam viverra egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec non convallis mauris, ac feugiat ex. - Section: Scene One, Section Two + Section: Scene One, Section Two Integer vel libero ipsum. Donec varius aliquam libero, sit amet commodo urna hendrerit non. Nullam quis erat mollis nunc viverra volutpat tincidunt in odio. Nam vitae quam sem. Aliquam suscipit nulla non lorem pharetra semper. Ut suscipit erat eu ligula accumsan ultrices. Phasellus nisl tellus, placerat sed laoreet id, consectetur nec dolor. Sed fringilla ipsum id dapibus posuere. Aenean finibus pharetra tincidunt. Ut molestie malesuada nulla, id posuere lorem tincidunt eu. Aliquam tempor eros a est vulputate, scelerisque pulvinar ipsum fermentum. In hac habitasse platea dictumst. Curabitur congue, justo quis interdum fermentum, tellus nulla imperdiet sapien, eu interdum enim tellus condimentum metus. Vivamus nunc velit, dignissim ut ultrices sit amet, ultricies quis enim. Donec ut vestibulum neque. Vivamus semper neque id ex ullamcorper varius. Fusce mattis nibh viverra lorem sagittis, et tempor arcu congue. Suspendisse sit amet felis sed urna facilisis mattis eget vitae arcu. Proin eu magna hendrerit, tristique sem maximus, placerat diam. Nulla tristique sed velit sit amet varius. Etiam vel ornare magna, in vulputate arcu. Cras velit orci, tincidunt sed volutpat cursus, bibendum vel sem. Nunc vulputate pharetra tortor, ac consectetur neque tincidunt sit amet. Nulla ornare mi sed mi dignissim ultricies. Ut tincidunt bibendum mauris, sed elementum ex vulputate vel. Mauris fermentum, felis nec vehicula congue, felis lorem facilisis erat, a dictum dolor augue vitae quam. Maecenas rutrum tortor nec consequat eleifend. - Scene: Scene Two + Scene: Scene Two Point of View: Bod Plot: Main Locations: Europe @@ -209,22 +206,22 @@ Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer sapien nulla, dictum at lacus a, dignissim consectetur dolor. Nunc vel eleifend lacus, eu dapibus orci. Vestibulum facilisis bibendum aliquam. Aliquam posuere, turpis ac bibendum varius, sem tellus venenatis risus, in elementum massa enim ac lorem. Integer in sem ac diam blandit ultricies ut in nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sit amet erat est. Curabitur vitae cursus justo, sit amet placerat dolor. Vivamus eu felis hendrerit, tincidunt massa rutrum, maximus arcu. Pellentesque commodo justo odio, vel rutrum nulla tincidunt eu. Integer non neque condimentum, convallis diam non, varius ligula. Aliquam eget sapien mauris. Aenean pharetra nunc nisi, vel maximus ante tristique sit amet. Aliquam risus metus, interdum non odio eu, consectetur lacinia sapien. Proin vitae gravida nisl. Integer viverra orci turpis, sit amet pretium ligula facilisis consequat. Nulla interdum commodo metus, mollis consequat dui tincidunt et. Proin consequat bibendum justo id commodo. Fusce fermentum nunc turpis, eu vestibulum risus feugiat ut. Sed scelerisque vel ligula ut interdum. Suspendisse ac blandit ligula, sagittis fringilla dolor. In tincidunt convallis diam et ornare. Aenean id dignissim est, ut rhoncus quam. Donec vitae nisl velit. In convallis nibh ut augue dignissim, eu elementum quam cursus. Phasellus in lectus lorem. Curabitur in pellentesque nisi, at gravida sapien. Sed cursus justo volutpat lacus placerat, sit amet dignissim turpis commodo. Aliquam vitae orci eget nulla posuere condimentum in ut felis. Nulla accumsan ante in pulvinar efficitur. Nulla non velit quis urna hendrerit bibendum. Suspendisse ultrices ante eu justo malesuada, sed fermentum enim rutrum. Nunc fermentum pharetra felis, vitae sollicitudin quam rutrum porta. Aliquam fringilla velit a mi laoreet, et luctus est rutrum. In gravida non ipsum sit amet tempus. Curabitur et eleifend purus. Nulla facilisi. - Section: Scene Two, Section Two + Section: Scene Two, Section Two Suspendisse potenti. Fusce tempus lorem nec laoreet suscipit. Fusce vulputate nisl ac diam tincidunt, nec malesuada quam pellentesque. Maecenas congue, tellus quis commodo rutrum, magna leo egestas arcu, quis suscipit ex risus id ligula. Suspendisse potenti. Morbi blandit lacus vitae laoreet vulputate. Donec vitae tellus eleifend, lobortis eros eu, tincidunt enim. Nullam et ullamcorper nisi. Vivamus tellus ex, lobortis quis rutrum ut, dapibus sit amet turpis. Phasellus pellentesque metus diam, commodo tristique ante commodo ac. Ut mollis ipsum nec diam blandit sollicitudin. Duis bibendum lacus nec commodo dapibus. Sed condimentum luctus ante, id ultricies urna varius nec. Nam convallis magna nec bibendum ultrices. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed auctor pharetra quam, vitae porta ex bibendum eu. Vivamus ut venenatis lectus. Phasellus nec elit id sem dictum ornare. Quisque feugiat, diam eget sagittis ultricies, orci turpis efficitur nisi, et fringilla justo odio nec nibh. In hac habitasse platea dictumst. Sed tempus bibendum feugiat. Etiam luctus mauris arcu, non interdum ipsum ultrices id. Vivamus blandit urna sit amet scelerisque vulputate. Quisque in metus eget massa rutrum dictum sit amet sed nulla. Vivamus vel efficitur dolor. Ut et consequat enim, quis ornare nibh. In lectus neque, mollis et suscipit et, vestibulum vitae augue. Praesent id ante sit amet odio venenatis placerat a at erat. Sed sed metus sed nisi dictum varius. Integer tincidunt fermentum purus ac porta. Fusce porttitor non risus eget tristique. Donec augue nunc, maximus at fermentum vel, varius et neque. Ut sed consectetur mauris. Quisque ipsum enim, porttitor vitae imperdiet sit amet, tempor et mauris. Aliquam malesuada tincidunt lectus quis blandit. Sed commodo orci felis, quis ultrices tellus facilisis sed. Nunc vel varius est. Duis ullamcorper eu metus in pulvinar. Morbi at sapien dictum, rutrum mauris eget, interdum tellus. - Why do we use it? + Why do we use it? Comment: Exctracted from the lipsum.com website. It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). - Chapter: Chapter Two + Chapter: Chapter Two Point of View: Bod Plot: Main Locations: Europe Synopsis: Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue. Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue. Vestibulum pharetra fermentum leo, sed faucibus eros placerat quis. In hac habitasse platea dictumst. Donec metus massa, rutrum quis consequat et, tincidunt ac felis. Duis mollis metus ac nunc tincidunt blandit. Ut aliquet velit eu odio pharetra condimentum. Integer rutrum lacus orci, id venenatis libero accumsan at. - Scene: Scene Three + Scene: Scene Three Point of View: Bod Plot: Main Locations: Europe @@ -233,7 +230,7 @@ Pellentesque id sagittis dui. Praesent ut nisi sit amet libero euismod ornare. Vestibulum vehicula, lorem eget aliquet imperdiet, eros nulla iaculis mi, vel bibendum est dui sed orci. Nullam vitae lorem rutrum, euismod lacus id, ullamcorper lectus. Duis nec commodo mi, a fringilla diam. Vestibulum molestie nibh tristique, viverra augue non, aliquet metus. Phasellus a tellus ac nisl tempor aliquet. Nulla vitae sapien rutrum augue ornare ultrices a quis nisi. Sed pulvinar tincidunt ex. Fusce vel sem vitae ante pellentesque lobortis. Maecenas ullamcorper lacus nec turpis finibus aliquet eget rutrum augue. Integer lorem erat, faucibus non lacus lacinia, pulvinar egestas felis. Proin rutrum nunc eget nulla varius, id blandit mauris tincidunt. Donec sit amet ullamcorper nisi, ut efficitur mi. Aliquam aliquet, nulla eget rhoncus tristique, justo lorem consectetur dui, id ornare leo odio sed tellus. Curabitur interdum velit a turpis condimentum venenatis. Nunc rhoncus sem ac augue auctor, nec malesuada ex fringilla. Vestibulum egestas diam sed leo consectetur vulputate quis eget enim. Nam tincidunt metus sit amet maximus ullamcorper. Sed placerat velit vitae massa efficitur viverra. Etiam eleifend dignissim ante, sed luctus nisl tristique a. In vestibulum pharetra dolor in molestie. Vivamus auctor massa ac magna imperdiet, sit amet iaculis turpis finibus. Aenean dapibus vulputate purus, sit amet tempor nunc suscipit consequat. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris auctor congue eros, non pellentesque neque dapibus ac. Vestibulum non leo nec urna lacinia eleifend quis et diam. Praesent eu nisi magna. Nulla at magna massa. Suspendisse porta varius scelerisque. Duis at auctor dolor, non dapibus urna. Nunc venenatis feugiat magna non molestie. Aliquam non ornare ex. Quisque eu ultrices velit, quis pellentesque eros. Phasellus eleifend, elit id imperdiet aliquam, nulla quam molestie turpis, at egestas odio ante et tortor. Suspendisse fringilla condimentum justo, at aliquet odio aliquam ac. - Scene: Scene Four + Scene: Scene Four Point of View: Bod Plot: Main Locations: Europe @@ -244,7 +241,7 @@ Aenean vestibulum magna placerat fermentum tempus. Nam auctor condimentum nunc, in elementum quam ornare a. Etiam in ipsum elit. Proin pharetra, dolor sollicitudin pellentesque congue, lorem dolor ultricies magna, non iaculis risus nisl dictum diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus vel euismod nibh, et lobortis dolor. Maecenas dui odio, gravida nec molestie ut, feugiat ut arcu. Pellentesque risus sapien, gravida a convallis quis, ullamcorper porttitor sapien. Donec ipsum eros, vestibulum sit amet cursus eget, iaculis quis dolor. Pellentesque magna augue, tristique dapibus mi vitae, molestie venenatis enim. Nam malesuada, turpis volutpat rhoncus ullamcorper, justo est eleifend orci, ut luctus risus ex rutrum arcu. Sed mi elit, feugiat rhoncus ornare sed, porta id leo. Pellentesque feugiat nulla tincidunt erat suscipit, eu congue lacus hendrerit. Morbi pulvinar enim sed consequat auctor. Ut eleifend enim sem, vitae euismod ex ultricies sit amet. Curabitur eu efficitur nisi, suscipit finibus sapien. In sodales blandit erat, vestibulum pulvinar ante volutpat nec. Vivamus dictum non libero at molestie. Donec sit amet neque in ante convallis pretium. Nunc vel iaculis dui. Phasellus eu nunc ut nunc faucibus laoreet. Aliquam at magna risus. Praesent lobortis, risus finibus semper varius, magna purus vestibulum eros, at pulvinar sapien enim a ex. In scelerisque malesuada ex, sit amet egestas neque condimentum sed. Praesent vulputate efficitur massa. Cras at accumsan ligula. In elementum lectus eget blandit dictum. Nam vitae libero ut justo eleifend rutrum ac nec arcu. Aliquam sodales in quam congue vestibulum. Aliquam in accumsan sapien. Quisque lobortis nisl nisi, vitae bibendum turpis efficitur sed. Vestibulum tempor nulla eget nisi convallis, blandit sagittis ipsum convallis. Donec odio nibh, ultrices quis odio in, mollis euismod libero. - Scene: Scene Five + Scene: Scene Five Point of View: Bod Plot: Main Locations: Europe @@ -254,19 +251,19 @@ Donec luctus lectus efficitur, blandit nisi vitae, dignissim tellus. Pellentesque euismod pharetra augue gravida hendrerit. Quisque nisi mi, mattis ac nisi non, maximus malesuada ante. Nulla lobortis, diam eu ornare ornare, tellus enim feugiat arcu, non vestibulum tortor nunc eu justo. Integer blandit felis justo, eu semper est scelerisque vel. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nam ultricies, nisi vel elementum commodo, nisl dolor tincidunt magna, sed varius est nunc at lectus. Aliquam dolor tortor, sodales placerat ultricies quis, sodales quis sapien. Duis ullamcorper sollicitudin risus at mattis. Integer consequat et nunc at condimentum. Pellentesque cursus congue augue, non suscipit lectus sodales ut. Nam a mi bibendum, blandit nisl eu, accumsan nunc. Aliquam a ex mauris. Sed nec sem quis arcu dignissim tempus eget et turpis. Ut sed ex nec ipsum ultrices lobortis. Pellentesque rhoncus pharetra eros, non mollis nisi pretium non. Mauris accumsan quis odio quis euismod. Maecenas ultrices, augue et aliquam tincidunt, erat tellus ornare ligula, quis ultrices turpis nibh vel justo. Fusce gravida odio tellus. In a congue diam. Mauris consequat ex id leo lacinia dictum. Fusce id sem sodales, ultrices sapien ac, convallis orci. Donec gravida nunc sit amet nisi hendrerit, sed porta enim aliquam. In hac habitasse platea dictumst. Cras a orci felis. Curabitur non felis nec urna maximus auctor ut ut nisi. Curabitur at turpis eleifend, blandit eros at, molestie odio. Phasellus euismod neque augue. Integer egestas maximus leo eu facilisis. Nunc rhoncus dignissim lectus eu lacinia. Praesent lacinia urna porttitor aliquam condimentum. Nulla eu eros dictum, dictum nunc vitae, sagittis nibh. Integer ante neque, consequat nec sollicitudin id, consectetur vitae dolor. Nullam volutpat sem orci, quis viverra magna auctor a. Suspendisse potenti. Maecenas commodo sed neque pellentesque vehicula. Sed luctus nisl risus, elementum semper purus interdum vel. Ut pulvinar, massa sit amet venenatis placerat, nunc lacus hendrerit odio, non aliquet nunc risus eu lectus. Maecenas feugiat semper ligula, id lobortis sem porta eu. Integer posuere elit magna, at mollis eros bibendum et. Ut imperdiet purus vel nulla aliquam maximus. Morbi sodales purus tellus, a rhoncus sem rutrum sit amet. Quisque risus sem, laoreet nec convallis nec, rutrum vitae justo. - Notes: Characters + Notes: Characters Nobody Owens Tag: Bod | Nobody Owens Plot: Main Pellentesque nec erat ut nulla posuere commodo. Curabitur nisi augue, imperdiet et porta imperdiet, efficitur id leo. Cras finibus arcu at nibh commodo congue. Proin suscipit placerat condimentum. Aenean ante enim, cursus id lorem a, blandit venenatis nibh. Maecenas suscipit porta elit, sit amet porta felis porttitor eu. Sed a dui nibh. Phasellus sed faucibus dui. Pellentesque felis nulla, ultrices non efficitur quis, rutrum id mi. Mauris tempus auctor nisl, in bibendum enim pellentesque sit amet. Proin nunc lacus, imperdiet nec posuere ac, interdum non lectus. Suspendisse faucibus est auctor orci mollis luctus. Praesent quis sodales neque. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec sodales rutrum mattis. In in sem ornare, consequat nulla ac, convallis arcu. Duis ac metus id felis commodo commodo sit amet eget diam. Curabitur rhoncus lacinia leo at sodales. Etiam finibus porta diam a viverra. Praesent nisi urna, volutpat sit amet odio at, vehicula vehicula leo. In non enim eget nisl luctus commodo. Pellentesque pellentesque at lectus at luctus. Quisque nec felis bibendum, lacinia libero ut, lacinia eros. Integer finibus ultricies nibh sit amet placerat. Nullam scelerisque velit et tortor congue vestibulum a at nisi. Vivamus sodales ut turpis a convallis. In dignissim nibh at luctus sodales. Etiam sit amet rhoncus massa. Phasellus ligula magna, sollicitudin non imperdiet sit amet, volutpat vel magna. Nunc vestibulum tempor lectus, sit amet porta nunc hendrerit in. Curabitur non odio sit amet massa tincidunt facilisis. Integer et luctus nunc, eget euismod leo. Praesent faucibus metus sed purus convallis scelerisque. Fusce viverra lorem et placerat malesuada. In at elit malesuada, ullamcorper risus vitae, sodales dolor. Donec quis elementum lectus. Quisque eu eros at dui imperdiet euismod ut id neque. - Notes: Plot + Notes: Plot Main Plot Tag: Main Suspendisse vulputate malesuada pellentesque. Aenean sollicitudin cursus mi, vitae ultricies felis ullamcorper eu. Duis luctus risus mi, in accumsan velit cursus ut. Vestibulum eleifend leo in magna eleifend fermentum. Proin nec ornare elit. Phasellus nec interdum risus. In a volutpat augue, quis egestas justo. Morbi porta mauris mattis bibendum imperdiet. Mauris ut erat eu lorem malesuada egestas vel vel urna. Maecenas ac semper quam. Maecenas aliquet metus non interdum mattis. Proin consectetur molestie ligula. Aliquam sollicitudin pulvinar urna a pellentesque. Suspendisse ultrices, est mattis scelerisque porta, nisi nisi laoreet nisl, non condimentum quam ante a velit. Proin scelerisque justo augue, nec laoreet ligula egestas at. Etiam enim quam, ultrices non accumsan hendrerit, elementum vel ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam efficitur odio libero, in vestibulum arcu aliquam at. Cras non vehicula augue. Integer lobortis, est vitae aliquam facilisis, metus ligula aliquet eros, at porttitor sem tortor eget massa. Aliquam varius scelerisque neque sed gravida. Aenean eleifend lorem id ante elementum sollicitudin. Proin commodo massa a quam volutpat, mollis fermentum turpis efficitur. - Notes: World + Notes: World Ancient Europe Tag: Europe | Ancient Europe Vivamus sodales risus ac accumsan posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nunc vel enim felis. Vestibulum dignissim massa nunc, a auctor magna eleifend et. Proin dignissim sodales erat vitae convallis. Aliquam id tellus dui. Curabitur sollicitudin scelerisque ex sit amet posuere. Nam rutrum felis id rhoncus feugiat. Duis sagittis quam quis purus efficitur, quis rutrum odio iaculis. Maecenas semper ante turpis, at vulputate mi consectetur non. Sed rutrum nibh turpis, quis rhoncus purus ornare quis. Vestibulum at rutrum mauris. Integer dolor nisi, tincidunt eget vehicula ac, ultricies at ligula. diff --git a/tests/reference/mBuildDocBuild_Standard_Markdown_Lorem_Ipsum.md b/tests/reference/mBuildDocBuild_Standard_Markdown_Lorem_Ipsum.md index a9627afd..96b1fc07 100644 --- a/tests/reference/mBuildDocBuild_Standard_Markdown_Lorem_Ipsum.md +++ b/tests/reference/mBuildDocBuild_Standard_Markdown_Lorem_Ipsum.md @@ -1,4 +1,5 @@ -# Lorem Ipsum +Lorem Ipsum +=========== **By lipsum.com** @@ -16,7 +17,7 @@ Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from “de Finibus Bonorum et Malorum” by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. -## Prologue +# Prologue **Synopsis:** Explanation from the lipsum.com website. @@ -24,11 +25,12 @@ _Lorem Ipsum_ is simply dummy text[1] of the printing and typesetting industry. See http://lipsum.com -# Part: Act One +Part: Act One +============= “Fusce maximus felis libero” -## Chapter: Chapter One +# Chapter: Chapter One **Point of View:** Bod **Plot:** Main @@ -38,7 +40,7 @@ See http://lipsum.com Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam. Praesent magna nunc, lacinia sit amet quam eget, aliquet ultrices justo. Morbi ornare enim et lorem rutrum finibus ut eu dolor. Aliquam a orci odio. Ut ultrices sem quis massa placerat, eget mollis nisl cursus. Cras vel sagittis justo. Ut non ultricies leo. Maecenas rutrum velit in est varius, et egestas massa pulvinar. -### Scene: Scene One +## Scene: Scene One **Point of View:** Bod **Plot:** Main @@ -50,13 +52,13 @@ Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim sc Aliquam ut nisl arcu. Ut ultricies, lorem dignissim rutrum convallis, risus orci tempus lectus, congue feugiat sem lectus vitae odio. Duis sit amet justo finibus, hendrerit nulla at, ullamcorper enim. Praesent vel tellus sit amet tellus vulputate bibendum. Morbi eleifend sagittis sem, ac volutpat ante congue non. In hac habitasse platea dictumst. Morbi lobortis fermentum elit, dignissim sagittis ligula volutpat lacinia. Vestibulum eu interdum odio. Integer ac purus commodo metus congue tempor non at urna. Sed eget tortor vel quam viverra egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec non convallis mauris, ac feugiat ex. -#### Section: Scene One, Section Two +### Section: Scene One, Section Two Integer vel libero ipsum. Donec varius aliquam libero, sit amet commodo urna hendrerit non. Nullam quis erat mollis nunc viverra volutpat tincidunt in odio. Nam vitae quam sem. Aliquam suscipit nulla non lorem pharetra semper. Ut suscipit erat eu ligula accumsan ultrices. Phasellus nisl tellus, placerat sed laoreet id, consectetur nec dolor. Sed fringilla ipsum id dapibus posuere. Aenean finibus pharetra tincidunt. Ut molestie malesuada nulla, id posuere lorem tincidunt eu. Aliquam tempor eros a est vulputate, scelerisque pulvinar ipsum fermentum. In hac habitasse platea dictumst. Curabitur congue, justo quis interdum fermentum, tellus nulla imperdiet sapien, eu interdum enim tellus condimentum metus. Vivamus nunc velit, dignissim ut ultrices sit amet, ultricies quis enim. Donec ut vestibulum neque. Vivamus semper neque id ex ullamcorper varius. Fusce mattis nibh viverra lorem sagittis, et tempor arcu congue. Suspendisse sit amet felis sed urna facilisis mattis eget vitae arcu. Proin eu magna hendrerit, tristique sem maximus, placerat diam. Nulla tristique sed velit sit amet varius. Etiam vel ornare magna, in vulputate arcu. Cras velit orci, tincidunt sed volutpat cursus, bibendum vel sem. Nunc vulputate pharetra tortor, ac consectetur neque tincidunt sit amet. Nulla ornare mi sed mi dignissim ultricies. Ut tincidunt bibendum mauris, sed elementum ex vulputate vel. Mauris fermentum, felis nec vehicula congue, felis lorem facilisis erat, a dictum dolor augue vitae quam. Maecenas rutrum tortor nec consequat eleifend. -### Scene: Scene Two +## Scene: Scene Two **Point of View:** Bod **Plot:** Main @@ -70,7 +72,7 @@ Proin vitae gravida nisl. Integer viverra orci turpis, sit amet pretium ligula f Nulla accumsan ante in pulvinar efficitur. Nulla non velit quis urna hendrerit bibendum. Suspendisse ultrices ante eu justo malesuada, sed fermentum enim rutrum. Nunc fermentum pharetra felis, vitae sollicitudin quam rutrum porta. Aliquam fringilla velit a mi laoreet, et luctus est rutrum. In gravida non ipsum sit amet tempus. Curabitur et eleifend purus. Nulla facilisi. -#### Section: Scene Two, Section Two +### Section: Scene Two, Section Two Suspendisse potenti. Fusce tempus lorem nec laoreet suscipit. Fusce vulputate nisl ac diam tincidunt, nec malesuada quam pellentesque. Maecenas congue, tellus quis commodo rutrum, magna leo egestas arcu, quis suscipit ex risus id ligula. Suspendisse potenti. Morbi blandit lacus vitae laoreet vulputate. Donec vitae tellus eleifend, lobortis eros eu, tincidunt enim. Nullam et ullamcorper nisi. Vivamus tellus ex, lobortis quis rutrum ut, dapibus sit amet turpis. Phasellus pellentesque metus diam, commodo tristique ante commodo ac. Ut mollis ipsum nec diam blandit sollicitudin. Duis bibendum lacus nec commodo dapibus. Sed condimentum luctus ante, id ultricies urna varius nec. Nam convallis magna nec bibendum ultrices. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed auctor pharetra quam, vitae porta ex bibendum eu. @@ -78,17 +80,17 @@ Vivamus ut venenatis lectus. Phasellus nec elit id sem dictum ornare. Quisque fe Ut et consequat enim, quis ornare nibh. In lectus neque, mollis et suscipit et, vestibulum vitae augue. Praesent id ante sit amet odio venenatis placerat a at erat. Sed sed metus sed nisi dictum varius. Integer tincidunt fermentum purus ac porta. Fusce porttitor non risus eget tristique. Donec augue nunc, maximus at fermentum vel, varius et neque. Ut sed consectetur mauris. Quisque ipsum enim, porttitor vitae imperdiet sit amet, tempor et mauris. Aliquam malesuada tincidunt lectus quis blandit. Sed commodo orci felis, quis ultrices tellus facilisis sed. Nunc vel varius est. Duis ullamcorper eu metus in pulvinar. Morbi at sapien dictum, rutrum mauris eget, interdum tellus. -## Why do we use it? +# Why do we use it? **Comment:** Exctracted from the lipsum.com website. - It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. + It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. - The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. + The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. - Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). -## Chapter: Chapter Two +# Chapter: Chapter Two **Point of View:** Bod **Plot:** Main @@ -98,7 +100,7 @@ Ut et consequat enim, quis ornare nibh. In lectus neque, mollis et suscipit et, Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue. Vestibulum pharetra fermentum leo, sed faucibus eros placerat quis. In hac habitasse platea dictumst. Donec metus massa, rutrum quis consequat et, tincidunt ac felis. Duis mollis metus ac nunc tincidunt blandit. Ut aliquet velit eu odio pharetra condimentum. Integer rutrum lacus orci, id venenatis libero accumsan at. -### Scene: Scene Three +## Scene: Scene Three **Point of View:** Bod **Plot:** Main @@ -114,7 +116,7 @@ Maecenas ullamcorper lacus nec turpis finibus aliquet eget rutrum augue. Integer Aenean dapibus vulputate purus, sit amet tempor nunc suscipit consequat. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris auctor congue eros, non pellentesque neque dapibus ac. Vestibulum non leo nec urna lacinia eleifend quis et diam. Praesent eu nisi magna. Nulla at magna massa. Suspendisse porta varius scelerisque. Duis at auctor dolor, non dapibus urna. Nunc venenatis feugiat magna non molestie. Aliquam non ornare ex. Quisque eu ultrices velit, quis pellentesque eros. Phasellus eleifend, elit id imperdiet aliquam, nulla quam molestie turpis, at egestas odio ante et tortor. Suspendisse fringilla condimentum justo, at aliquet odio aliquam ac. -### Scene: Scene Four +## Scene: Scene Four **Point of View:** Bod **Plot:** Main @@ -134,7 +136,7 @@ Donec ipsum eros, vestibulum sit amet cursus eget, iaculis quis dolor. Pellentes Phasellus eu nunc ut nunc faucibus laoreet. Aliquam at magna risus. Praesent lobortis, risus finibus semper varius, magna purus vestibulum eros, at pulvinar sapien enim a ex. In scelerisque malesuada ex, sit amet egestas neque condimentum sed. Praesent vulputate efficitur massa. Cras at accumsan ligula. In elementum lectus eget blandit dictum. Nam vitae libero ut justo eleifend rutrum ac nec arcu. Aliquam sodales in quam congue vestibulum. Aliquam in accumsan sapien. Quisque lobortis nisl nisi, vitae bibendum turpis efficitur sed. Vestibulum tempor nulla eget nisi convallis, blandit sagittis ipsum convallis. Donec odio nibh, ultrices quis odio in, mollis euismod libero. -### Scene: Scene Five +## Scene: Scene Five **Point of View:** Bod **Plot:** Main @@ -152,7 +154,8 @@ Pellentesque rhoncus pharetra eros, non mollis nisi pretium non. Mauris accumsan Integer egestas maximus leo eu facilisis. Nunc rhoncus dignissim lectus eu lacinia. Praesent lacinia urna porttitor aliquam condimentum. Nulla eu eros dictum, dictum nunc vitae, sagittis nibh. Integer ante neque, consequat nec sollicitudin id, consectetur vitae dolor. Nullam volutpat sem orci, quis viverra magna auctor a. Suspendisse potenti. Maecenas commodo sed neque pellentesque vehicula. Sed luctus nisl risus, elementum semper purus interdum vel. Ut pulvinar, massa sit amet venenatis placerat, nunc lacus hendrerit odio, non aliquet nunc risus eu lectus. Maecenas feugiat semper ligula, id lobortis sem porta eu. Integer posuere elit magna, at mollis eros bibendum et. Ut imperdiet purus vel nulla aliquam maximus. Morbi sodales purus tellus, a rhoncus sem rutrum sit amet. Quisque risus sem, laoreet nec convallis nec, rutrum vitae justo. -# Notes: Characters +Notes: Characters +================= # Nobody Owens @@ -165,7 +168,8 @@ Suspendisse faucibus est auctor orci mollis luctus. Praesent quis sodales neque. Nullam scelerisque velit et tortor congue vestibulum a at nisi. Vivamus sodales ut turpis a convallis. In dignissim nibh at luctus sodales. Etiam sit amet rhoncus massa. Phasellus ligula magna, sollicitudin non imperdiet sit amet, volutpat vel magna. Nunc vestibulum tempor lectus, sit amet porta nunc hendrerit in. Curabitur non odio sit amet massa tincidunt facilisis. Integer et luctus nunc, eget euismod leo. Praesent faucibus metus sed purus convallis scelerisque. Fusce viverra lorem et placerat malesuada. In at elit malesuada, ullamcorper risus vitae, sodales dolor. Donec quis elementum lectus. Quisque eu eros at dui imperdiet euismod ut id neque. -# Notes: Plot +Notes: Plot +=========== # Main Plot @@ -175,7 +179,8 @@ Suspendisse vulputate malesuada pellentesque. Aenean sollicitudin cursus mi, vit Mauris ut erat eu lorem malesuada egestas vel vel urna. Maecenas ac semper quam. Maecenas aliquet metus non interdum mattis. Proin consectetur molestie ligula. Aliquam sollicitudin pulvinar urna a pellentesque. Suspendisse ultrices, est mattis scelerisque porta, nisi nisi laoreet nisl, non condimentum quam ante a velit. Proin scelerisque justo augue, nec laoreet ligula egestas at. Etiam enim quam, ultrices non accumsan hendrerit, elementum vel ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam efficitur odio libero, in vestibulum arcu aliquam at. Cras non vehicula augue. Integer lobortis, est vitae aliquam facilisis, metus ligula aliquet eros, at porttitor sem tortor eget massa. Aliquam varius scelerisque neque sed gravida. Aenean eleifend lorem id ante elementum sollicitudin. Proin commodo massa a quam volutpat, mollis fermentum turpis efficitur. -# Notes: World +Notes: World +============ # Ancient Europe diff --git a/tests/test_core/test_core_docbuild.py b/tests/test_core/test_core_docbuild.py index fcfd9536..15655298 100644 --- a/tests/test_core/test_core_docbuild.py +++ b/tests/test_core/test_core_docbuild.py @@ -571,14 +571,17 @@ def testCoreDocBuild_IterBuild(mockGUI, fncPath: Path, mockRnd): ] assert isinstance(docBuild.lastBuild, ToMarkdown) assert docFile.read_text(encoding="utf-8") == ( - "# New Novel\n\n" + "New Novel\n" + "=========\n\n" "By Jane Doe\n\n" - "## Chapter: New Chapter\n\n" - "### Scene: New Scene\n\n" - "# Notes: Plot\n\n" + "# Chapter: New Chapter\n\n" + "## Scene: New Scene\n\n" + "Notes: Plot\n" + "===========\n\n" "# Main Plot\n\n" "**Text**\n\n" - "# Notes: Characters\n\n" + "Notes: Characters\n" + "=================\n\n" "# Jane Doe\n\n" "Text\n\n" # Standard converts strikethrough to ordinary text ) @@ -592,14 +595,17 @@ def testCoreDocBuild_IterBuild(mockGUI, fncPath: Path, mockRnd): ] assert isinstance(docBuild.lastBuild, ToMarkdown) assert docFile.read_text(encoding="utf-8") == ( - "# New Novel\n\n" + "New Novel\n" + "=========\n\n" "By Jane Doe\n\n" - "## Chapter: New Chapter\n\n" - "### Scene: New Scene\n\n" - "# Notes: Plot\n\n" + "# Chapter: New Chapter\n\n" + "## Scene: New Scene\n\n" + "Notes: Plot\n" + "===========\n\n" "# Main Plot\n\n" "**Text**\n\n" - "# Notes: Characters\n\n" + "Notes: Characters\n" + "=================\n\n" "# Jane Doe\n\n" "~~Text~~\n\n" # Extended allows this syntax ) diff --git a/tests/test_formats/test_fmt_todocx.py b/tests/test_formats/test_fmt_todocx.py index ad2cdda3..3d4e62a0 100644 --- a/tests/test_formats/test_fmt_todocx.py +++ b/tests/test_formats/test_fmt_todocx.py @@ -38,8 +38,8 @@ from tests.tools import DOCX_IGNORE, cmpFiles, xmlToText @pytest.mark.core -def testFmtToDocX_HeadingStyles(mockGUI): - """Test formatting of headings.""" +def testFmtToDocX_NovelHeadingStyles(mockGUI): + """Test formatting of novel headings.""" project = NWProject() doc = ToDocX(project) doc._isNovel = True @@ -58,8 +58,8 @@ def testFmtToDocX_HeadingStyles(mockGUI): 'Hello World
' ) - # Heading Level 1 - # =============== + # Partition + # ========= doc._text = "# Hello World" # Plain @@ -68,7 +68,7 @@ def testFmtToDocX_HeadingStyles(mockGUI): doc.doConvert() doc._pars[-1].toXml(xTest) assert xmlToText(xTest) == ( - '' + '' '' 'Hello World' ) @@ -80,13 +80,13 @@ def testFmtToDocX_HeadingStyles(mockGUI): doc.doConvert() doc._pars[-1].toXml(xTest) assert xmlToText(xTest) == ( - '' + '' '' 'PartHello World' ) - # Heading Level 2 - # =============== + # Chapter + # ======= doc._text = "## Hello World" # Plain @@ -95,7 +95,7 @@ def testFmtToDocX_HeadingStyles(mockGUI): doc.doConvert() doc._pars[-1].toXml(xTest) assert xmlToText(xTest) == ( - '' + '' '' 'Hello World' ) @@ -107,13 +107,13 @@ def testFmtToDocX_HeadingStyles(mockGUI): doc.doConvert() doc._pars[-1].toXml(xTest) assert xmlToText(xTest) == ( - '' + '' '' 'Chapter 2Hello World' ) - # Heading Level 3 - # =============== + # Scene + # ===== doc._text = "### Hello World" # Plain @@ -122,7 +122,7 @@ def testFmtToDocX_HeadingStyles(mockGUI): doc.doConvert() doc._pars[-1].toXml(xTest) assert xmlToText(xTest) == ( - '' + '' 'Hello World' ) @@ -133,14 +133,84 @@ def testFmtToDocX_HeadingStyles(mockGUI): doc.doConvert() doc._pars[-1].toXml(xTest) assert xmlToText(xTest) == ( - '' + '' 'Scene 2Hello World' ) - # Heading Level 4 - # =============== + # Section + # ======= doc._text = "#### Hello World" + xTest = ET.Element(_wTag("body")) + doc.tokenizeText() + doc.doConvert() + doc._pars[-1].toXml(xTest) + assert xmlToText(xTest) == ( + '' + 'Hello World' + ) + + +@pytest.mark.core +def testFmtToDocX_NotesHeadingStyles(mockGUI): + """Test formatting of notes headings.""" + project = NWProject() + doc = ToDocX(project) + doc._isNovel = False + doc.initDocument() + + # Title + # ===== + + xTest = ET.Element(_wTag("body")) + doc._text = "#! Hello World" + doc.tokenizeText() + doc.doConvert() + doc._pars[-1].toXml(xTest) + assert xmlToText(xTest) == ( + '' + 'Hello World' + ) + + # Heading 1 + # ========= + doc._text = "# Hello World" + xTest = ET.Element(_wTag("body")) + doc.tokenizeText() + doc.doConvert() + doc._pars[-1].toXml(xTest) + assert xmlToText(xTest) == ( + '' + 'Hello World' + ) + + # Heading 2 + # ========= + doc._text = "## Hello World" + xTest = ET.Element(_wTag("body")) + doc.tokenizeText() + doc.doConvert() + doc._pars[-1].toXml(xTest) + assert xmlToText(xTest) == ( + '' + 'Hello World' + ) + + # Heading 3 + # ========= + doc._text = "### Hello World" + xTest = ET.Element(_wTag("body")) + doc.tokenizeText() + doc.doConvert() + doc._pars[-1].toXml(xTest) + assert xmlToText(xTest) == ( + '' + 'Hello World' + ) + + # Heading 4 + # ========= + doc._text = "#### Hello World" xTest = ET.Element(_wTag("body")) doc.tokenizeText() doc.doConvert() diff --git a/tests/test_formats/test_fmt_tohtml.py b/tests/test_formats/test_fmt_tohtml.py index 0e2ad9df..e00bb501 100644 --- a/tests/test_formats/test_fmt_tohtml.py +++ b/tests/test_formats/test_fmt_tohtml.py @@ -410,7 +410,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): # Unnumbered html._blocks = [ - (BlockTyp.HEAD2, tMeta, "Prologue", [], BlockFmt.PBB), + (BlockTyp.HEAD1, tMeta, "Prologue", [], BlockFmt.PBB), ] html.doConvert() assert html._pages[-1] == ( @@ -443,7 +443,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): # Align Left html.setStyles(False) html._blocks = [ - (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.LEFT), + (BlockTyp.PART, tMeta, "A Title", [], BlockFmt.LEFT), ] html.doConvert() assert html._pages[-1] == ( @@ -454,7 +454,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): # Align Left html._blocks = [ - (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.LEFT), + (BlockTyp.PART, tMeta, "A Title", [], BlockFmt.LEFT), ] html.doConvert() assert html._pages[-1] == ( @@ -463,7 +463,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): # Align Right html._blocks = [ - (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.RIGHT), + (BlockTyp.PART, tMeta, "A Title", [], BlockFmt.RIGHT), ] html.doConvert() assert html._pages[-1] == ( @@ -472,7 +472,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): # Align Centre html._blocks = [ - (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.CENTRE), + (BlockTyp.PART, tMeta, "A Title", [], BlockFmt.CENTRE), ] html.doConvert() assert html._pages[-1] == ( @@ -481,7 +481,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): # Align Justify html._blocks = [ - (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.JUSTIFY), + (BlockTyp.PART, tMeta, "A Title", [], BlockFmt.JUSTIFY), ] html.doConvert() assert html._pages[-1] == ( @@ -493,7 +493,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): # Page Break Always html._blocks = [ - (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.PBB | BlockFmt.PBA), + (BlockTyp.PART, tMeta, "A Title", [], BlockFmt.PBB | BlockFmt.PBA), ] html.doConvert() assert html._pages[-1] == ( @@ -677,9 +677,7 @@ def testFmtToHtml_Save(mockGUI, fncPath): "\n" "\n" "\n" - "
\n" "{bodyText:s}\n" - "
\n" "\n" "\n" ).format( diff --git a/tests/test_formats/test_fmt_tokenizer.py b/tests/test_formats/test_fmt_tokenizer.py index 3716657c..fed6b270 100644 --- a/tests/test_formats/test_fmt_tokenizer.py +++ b/tests/test_formats/test_fmt_tokenizer.py @@ -291,7 +291,7 @@ def testFmtToken_HeaderFormat(mockGUI): tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Novel Title", [], BlockFmt.CENTRE), + (BlockTyp.PART, TM1, "Novel Title", [], BlockFmt.CENTRE), ] # Note File @@ -313,7 +313,7 @@ def testFmtToken_HeaderFormat(mockGUI): tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD2, TM1, "Chapter One", [], BlockFmt.PBB), + (BlockTyp.HEAD1, TM1, "Chapter One", [], BlockFmt.PBB), ] # Note File @@ -334,7 +334,7 @@ def testFmtToken_HeaderFormat(mockGUI): tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD3, TM1, "Scene One", [], BlockFmt.NONE), + (BlockTyp.HEAD2, TM1, "Scene One", [], BlockFmt.NONE), ] # Note File @@ -355,7 +355,7 @@ def testFmtToken_HeaderFormat(mockGUI): tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD4, TM1, "A Section", [], BlockFmt.NONE), + (BlockTyp.HEAD3, TM1, "A Section", [], BlockFmt.NONE), ] # Note File @@ -399,7 +399,7 @@ def testFmtToken_HeaderFormat(mockGUI): tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD2, TM1, "Prologue", [], BlockFmt.PBB), + (BlockTyp.HEAD1, TM1, "Prologue", [], BlockFmt.PBB), ] # Note File @@ -1361,8 +1361,8 @@ def testFmtToken_SpecialFormat(mockGUI): # ======== correctResp = [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.CENTRE), - (BlockTyp.HEAD1, TM2, "Title Two", [], BlockFmt.CENTRE | BlockFmt.PBB), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.CENTRE), + (BlockTyp.PART, TM2, "Title Two", [], BlockFmt.CENTRE | BlockFmt.PBB), ] # Command wo/Space @@ -1405,9 +1405,9 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] # Multiple Empty Paragraphs @@ -1421,9 +1421,9 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] # Three Skips @@ -1434,11 +1434,11 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), - (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), - (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), + (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), + (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] # Malformed Command, Case 1 @@ -1449,8 +1449,8 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] # Malformed Command, Case 2 @@ -1461,8 +1461,8 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] # Malformed Command, Case 3 @@ -1473,8 +1473,8 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] # Empty Paragraph and Page Break @@ -1489,9 +1489,9 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.SKIP, "", "", [], BlockFmt.PBB), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.SKIP, "", "", [], BlockFmt.PBB), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] # Multiple Skip @@ -1503,11 +1503,11 @@ def testFmtToken_SpecialFormat(mockGUI): ) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), - (BlockTyp.SKIP, "", "", [], BlockFmt.PBB), - (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), - (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), - (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), + (BlockTyp.PART, TM1, "Title One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.SKIP, "", "", [], BlockFmt.PBB), + (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), + (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), + (BlockTyp.TEXT, "", "Some text to go here ...", [], BlockFmt.NONE), ] @@ -1619,7 +1619,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setPartitionFormat(f"T: {nwHeadFmt.TITLE}") tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "T: Part One", [], BlockFmt.CENTRE), + (BlockTyp.PART, TM1, "T: Part One", [], BlockFmt.CENTRE), ] # H1: Title, Not First Page @@ -1628,7 +1628,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setPartitionFormat(f"T: {nwHeadFmt.TITLE}") tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD1, TM1, "T: Part One", [], BlockFmt.PBB | BlockFmt.CENTRE), + (BlockTyp.PART, TM1, "T: Part One", [], BlockFmt.PBB | BlockFmt.CENTRE), ] # Chapters @@ -1639,7 +1639,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setChapterFormat(f"C: {nwHeadFmt.TITLE}") tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD2, TM1, "C: Chapter One", [], BlockFmt.PBB), + (BlockTyp.HEAD1, TM1, "C: Chapter One", [], BlockFmt.PBB), ] # H2: Unnumbered Chapter @@ -1647,7 +1647,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setUnNumberedFormat(f"U: {nwHeadFmt.TITLE}") tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD2, TM1, "U: Prologue", [], BlockFmt.PBB), + (BlockTyp.HEAD1, TM1, "U: Prologue", [], BlockFmt.PBB), ] # H2: Chapter Word Number @@ -1656,7 +1656,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens._hFormatter._chCount = 0 tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD2, TM1, "Chapter One", [], BlockFmt.PBB), + (BlockTyp.HEAD1, TM1, "Chapter One", [], BlockFmt.PBB), ] # H2: Chapter Roman Number Upper Case @@ -1664,7 +1664,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setChapterFormat(f"Chapter {nwHeadFmt.CH_ROMU}") tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD2, TM1, "Chapter II", [], BlockFmt.PBB), + (BlockTyp.HEAD1, TM1, "Chapter II", [], BlockFmt.PBB), ] # H2: Chapter Roman Number Lower Case @@ -1672,7 +1672,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setChapterFormat(f"Chapter {nwHeadFmt.CH_ROML}") tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD2, TM1, "Chapter iii", [], BlockFmt.PBB), + (BlockTyp.HEAD1, TM1, "Chapter iii", [], BlockFmt.PBB), ] # Scenes @@ -1683,7 +1683,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setSceneFormat(f"S: {nwHeadFmt.TITLE}", False) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD3, TM1, "S: Scene One", [], BlockFmt.NONE), + (BlockTyp.HEAD2, TM1, "S: Scene One", [], BlockFmt.NONE), ] # H3: Scene Hidden wo/Format @@ -1731,7 +1731,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens._hFormatter._scChCount = 0 tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD3, TM1, "Scene 1", [], BlockFmt.NONE), + (BlockTyp.HEAD2, TM1, "Scene 1", [], BlockFmt.NONE), ] # H3: Scene w/Chapter Number @@ -1741,7 +1741,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens._hFormatter._scChCount = 1 tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD3, TM1, "Scene 3.2", [], BlockFmt.NONE), + (BlockTyp.HEAD2, TM1, "Scene 3.2", [], BlockFmt.NONE), ] # Sections @@ -1766,7 +1766,7 @@ def testFmtToken_ProcessHeaders(mockGUI): tokens.setSectionFormat(f"X: {nwHeadFmt.TITLE}", False) tokens.tokenizeText() assert tokens._blocks == [ - (BlockTyp.HEAD4, TM1, "X: A Section", [], BlockFmt.NONE), + (BlockTyp.HEAD3, TM1, "X: A Section", [], BlockFmt.NONE), ] # H4: Section Separator @@ -2143,11 +2143,13 @@ def testFmtToken_SceneSeparators(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# T: Title One\n\n" + "T: Title One\n" + "============\n\n" "Text\n\n" "~\n\n" "Text\n\n" - "# T: Title Two\n\n" + "T: Title Two\n" + "============\n\n" "Text\n\n" "* * *\n\n" "Text\n\n" @@ -2159,15 +2161,17 @@ def testFmtToken_SceneSeparators(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# T: Title One\n\n" - "### S: Scene One\n\n" + "T: Title One\n" + "============\n\n" + "## S: Scene One\n\n" "Text\n\n" - "### S: Scene Two\n\n" + "## S: Scene Two\n\n" "Text\n\n" - "# T: Title Two\n\n" - "### S: Scene Three\n\n" + "T: Title Two\n" + "============\n\n" + "## S: Scene Three\n\n" "Text\n\n" - "### H: Scene Four\n\n" + "## H: Scene Four\n\n" "Text\n\n" ) @@ -2197,12 +2201,13 @@ def testFmtToken_SceneSeparators(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# T: Title One\n\n" - "## C: Chapter One\n\n" + "T: Title One\n" + "============\n\n" + "# C: Chapter One\n\n" "Text\n\n" "* * *\n\n" "Text\n\n" - "## C: Chapter Two\n\n" + "# C: Chapter Two\n\n" "Text\n\n" "* * *\n\n" "Text\n\n" @@ -2214,16 +2219,17 @@ def testFmtToken_SceneSeparators(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# T: Title One\n\n" - "## C: Chapter One\n\n" - "### S: Scene One\n\n" + "T: Title One\n" + "============\n\n" + "# C: Chapter One\n\n" + "## S: Scene One\n\n" "Text\n\n" - "### S: Scene Two\n\n" + "## S: Scene Two\n\n" "Text\n\n" - "## C: Chapter Two\n\n" - "### S: Scene Three\n\n" + "# C: Chapter Two\n\n" + "## S: Scene Three\n\n" "Text\n\n" - "### H: Scene Four\n\n" + "## H: Scene Four\n\n" "Text\n\n" ) @@ -2287,6 +2293,7 @@ def testFmtToken_HeaderVisibility(mockGUI): # Novel Files # =========== + # Headers are promoted one level md._isNovel = True @@ -2301,20 +2308,22 @@ def testFmtToken_HeaderVisibility(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# Novel\n\n" - "# Title One\n\n" - "## Prologue\n\n" + "Novel\n" + "=====\n\n" + "Title One\n" + "=========\n\n" + "# Prologue\n\n" "Text\n\n" - "## Chapter One\n\n" - "### Scene One\n\n" + "# Chapter One\n\n" + "## Scene One\n\n" "Text\n\n" - "### Scene Two\n\n" - "#### Section Two\n\n" + "## Scene Two\n\n" + "### Section Two\n\n" "Text\n\n" - "## Chapter Two\n\n" - "### Scene Three\n\n" + "# Chapter Two\n\n" + "## Scene Three\n\n" "Text\n\n" - "### Scene Four\n\n" + "## Scene Four\n\n" "Text\n\n" ) @@ -2329,7 +2338,8 @@ def testFmtToken_HeaderVisibility(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# Novel\n\n" + "Novel\n" + "=====\n\n" "Text\n\n" "Text\n\n" "Text\n\n" @@ -2339,6 +2349,7 @@ def testFmtToken_HeaderVisibility(mockGUI): # Note Files # ========== + # Headers are exported as-is md._isNovel = False @@ -2353,7 +2364,8 @@ def testFmtToken_HeaderVisibility(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# Novel\n\n" + "Novel\n" + "=====\n\n" "# Title One\n\n" "## Prologue\n\n" "Text\n\n" @@ -2427,31 +2439,33 @@ def testFmtToken_CounterHandling(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "# Novel One\n\n" - "## U: Prologue\n\n" + "Novel One\n" + "=========\n\n" + "# U: Prologue\n\n" "Text\n\n" - "## C 1: Chapter One\n\n" - "### S 1.1 (1): Scene One\n\n" + "# C 1: Chapter One\n\n" + "## S 1.1 (1): Scene One\n\n" "Text\n\n" - "### S 1.2 (2): Scene Two\n\n" + "## S 1.2 (2): Scene Two\n\n" "Text\n\n" - "## C 2: Chapter Two\n\n" - "### S 2.1 (3): Scene Three\n\n" + "# C 2: Chapter Two\n\n" + "## S 2.1 (3): Scene Three\n\n" "Text\n\n" - "### H 2.2 (4): Scene Four\n\n" + "## H 2.2 (4): Scene Four\n\n" "Text\n\n" - "# Novel Two\n\n" - "## U: Prologue\n\n" + "Novel Two\n" + "=========\n\n" + "# U: Prologue\n\n" "Text\n\n" - "## C 1: Chapter One\n\n" - "### S 1.1 (1): Scene One\n\n" + "# C 1: Chapter One\n\n" + "## S 1.1 (1): Scene One\n\n" "Text\n\n" - "### S 1.2 (2): Scene Two\n\n" + "## S 1.2 (2): Scene Two\n\n" "Text\n\n" - "## C 2: Chapter Two\n\n" - "### S 2.1 (3): Scene Three\n\n" + "# C 2: Chapter Two\n\n" + "## S 2.1 (3): Scene Three\n\n" "Text\n\n" - "### H 2.2 (4): Scene Four\n\n" + "## H 2.2 (4): Scene Four\n\n" "Text\n\n" ) diff --git a/tests/test_formats/test_fmt_tomarkdown.py b/tests/test_formats/test_fmt_tomarkdown.py index b5655e2e..091f61fe 100644 --- a/tests/test_formats/test_fmt_tomarkdown.py +++ b/tests/test_formats/test_fmt_tomarkdown.py @@ -42,39 +42,39 @@ def testFmtToMarkdown_ConvertHeaders(mockGUI): md.setPartitionFormat(f"Part{nwHeadFmt.BR}{nwHeadFmt.TITLE}") md.tokenizeText() md.doConvert() - assert md._pages[-1] == "# Part - Title\n\n" + assert md._pages[-1] == "Part - Title\n============\n\n" # Header 2 md._text = "## Title\n" md.setChapterFormat(f"Chapter {nwHeadFmt.CH_NUM}{nwHeadFmt.BR}{nwHeadFmt.TITLE}") md.tokenizeText() md.doConvert() - assert md._pages[-1] == "## Chapter 1 - Title\n\n" + assert md._pages[-1] == "# Chapter 1 - Title\n\n" # Header 3 md._text = "### Title\n" md.setSceneFormat(f"Scene {nwHeadFmt.SC_ABS}{nwHeadFmt.BR}{nwHeadFmt.TITLE}") md.tokenizeText() md.doConvert() - assert md._pages[-1] == "### Scene 1 - Title\n\n" + assert md._pages[-1] == "## Scene 1 - Title\n\n" # Header 4 md._text = "#### Section Title\n" md.tokenizeText() md.doConvert() - assert md._pages[-1] == "#### Section Title\n\n" + assert md._pages[-1] == "### Section Title\n\n" # Title md._text = "#! Title\n" md.tokenizeText() md.doConvert() - assert md._pages[-1] == "# Title\n\n" + assert md._pages[-1] == "Title\n=====\n\n" # Unnumbered md._text = "##! Prologue\n" md.tokenizeText() md.doConvert() - assert md._pages[-1] == "## Prologue\n\n" + assert md._pages[-1] == "# Prologue\n\n" @pytest.mark.core @@ -190,7 +190,7 @@ def testFmtToMarkdown_ConvertParagraphs(mockGUI): md.tokenizeText() md.doConvert() assert md._pages[-1] == ( - "## Chapter\n\n" + "# Chapter\n\n" "**Point of View:** Bod \n" "**Plot:** Main \n" "**Locations:** Europe\n\n" @@ -230,7 +230,7 @@ def testFmtToMarkdown_ConvertDirect(mockGUI): (BlockTyp.TITLE, "", "A Title", [], BlockFmt.PBB | BlockFmt.CENTRE), ] md.doConvert() - assert md._pages[-1] == "# A Title\n\n" + assert md._pages[-1] == "A Title\n=======\n\n" # Separators # ========== @@ -270,13 +270,13 @@ def testFmtToMarkdown_Save(mockGUI, fncPath): "#### A Section\n\n\tMore text in scene two.\n", ] resText = [ - "# My Novel\n\n**By Jane Doh**\n\n", - "## Chapter 1\n\nThe text of chapter one.\n\n", - "### Scene 1\n\nThe text of scene one.\n\n", - "#### A Section\n\nMore text in scene one.\n\n", - "## Chapter 2\n\nThe text of chapter two.\n\n", - "### Scene 2\n\nThe text of scene two.\n\n", - "#### A Section\n\n\tMore text in scene two.\n\n", + "My Novel\n========\n\n**By Jane Doh**\n\n", + "# Chapter 1\n\nThe text of chapter one.\n\n", + "## Scene 1\n\nThe text of scene one.\n\n", + "### A Section\n\nMore text in scene one.\n\n", + "# Chapter 2\n\nThe text of chapter two.\n\n", + "## Scene 2\n\nThe text of scene two.\n\n", + "### A Section\n\n\tMore text in scene two.\n\n", ] for i in range(len(docText)): @@ -289,7 +289,7 @@ def testFmtToMarkdown_Save(mockGUI, fncPath): assert md.getFullResultSize() == len("".join(resText)) md.replaceTabs(nSpaces=4, spaceChar=" ") - resText[6] = "#### A Section\n\n More text in scene two.\n\n" + resText[6] = "### A Section\n\n More text in scene two.\n\n" assert md._pages == resText # Check File diff --git a/tests/test_formats/test_fmt_toodt.py b/tests/test_formats/test_fmt_toodt.py index a6936598..4f72f9df 100644 --- a/tests/test_formats/test_fmt_toodt.py +++ b/tests/test_formats/test_fmt_toodt.py @@ -295,70 +295,12 @@ def testFmtToOdt_DialogueFormatting(mockGUI): @pytest.mark.core -def testFmtToOdt_ConvertHeaders(mockGUI): - """Test the converter of the ToOdt class.""" +def testFmtToOdt_ConvertNovelHeadings(mockGUI): + """Test the novel heading converter of the ToOdt class.""" project = NWProject() odt = ToOdt(project, isFlat=True) odt._isNovel = True - # Header 1 - odt._text = "# Title\n" - odt.setPartitionFormat(f"Part{nwHeadFmt.BR}{nwHeadFmt.TITLE}") - odt.tokenizeText() - odt.initDocument() - odt.doConvert() - odt.closeDocument() - assert odt.errData == [] - assert xmlToText(odt._xText) == ( - '' - 'Part' - 'Title' - '' - ) - - # Header 2 - odt._text = "## Title\n" - odt.setChapterFormat(f"Chapter {nwHeadFmt.CH_NUM}{nwHeadFmt.BR}{nwHeadFmt.TITLE}") - odt.tokenizeText() - odt.initDocument() - odt.doConvert() - odt.closeDocument() - assert odt.errData == [] - assert xmlToText(odt._xText) == ( - '' - 'Chapter 1' - 'Title' - '' - ) - - # Header 3 - odt._text = "### Title\n" - odt.setSceneFormat(f"Scene {nwHeadFmt.SC_ABS}{nwHeadFmt.BR}{nwHeadFmt.TITLE}") - odt.tokenizeText() - odt.initDocument() - odt.doConvert() - odt.closeDocument() - assert odt.errData == [] - assert xmlToText(odt._xText) == ( - '' - 'Scene 1' - 'Title' - '' - ) - - # Header 4 - odt._text = "#### Title\n" - odt.tokenizeText() - odt.initDocument() - odt.doConvert() - odt.closeDocument() - assert odt.errData == [] - assert xmlToText(odt._xText) == ( - '' - 'Title' - '' - ) - # Title odt._isFirst = True odt._text = "#! Title\n" @@ -373,7 +315,36 @@ def testFmtToOdt_ConvertHeaders(mockGUI): '' ) - # Unnumbered chapter + # Partition + odt._text = "# Title\n" + odt.setPartitionFormat(f"Part{nwHeadFmt.BR}{nwHeadFmt.TITLE}") + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'PartTitle' + '' + ) + + # Chapter + odt._text = "## Title\n" + odt.setChapterFormat(f"Chapter {nwHeadFmt.CH_NUM}{nwHeadFmt.BR}{nwHeadFmt.TITLE}") + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Chapter 1' + 'Title' + '' + ) + + # Unnumbered Chapter odt._text = "##! Prologue\n" odt.tokenizeText() odt.initDocument() @@ -382,7 +353,110 @@ def testFmtToOdt_ConvertHeaders(mockGUI): assert odt.errData == [] assert xmlToText(odt._xText) == ( '' - 'Prologue' + 'Prologue' + '' + ) + + # Scene + odt._text = "### Title\n" + odt.setSceneFormat(f"Scene {nwHeadFmt.SC_ABS}{nwHeadFmt.BR}{nwHeadFmt.TITLE}") + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Scene 1' + 'Title' + '' + ) + + # Alt. Scene + odt._text = "###! Title\n" + odt.setHardSceneFormat(f"Scene {nwHeadFmt.SC_ABS}{nwHeadFmt.BR}{nwHeadFmt.TITLE}") + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Scene 2' + 'Title' + '' + ) + + # Section + odt._text = "#### Title\n" + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Title' + '' + ) + + +@pytest.mark.core +def testFmtToOdt_ConvertNotesHeadings(mockGUI): + """Test the notes headings converter of the ToOdt class.""" + project = NWProject() + odt = ToOdt(project, isFlat=True) + odt._isNovel = False + + # Header 1 + odt._text = "# Title\n" + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Title' + '' + ) + + # Header 2 + odt._text = "## Title\n" + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Title' + '' + ) + + # Header 3 + odt._text = "### Title\n" + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Title' + '' + ) + + # Header 4 + odt._text = "#### Title\n" + odt.tokenizeText() + odt.initDocument() + odt.doConvert() + odt.closeDocument() + assert odt.errData == [] + assert xmlToText(odt._xText) == ( + '' + 'Title' '' ) @@ -522,7 +596,7 @@ def testFmtToOdt_ConvertParagraphs(mockGUI): assert odt.errData == [] assert xmlToText(odt._xText) == ( '' - 'Scene' + 'Scene' 'Hello World' 'Hello World' 'Hello World' @@ -547,7 +621,7 @@ def testFmtToOdt_ConvertParagraphs(mockGUI): assert odt.errData == [] assert xmlToText(odt._xText) == ( '' - 'Scene' + 'Scene' '' 'Point of View: Jane' '' @@ -617,7 +691,7 @@ def testFmtToOdt_ConvertParagraphs(mockGUI): assert odt.errData == [] assert xmlToText(odt._xText) == ( '' - 'Scene' + 'Scene' '' 'Point of View: Jane' '' @@ -655,7 +729,7 @@ def testFmtToOdt_ConvertParagraphs(mockGUI): assert odt.errData == [] assert xmlToText(odt._xText) == ( '' - 'Scene' + 'Scene' 'Regular paragraph' 'withbreak' 'Left Align' @@ -677,9 +751,9 @@ def testFmtToOdt_ConvertParagraphs(mockGUI): assert odt.errData == [] assert xmlToText(odt._xText) == ( '' - 'Chapter One' + 'Chapter One' 'Text' - 'Chapter Two' + 'Chapter Two' 'Text' '' ) diff --git a/tests/test_formats/test_fmt_toqdoc.py b/tests/test_formats/test_fmt_toqdoc.py index 97a16d9a..806860e6 100644 --- a/tests/test_formats/test_fmt_toqdoc.py +++ b/tests/test_formats/test_fmt_toqdoc.py @@ -79,6 +79,17 @@ def testFmtToQTextDocument_ConvertHeaders(mockGUI): block = doc.document.findBlockByNumber(1) assert block.text() == "Partition" bFmt = block.blockFormat() + assert bFmt.topMargin() == doc._mHead[BlockTyp.PART][0] + assert bFmt.bottomMargin() == doc._mHead[BlockTyp.PART][1] + cFmt = charFmtInBlock(block, 1) + assert cFmt.fontWeight() == QFont.Weight.Bold + assert cFmt.fontPointSize() == doc._sHead[BlockTyp.PART] + assert cFmt.foreground().color() == THEME.head + + # Chapter + block = doc.document.findBlockByNumber(2) + assert block.text() == "Chapter" + bFmt = block.blockFormat() assert bFmt.topMargin() == doc._mHead[BlockTyp.HEAD1][0] assert bFmt.bottomMargin() == doc._mHead[BlockTyp.HEAD1][1] cFmt = charFmtInBlock(block, 1) @@ -86,9 +97,9 @@ def testFmtToQTextDocument_ConvertHeaders(mockGUI): assert cFmt.fontPointSize() == doc._sHead[BlockTyp.HEAD1] assert cFmt.foreground().color() == THEME.head - # Chapter - block = doc.document.findBlockByNumber(2) - assert block.text() == "Chapter" + # Scene + block = doc.document.findBlockByNumber(3) + assert block.text() == "Scene" bFmt = block.blockFormat() assert bFmt.topMargin() == doc._mHead[BlockTyp.HEAD2][0] assert bFmt.bottomMargin() == doc._mHead[BlockTyp.HEAD2][1] @@ -97,9 +108,9 @@ def testFmtToQTextDocument_ConvertHeaders(mockGUI): assert cFmt.fontPointSize() == doc._sHead[BlockTyp.HEAD2] assert cFmt.foreground().color() == THEME.head - # Scene - block = doc.document.findBlockByNumber(3) - assert block.text() == "Scene" + # Section + block = doc.document.findBlockByNumber(4) + assert block.text() == "Section" bFmt = block.blockFormat() assert bFmt.topMargin() == doc._mHead[BlockTyp.HEAD3][0] assert bFmt.bottomMargin() == doc._mHead[BlockTyp.HEAD3][1] @@ -108,17 +119,6 @@ def testFmtToQTextDocument_ConvertHeaders(mockGUI): assert cFmt.fontPointSize() == doc._sHead[BlockTyp.HEAD3] assert cFmt.foreground().color() == THEME.head - # Section - block = doc.document.findBlockByNumber(4) - assert block.text() == "Section" - bFmt = block.blockFormat() - assert bFmt.topMargin() == doc._mHead[BlockTyp.HEAD4][0] - assert bFmt.bottomMargin() == doc._mHead[BlockTyp.HEAD4][1] - cFmt = charFmtInBlock(block, 1) - assert cFmt.fontWeight() == QFont.Weight.Bold - assert cFmt.fontPointSize() == doc._sHead[BlockTyp.HEAD4] - assert cFmt.foreground().color() == THEME.head - @pytest.mark.core def testFmtToQTextDocument_SeparatorSkip(mockGUI): diff --git a/tests/test_gui/test_gui_theme.py b/tests/test_gui/test_gui_theme.py index e93fbba7..77755fbe 100644 --- a/tests/test_gui/test_gui_theme.py +++ b/tests/test_gui/test_gui_theme.py @@ -20,6 +20,8 @@ along with this program. If not, see . """ from __future__ import annotations +import sys + from pathlib import Path import pytest @@ -146,8 +148,9 @@ def testGuiTheme_Theme(qtbot, monkeypatch, nwGUI, tstPaths): # Load Default Theme # ================== - # Set a mock colour for the window background - mainTheme._guiPalette.color(QPalette.ColorRole.Window).setRgb(0, 0, 0, 0) + if sys.platform != "win32": + # Set a mock colour for the window background + mainTheme._guiPalette.color(QPalette.ColorRole.Window).setRgb(0, 0, 0, 0) # Load the default theme CONFIG.guiTheme = DEF_GUI