\n")
diff --git a/novelwriter/formats/tokenizer.py b/novelwriter/formats/tokenizer.py
index 19839096e..e01b51e7e 100644
--- a/novelwriter/formats/tokenizer.py
+++ b/novelwriter/formats/tokenizer.py
@@ -68,18 +68,9 @@ class ComStyle(NamedTuple):
nwComment.COMMENT: ComStyle(),
nwComment.STORY: ComStyle("", "modifier", "note"),
}
-OUTLINE_CODE = {
- BlockTyp.TITLE: "TT",
- BlockTyp.PART: "PT",
- BlockTyp.CHAPTER: "CH",
- BlockTyp.SCENE: "SC",
- BlockTyp.HEAD1: "H1",
- BlockTyp.HEAD2: "H2",
- BlockTyp.HEAD3: "H3",
-}
HEADINGS = [
- BlockTyp.TITLE, BlockTyp.PART, BlockTyp.CHAPTER, BlockTyp.SCENE, BlockTyp.SECTION,
- BlockTyp.HEAD1, BlockTyp.HEAD2, BlockTyp.HEAD3, BlockTyp.HEAD4,
+ 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)
@@ -697,7 +688,7 @@ def tokenizeText(self) -> None:
sHide = self._hideChapter if isPlain else self._hideUnNum
tFormat = self._fmtChapter if isPlain else self._fmtUnNum
if isNovel:
- tType = BlockTyp.CHAPTER
+ tType = BlockTyp.HEAD1 # Promote
if isPlain:
self._hFormatter.incChapter()
if sHide:
@@ -732,7 +723,7 @@ def tokenizeText(self) -> None:
sHide = self._hideScene if isPlain else self._hideHScene
tFormat = self._fmtScene if isPlain else self._fmtHScene
if isNovel:
- tType = BlockTyp.SCENE
+ tType = BlockTyp.HEAD2 # Promote
self._hFormatter.incScene()
if sHide:
tText = ""
@@ -764,7 +755,7 @@ def tokenizeText(self) -> None:
tText = aLine[5:].strip()
tType = BlockTyp.HEAD4
if isNovel:
- tType = BlockTyp.SECTION
+ tType = BlockTyp.HEAD3 # Promote
if self._hideSection:
tText = ""
tType = BlockTyp.EMPTY
@@ -936,10 +927,24 @@ def tokenizeText(self) -> None:
def buildOutline(self) -> None:
"""Build an outline of the text up to level 3 headings."""
+ isNovel = self._isNovel
for tType, tKey, tText, _, _ in self._blocks:
- if prefix := OUTLINE_CODE.get(tType):
- text = tText.replace(nwHeadFmt.BR, " ").replace("&", "&")
- self._outline[tKey] = f"{prefix}|{text}"
+ if tType == BlockTyp.TITLE:
+ prefix = "TT"
+ elif tType == BlockTyp.PART:
+ prefix = "PT"
+ elif tType == BlockTyp.HEAD1:
+ prefix = "CH" if isNovel else "H1"
+ elif tType == BlockTyp.HEAD2:
+ prefix = "SC" if isNovel else "H2"
+ elif tType == BlockTyp.HEAD3 and not isNovel:
+ prefix = "H3"
+ else:
+ continue
+
+ text = tText.replace(nwHeadFmt.BR, " ").replace("&", "&")
+ self._outline[tKey] = f"{prefix}|{text}"
+
return
def countStats(self) -> None:
diff --git a/novelwriter/formats/tomarkdown.py b/novelwriter/formats/tomarkdown.py
index 0fe28fc63..e1f67b06c 100644
--- a/novelwriter/formats/tomarkdown.py
+++ b/novelwriter/formats/tomarkdown.py
@@ -113,15 +113,15 @@ def doConvert(self) -> None:
tTemp = self._formatText(tText, tFormat, mTags).replace("\n", " \n")
lines.append(f"{tTemp}\n\n")
- elif tType in (BlockTyp.TITLE, BlockTyp.HEAD1, BlockTyp.PART, BlockTyp.CHAPTER):
+ elif tType in (BlockTyp.TITLE, BlockTyp.PART, BlockTyp.HEAD1):
tHead = tText.replace("\n", " - ")
lines.append(f"# {tHead}\n\n")
- elif tType in (BlockTyp.HEAD2, BlockTyp.SCENE):
+ elif tType == BlockTyp.HEAD2:
tHead = tText.replace("\n", " - ")
lines.append(f"## {tHead}\n\n")
- elif tType in (BlockTyp.HEAD3, BlockTyp.SECTION):
+ elif tType == BlockTyp.HEAD3:
tHead = tText.replace("\n", " - ")
lines.append(f"### {tHead}\n\n")
diff --git a/novelwriter/formats/toqdoc.py b/novelwriter/formats/toqdoc.py
index 260592f68..12fdb305d 100644
--- a/novelwriter/formats/toqdoc.py
+++ b/novelwriter/formats/toqdoc.py
@@ -156,28 +156,22 @@ def initDocument(self, pdf: bool = False) -> None:
mPx = fPx * self._dpi/96.0
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.CHAPTER: (fPx * self._marginHead1[0], fPx * self._marginHead1[1]),
- BlockTyp.HEAD2: (fPx * self._marginHead2[0], fPx * self._marginHead2[1]),
- BlockTyp.SCENE: (fPx * self._marginHead2[0], fPx * self._marginHead2[1]),
- BlockTyp.HEAD3: (fPx * self._marginHead3[0], fPx * self._marginHead3[1]),
- BlockTyp.SECTION: (fPx * self._marginHead3[0], fPx * self._marginHead3[1]),
- BlockTyp.HEAD4: (fPx * self._marginHead4[0], fPx * self._marginHead4[1]),
+ 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]),
+ BlockTyp.HEAD4: (fPx * self._marginHead4[0], fPx * self._marginHead4[1]),
}
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.CHAPTER: (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.SCENE: (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,
- BlockTyp.SECTION: (nwStyles.H_SIZES.get(3, 1.0) * fPt) if hScale else fPt,
- BlockTyp.HEAD4: (nwStyles.H_SIZES.get(4, 1.0) * fPt) if hScale else fPt,
+ 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,
+ BlockTyp.HEAD4: (nwStyles.H_SIZES.get(4, 1.0) * fPt) if hScale else fPt,
}
self._mText = (fPx * self._marginText[0], fPx * self._marginText[1])
diff --git a/tests/test_formats/test_fmt_tohtml.py b/tests/test_formats/test_fmt_tohtml.py
index aaba1c950..5ec083856 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.CHAPTER, tMeta, "Prologue", [], BlockFmt.PBB),
+ (BlockTyp.HEAD1, tMeta, "Prologue", [], BlockFmt.PBB),
]
html.doConvert()
assert html._pages[-1] == (
diff --git a/tests/test_formats/test_fmt_tokenizer.py b/tests/test_formats/test_fmt_tokenizer.py
index 585ae734e..5bc4491fd 100644
--- a/tests/test_formats/test_fmt_tokenizer.py
+++ b/tests/test_formats/test_fmt_tokenizer.py
@@ -313,7 +313,7 @@ def testFmtToken_HeaderFormat(mockGUI):
tokens.tokenizeText()
assert tokens._blocks == [
- (BlockTyp.CHAPTER, 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.SCENE, 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.SECTION, 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.CHAPTER, TM1, "Prologue", [], BlockFmt.PBB),
+ (BlockTyp.HEAD1, TM1, "Prologue", [], BlockFmt.PBB),
]
# Note File
@@ -1639,7 +1639,7 @@ def testFmtToken_ProcessHeaders(mockGUI):
tokens.setChapterFormat(f"C: {nwHeadFmt.TITLE}")
tokens.tokenizeText()
assert tokens._blocks == [
- (BlockTyp.CHAPTER, 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.CHAPTER, 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.CHAPTER, 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.CHAPTER, 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.CHAPTER, 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.SCENE, 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.SCENE, 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.SCENE, 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.SECTION, TM1, "X: A Section", [], BlockFmt.NONE),
+ (BlockTyp.HEAD3, TM1, "X: A Section", [], BlockFmt.NONE),
]
# H4: Section Separator
diff --git a/tests/test_formats/test_fmt_toqdoc.py b/tests/test_formats/test_fmt_toqdoc.py
index 071103080..e48bb44db 100644
--- a/tests/test_formats/test_fmt_toqdoc.py
+++ b/tests/test_formats/test_fmt_toqdoc.py
@@ -90,33 +90,33 @@ def testFmtToQTextDocument_ConvertHeaders(mockGUI):
block = doc.document.findBlockByNumber(2)
assert block.text() == "Chapter"
bFmt = block.blockFormat()
- assert bFmt.topMargin() == doc._mHead[BlockTyp.CHAPTER][0]
- assert bFmt.bottomMargin() == doc._mHead[BlockTyp.CHAPTER][1]
+ assert bFmt.topMargin() == doc._mHead[BlockTyp.HEAD1][0]
+ assert bFmt.bottomMargin() == doc._mHead[BlockTyp.HEAD1][1]
cFmt = charFmtInBlock(block, 1)
assert cFmt.fontWeight() == QFont.Weight.Bold
- assert cFmt.fontPointSize() == doc._sHead[BlockTyp.CHAPTER]
+ assert cFmt.fontPointSize() == doc._sHead[BlockTyp.HEAD1]
assert cFmt.foreground().color() == THEME.head
# Scene
block = doc.document.findBlockByNumber(3)
assert block.text() == "Scene"
bFmt = block.blockFormat()
- assert bFmt.topMargin() == doc._mHead[BlockTyp.SCENE][0]
- assert bFmt.bottomMargin() == doc._mHead[BlockTyp.SCENE][1]
+ assert bFmt.topMargin() == doc._mHead[BlockTyp.HEAD2][0]
+ assert bFmt.bottomMargin() == doc._mHead[BlockTyp.HEAD2][1]
cFmt = charFmtInBlock(block, 1)
assert cFmt.fontWeight() == QFont.Weight.Bold
- assert cFmt.fontPointSize() == doc._sHead[BlockTyp.SCENE]
+ assert cFmt.fontPointSize() == doc._sHead[BlockTyp.HEAD2]
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.SECTION][0]
- assert bFmt.bottomMargin() == doc._mHead[BlockTyp.SECTION][1]
+ assert bFmt.topMargin() == doc._mHead[BlockTyp.HEAD3][0]
+ assert bFmt.bottomMargin() == doc._mHead[BlockTyp.HEAD3][1]
cFmt = charFmtInBlock(block, 1)
assert cFmt.fontWeight() == QFont.Weight.Bold
- assert cFmt.fontPointSize() == doc._sHead[BlockTyp.SECTION]
+ assert cFmt.fontPointSize() == doc._sHead[BlockTyp.HEAD3]
assert cFmt.foreground().color() == THEME.head
From 9f1274f953d83a084210fa7cda22491bb4aac59b Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sat, 25 Jan 2025 16:17:19 +0100
Subject: [PATCH 06/10] Update ODT and DocX to work with new chapter headers
---
novelwriter/formats/todocx.py | 2 +-
novelwriter/formats/toodt.py | 2 +-
.../fmtToDocX_SaveDocument_document.xml | 8 ++---
.../reference/fmtToOdt_SaveFlat_document.fodt | 12 ++++----
tests/reference/fmtToOdt_SaveFull_content.xml | 6 ++--
tests/test_formats/test_fmt_todocx.py | 30 +++++++++----------
tests/test_formats/test_fmt_toodt.py | 23 +++++++-------
7 files changed, 41 insertions(+), 42 deletions(-)
diff --git a/novelwriter/formats/todocx.py b/novelwriter/formats/todocx.py
index 694ffac00..bbca924d0 100644
--- a/novelwriter/formats/todocx.py
+++ b/novelwriter/formats/todocx.py
@@ -271,7 +271,7 @@ def doConvert(self) -> None:
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/toodt.py b/novelwriter/formats/toodt.py
index 442b82849..3299ffbff 100644
--- a/novelwriter/formats/toodt.py
+++ b/novelwriter/formats/toodt.py
@@ -363,7 +363,7 @@ def doConvert(self) -> None:
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/tests/reference/fmtToDocX_SaveDocument_document.xml b/tests/reference/fmtToDocX_SaveDocument_document.xml
index 7ac52384b..68bd89f3e 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 5c824b942..766b6d72e 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.6rc1Jane Smith1234P42DT12H34M56STest Project
- 2024-11-29T00:34:11
+ 2025-01-25T16:05:30Jane Smith
@@ -79,7 +79,7 @@
-
+
@@ -116,9 +116,9 @@
My NovelWord Count: 00 paragrphsWeb: http://example.com
- Chapter One
+ Chapter OneLorem 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 TwoNullam 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 4c99fd4b7..bbd015032 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 OneLorem 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 TwoNullam 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/test_formats/test_fmt_todocx.py b/tests/test_formats/test_fmt_todocx.py
index ad2cdda3f..b1ce08777 100644
--- a/tests/test_formats/test_fmt_todocx.py
+++ b/tests/test_formats/test_fmt_todocx.py
@@ -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,12 +133,12 @@ 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"))
@@ -146,7 +146,7 @@ def testFmtToDocX_HeadingStyles(mockGUI):
doc.doConvert()
doc._pars[-1].toXml(xTest)
assert xmlToText(xTest) == (
- ''
+ ''
'Hello World'
)
diff --git a/tests/test_formats/test_fmt_toodt.py b/tests/test_formats/test_fmt_toodt.py
index e2796c3dd..5cdc53a31 100644
--- a/tests/test_formats/test_fmt_toodt.py
+++ b/tests/test_formats/test_fmt_toodt.py
@@ -311,8 +311,7 @@ def testFmtToOdt_ConvertHeaders(mockGUI):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Part'
- 'Title'
+ 'PartTitle'
''
)
@@ -326,7 +325,7 @@ def testFmtToOdt_ConvertHeaders(mockGUI):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Chapter 1'
+ 'Chapter 1'
'Title'
''
)
@@ -341,7 +340,7 @@ def testFmtToOdt_ConvertHeaders(mockGUI):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Scene 1'
+ 'Scene 1'
'Title'
''
)
@@ -355,7 +354,7 @@ def testFmtToOdt_ConvertHeaders(mockGUI):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Title'
+ 'Title'
''
)
@@ -382,7 +381,7 @@ def testFmtToOdt_ConvertHeaders(mockGUI):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Prologue'
+ 'Prologue'
''
)
@@ -522,7 +521,7 @@ def getStyle(styleName):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Scene'
+ 'Scene'
'Hello World'
'Hello World'
'Hello World'
@@ -547,7 +546,7 @@ def getStyle(styleName):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Scene'
+ 'Scene'
''
'Point of View:Jane'
''
@@ -617,7 +616,7 @@ def getStyle(styleName):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Scene'
+ 'Scene'
''
'Point of View:Jane'
''
@@ -655,7 +654,7 @@ def getStyle(styleName):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Scene'
+ 'Scene'
'Regular paragraph'
'withbreak'
'Left Align'
@@ -677,9 +676,9 @@ def getStyle(styleName):
assert odt.errData == []
assert xmlToText(odt._xText) == (
''
- 'Chapter One'
+ 'Chapter One'
'Text'
- 'Chapter Two'
+ 'Chapter Two'
'Text'
''
)
From 6d4e06681049a0d3d1592b877254fd5e4ba2403d Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sat, 25 Jan 2025 16:17:31 +0100
Subject: [PATCH 07/10] Update other tests
---
.../coreTools_ProjectBuilderA_Project.md | 6 +--
...dDocBuild_Extended_Markdown_Lorem_Ipsum.md | 28 ++++++------
...uildDocBuild_OpenDocument_Lorem_Ipsum.fodt | 43 +++++++++----------
...dDocBuild_Standard_Markdown_Lorem_Ipsum.md | 28 ++++++------
tests/test_core/test_core_docbuild.py | 8 ++--
5 files changed, 55 insertions(+), 58 deletions(-)
diff --git a/tests/reference/coreTools_ProjectBuilderA_Project.md b/tests/reference/coreTools_ProjectBuilderA_Project.md
index f1fe2be41..7f8e892b4 100644
--- a/tests/reference/coreTools_ProjectBuilderA_Project.md
+++ b/tests/reference/coreTools_ProjectBuilderA_Project.md
@@ -18,19 +18,19 @@ Address 2
Word Count: 11
-## Chapter 1
+# Chapter 1
* * *
* * *
-## Chapter 2
+# Chapter 2
* * *
* * *
-## Chapter 3
+# Chapter 3
* * *
diff --git a/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md b/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md
index a9627afdb..1b46c3d27 100644
--- a/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md
+++ b/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md
@@ -16,7 +16,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.
@@ -28,7 +28,7 @@ See http://lipsum.com
“Fusce maximus felis libero”
-## Chapter: Chapter One
+# Chapter: Chapter One
**Point of View:** Bod
**Plot:** Main
@@ -38,7 +38,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 +50,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 +70,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 +78,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 +98,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 +114,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 +134,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
diff --git a/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt b/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt
index 94125e3a3..ffb82ce79 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.6rc1lipsum.com51P0DT0H40M56SLorem Ipsum
- 2024-11-29T00:39:37
+ 2025-01-25T16:15:30lipsum.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
+ PrologueSynopsis:Explanation from the lipsum.com website.Lorem Ipsum is simply dummy text1
@@ -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 OnePoint of View:BodPlot:MainLocations:EuropeSynopsis: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 OnePoint of View:BodPlot:MainLocations:EuropeSynopsis: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 TwoInteger 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 TwoPoint of View:BodPlot:MainLocations: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 TwoSuspendisse 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 TwoPoint of View:BodPlot:MainLocations:EuropeSynopsis: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 ThreePoint of View:BodPlot:MainLocations: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 FourPoint of View:BodPlot:MainLocations: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 FivePoint of View:BodPlot:MainLocations: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: CharactersNobody OwensTag:Bod | Nobody OwensPlot:MainPellentesque 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: PlotMain PlotTag:MainSuspendisse 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: WorldAncient EuropeTag:Europe | Ancient EuropeVivamus 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 a9627afdb..1b46c3d27 100644
--- a/tests/reference/mBuildDocBuild_Standard_Markdown_Lorem_Ipsum.md
+++ b/tests/reference/mBuildDocBuild_Standard_Markdown_Lorem_Ipsum.md
@@ -16,7 +16,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.
@@ -28,7 +28,7 @@ See http://lipsum.com
“Fusce maximus felis libero”
-## Chapter: Chapter One
+# Chapter: Chapter One
**Point of View:** Bod
**Plot:** Main
@@ -38,7 +38,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 +50,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 +70,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 +78,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 +98,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 +114,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 +134,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
diff --git a/tests/test_core/test_core_docbuild.py b/tests/test_core/test_core_docbuild.py
index fcfd95365..c604da8b8 100644
--- a/tests/test_core/test_core_docbuild.py
+++ b/tests/test_core/test_core_docbuild.py
@@ -573,8 +573,8 @@ def testCoreDocBuild_IterBuild(mockGUI, fncPath: Path, mockRnd):
assert docFile.read_text(encoding="utf-8") == (
"# New Novel\n\n"
"By Jane Doe\n\n"
- "## Chapter: New Chapter\n\n"
- "### Scene: New Scene\n\n"
+ "# Chapter: New Chapter\n\n"
+ "## Scene: New Scene\n\n"
"# Notes: Plot\n\n"
"# Main Plot\n\n"
"**Text**\n\n"
@@ -594,8 +594,8 @@ def testCoreDocBuild_IterBuild(mockGUI, fncPath: Path, mockRnd):
assert docFile.read_text(encoding="utf-8") == (
"# New Novel\n\n"
"By Jane Doe\n\n"
- "## Chapter: New Chapter\n\n"
- "### Scene: New Scene\n\n"
+ "# Chapter: New Chapter\n\n"
+ "## Scene: New Scene\n\n"
"# Notes: Plot\n\n"
"# Main Plot\n\n"
"**Text**\n\n"
From 11d0e4220f6a5049741ce63285d74b782250dccc Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sat, 25 Jan 2025 20:51:24 +0100
Subject: [PATCH 08/10] Use alternative level 1 format for titles and
partitions for markdown
---
novelwriter/formats/tomarkdown.py | 7 +++-
.../coreTools_ProjectBuilderA_Project.md | 3 +-
.../coreTools_ProjectBuilderB_Project.md | 3 +-
...dDocBuild_Extended_Markdown_Lorem_Ipsum.md | 15 +++++---
...dDocBuild_Standard_Markdown_Lorem_Ipsum.md | 15 +++++---
tests/test_core/test_core_docbuild.py | 18 ++++++----
tests/test_formats/test_fmt_tokenizer.py | 36 ++++++++++++-------
tests/test_formats/test_fmt_tomarkdown.py | 8 ++---
8 files changed, 70 insertions(+), 35 deletions(-)
diff --git a/novelwriter/formats/tomarkdown.py b/novelwriter/formats/tomarkdown.py
index e1f67b06c..2f87813bb 100644
--- a/novelwriter/formats/tomarkdown.py
+++ b/novelwriter/formats/tomarkdown.py
@@ -113,7 +113,12 @@ def doConvert(self) -> None:
tTemp = self._formatText(tText, tFormat, mTags).replace("\n", " \n")
lines.append(f"{tTemp}\n\n")
- elif tType in (BlockTyp.TITLE, BlockTyp.PART, BlockTyp.HEAD1):
+ elif tType in (BlockTyp.TITLE, BlockTyp.PART):
+ tHead = tText.replace("\n", " - ")
+ lines.append(f"{tHead}\n")
+ lines.append("="*len(tHead) + "\n\n")
+
+ elif tType == BlockTyp.HEAD1:
tHead = tText.replace("\n", " - ")
lines.append(f"# {tHead}\n\n")
diff --git a/tests/reference/coreTools_ProjectBuilderA_Project.md b/tests/reference/coreTools_ProjectBuilderA_Project.md
index 7f8e892b4..d608ae09d 100644
--- a/tests/reference/coreTools_ProjectBuilderA_Project.md
+++ b/tests/reference/coreTools_ProjectBuilderA_Project.md
@@ -12,7 +12,8 @@ Address 2
-# Test Project A
+Test Project A
+==============
**By Jane Doe**
diff --git a/tests/reference/coreTools_ProjectBuilderB_Project.md b/tests/reference/coreTools_ProjectBuilderB_Project.md
index 386a773cd..7f6329f2e 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/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md b/tests/reference/mBuildDocBuild_Extended_Markdown_Lorem_Ipsum.md
index 1b46c3d27..96b1fc073 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**
@@ -24,7 +25,8 @@ _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”
@@ -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_Standard_Markdown_Lorem_Ipsum.md b/tests/reference/mBuildDocBuild_Standard_Markdown_Lorem_Ipsum.md
index 1b46c3d27..96b1fc073 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**
@@ -24,7 +25,8 @@ _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”
@@ -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 c604da8b8..156552985 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"
+ "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"
+ "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_tokenizer.py b/tests/test_formats/test_fmt_tokenizer.py
index 5bc4491fd..0e1895af1 100644
--- a/tests/test_formats/test_fmt_tokenizer.py
+++ b/tests/test_formats/test_fmt_tokenizer.py
@@ -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,12 +2161,14 @@ def testFmtToken_SceneSeparators(mockGUI):
md.tokenizeText()
md.doConvert()
assert md._pages[-1] == (
- "# T: Title One\n\n"
+ "T: Title One\n"
+ "============\n\n"
"## S: Scene One\n\n"
"Text\n\n"
"## S: Scene Two\n\n"
"Text\n\n"
- "# T: Title Two\n\n"
+ "T: Title Two\n"
+ "============\n\n"
"## S: Scene Three\n\n"
"Text\n\n"
"## H: Scene Four\n\n"
@@ -2197,7 +2201,8 @@ def testFmtToken_SceneSeparators(mockGUI):
md.tokenizeText()
md.doConvert()
assert md._pages[-1] == (
- "# T: Title One\n\n"
+ "T: Title One\n"
+ "============\n\n"
"# C: Chapter One\n\n"
"Text\n\n"
"* * *\n\n"
@@ -2214,7 +2219,8 @@ def testFmtToken_SceneSeparators(mockGUI):
md.tokenizeText()
md.doConvert()
assert md._pages[-1] == (
- "# T: Title One\n\n"
+ "T: Title One\n"
+ "============\n\n"
"# C: Chapter One\n\n"
"## S: Scene One\n\n"
"Text\n\n"
@@ -2302,8 +2308,10 @@ def testFmtToken_HeaderVisibility(mockGUI):
md.tokenizeText()
md.doConvert()
assert md._pages[-1] == (
- "# Novel\n\n"
- "# Title One\n\n"
+ "Novel\n"
+ "=====\n\n"
+ "Title One\n"
+ "=========\n\n"
"# Prologue\n\n"
"Text\n\n"
"# Chapter One\n\n"
@@ -2330,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"
@@ -2355,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"
@@ -2429,7 +2439,8 @@ def testFmtToken_CounterHandling(mockGUI):
md.tokenizeText()
md.doConvert()
assert md._pages[-1] == (
- "# Novel One\n\n"
+ "Novel One\n"
+ "=========\n\n"
"# U: Prologue\n\n"
"Text\n\n"
"# C 1: Chapter One\n\n"
@@ -2442,7 +2453,8 @@ def testFmtToken_CounterHandling(mockGUI):
"Text\n\n"
"## H 2.2 (4): Scene Four\n\n"
"Text\n\n"
- "# Novel Two\n\n"
+ "Novel Two\n"
+ "=========\n\n"
"# U: Prologue\n\n"
"Text\n\n"
"# C 1: Chapter One\n\n"
diff --git a/tests/test_formats/test_fmt_tomarkdown.py b/tests/test_formats/test_fmt_tomarkdown.py
index 1637f2958..091f61fe8 100644
--- a/tests/test_formats/test_fmt_tomarkdown.py
+++ b/tests/test_formats/test_fmt_tomarkdown.py
@@ -42,7 +42,7 @@ 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"
@@ -68,7 +68,7 @@ def testFmtToMarkdown_ConvertHeaders(mockGUI):
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"
@@ -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,7 +270,7 @@ 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",
+ "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",
From 5fddfd395e95f970597d1db49684e1247c70d2ae Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sat, 25 Jan 2025 21:06:20 +0100
Subject: [PATCH 09/10] Update HTML output
---
novelwriter/formats/tohtml.py | 33 ++++++++++++++-----
.../mBuildDocBuild_HTML5_Lorem_Ipsum.htm | 12 +++----
.../mBuildDocBuild_HTML5_Lorem_Ipsum.json | 14 ++++----
tests/test_formats/test_fmt_tohtml.py | 2 --
4 files changed, 37 insertions(+), 24 deletions(-)
diff --git a/novelwriter/formats/tohtml.py b/novelwriter/formats/tohtml.py
index 9db186168..fb2c1ee51 100644
--- a/novelwriter/formats/tohtml.py
+++ b/novelwriter/formats/tohtml.py
@@ -30,7 +30,7 @@
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
@@ -296,9 +296,7 @@ def saveDocument(self, path: Path) -> None:
"\n"
"\n"
"\n"
- "\n"
"{body:s}\n"
- "\n"
"\n"
"