Pass the Markdown style to the constructor

This commit is contained in:
Veronica Berglyd Olsen
2024-10-16 00:15:56 +02:00
parent c633a56bfb
commit d2ac0ed53f
4 changed files with 28 additions and 29 deletions
+13 -2
View File
@@ -149,26 +149,35 @@ class NWBuildDocument:
def iterBuildDocument(self, path: Path, bFormat: nwBuildFmt) -> Iterable[tuple[int, bool]]: def iterBuildDocument(self, path: Path, bFormat: nwBuildFmt) -> Iterable[tuple[int, bool]]:
"""Wrapper for builders based on format.""" """Wrapper for builders based on format."""
if bFormat in (nwBuildFmt.J_HTML, nwBuildFmt.J_NWD):
# Ensure that JSON output has the correct extension
path = path.with_suffix(".json")
if bFormat in (nwBuildFmt.ODT, nwBuildFmt.FODT): if bFormat in (nwBuildFmt.ODT, nwBuildFmt.FODT):
makeObj = ToOdt(self._project, bFormat == nwBuildFmt.FODT) makeObj = ToOdt(self._project, bFormat == nwBuildFmt.FODT)
filtered = self._setupBuild(makeObj) filtered = self._setupBuild(makeObj)
makeObj.initDocument() makeObj.initDocument()
yield from self._iterBuild(makeObj, filtered) yield from self._iterBuild(makeObj, filtered)
makeObj.closeDocument() makeObj.closeDocument()
elif bFormat in (nwBuildFmt.HTML, nwBuildFmt.J_HTML): elif bFormat in (nwBuildFmt.HTML, nwBuildFmt.J_HTML):
makeObj = ToHtml(self._project) makeObj = ToHtml(self._project)
filtered = self._setupBuild(makeObj) filtered = self._setupBuild(makeObj)
yield from self._iterBuild(makeObj, filtered) yield from self._iterBuild(makeObj, filtered)
makeObj.appendFootnotes() makeObj.appendFootnotes()
if not self._build.getBool("html.preserveTabs"): if not self._build.getBool("html.preserveTabs"):
makeObj.replaceTabs() makeObj.replaceTabs()
elif bFormat in (nwBuildFmt.STD_MD, nwBuildFmt.EXT_MD): elif bFormat in (nwBuildFmt.STD_MD, nwBuildFmt.EXT_MD):
makeObj = ToMarkdown(self._project) makeObj = ToMarkdown(self._project, bFormat == nwBuildFmt.EXT_MD)
makeObj.setExtendedMarkdown(bFormat == nwBuildFmt.EXT_MD)
filtered = self._setupBuild(makeObj) filtered = self._setupBuild(makeObj)
yield from self._iterBuild(makeObj, filtered) yield from self._iterBuild(makeObj, filtered)
makeObj.appendFootnotes() makeObj.appendFootnotes()
if self._build.getBool("format.replaceTabs"): if self._build.getBool("format.replaceTabs"):
makeObj.replaceTabs(nSpaces=4, spaceChar=" ") makeObj.replaceTabs(nSpaces=4, spaceChar=" ")
@@ -176,7 +185,9 @@ class NWBuildDocument:
elif bFormat in (nwBuildFmt.NWD, nwBuildFmt.J_NWD): elif bFormat in (nwBuildFmt.NWD, nwBuildFmt.J_NWD):
makeObj = ToRaw(self._project) makeObj = ToRaw(self._project)
filtered = self._setupBuild(makeObj) filtered = self._setupBuild(makeObj)
yield from self._iterBuild(makeObj, filtered) yield from self._iterBuild(makeObj, filtered)
if self._build.getBool("format.replaceTabs"): if self._build.getBool("format.replaceTabs"):
makeObj.replaceTabs(nSpaces=4, spaceChar=" ") makeObj.replaceTabs(nSpaces=4, spaceChar=" ")
+2 -11
View File
@@ -81,11 +81,11 @@ class ToMarkdown(Tokenizer):
supports concatenating novelWriter markup files. supports concatenating novelWriter markup files.
""" """
def __init__(self, project: NWProject) -> None: def __init__(self, project: NWProject, extended: bool) -> None:
super().__init__(project) super().__init__(project)
self._fullMD: list[str] = [] self._fullMD: list[str] = []
self._usedNotes: dict[str, int] = {} self._usedNotes: dict[str, int] = {}
self._extended = True self._extended = extended
return return
## ##
@@ -97,15 +97,6 @@ class ToMarkdown(Tokenizer):
"""Return the markdown as a list.""" """Return the markdown as a list."""
return self._fullMD return self._fullMD
##
# Setters
##
def setExtendedMarkdown(self, state: bool) -> None:
"""Set the converter to use Extended Markdown formatting."""
self._extended = state
return
## ##
# Class Methods # Class Methods
## ##
+4 -5
View File
@@ -1887,7 +1887,7 @@ def testFmtToken_SceneSeparators(mockGUI):
project = NWProject() project = NWProject()
project.data.setLanguage("en") project.data.setLanguage("en")
project._loadProjectLocalisation() project._loadProjectLocalisation()
md = ToMarkdown(project) md = ToMarkdown(project, False)
md._isNovel = True md._isNovel = True
# Separator Handling, Titles # Separator Handling, Titles
@@ -2002,8 +2002,7 @@ def testFmtToken_SceneSeparators(mockGUI):
# Separators with Scenes Only # Separators with Scenes Only
# =========================== # ===========================
# Requires a fresh builder class # Requires a fresh builder class
md = ToMarkdown(project) md = ToMarkdown(project, True)
md.setExtendedMarkdown(True)
md._isNovel = True md._isNovel = True
md._text = ( md._text = (
@@ -2038,7 +2037,7 @@ def testFmtToken_HeaderVisibility(mockGUI):
project = NWProject() project = NWProject()
project.data.setLanguage("en") project.data.setLanguage("en")
project._loadProjectLocalisation() project._loadProjectLocalisation()
md = ToMarkdown(project) md = ToMarkdown(project, False)
md._text = ( md._text = (
"#! Novel\n\n" "#! Novel\n\n"
@@ -2150,7 +2149,7 @@ def testFmtToken_CounterHandling(mockGUI):
project = NWProject() project = NWProject()
project.data.setLanguage("en") project.data.setLanguage("en")
project._loadProjectLocalisation() project._loadProjectLocalisation()
md = ToMarkdown(project) md = ToMarkdown(project, False)
md._isNovel = True md._isNovel = True
# Counter Handling, Novel Titles # Counter Handling, Novel Titles
+9 -11
View File
@@ -30,7 +30,7 @@ from novelwriter.formats.tomarkdown import ToMarkdown
def testFmtToMarkdown_ConvertHeaders(mockGUI): def testFmtToMarkdown_ConvertHeaders(mockGUI):
"""Test header formats in the ToMarkdown class.""" """Test header formats in the ToMarkdown class."""
project = NWProject() project = NWProject()
toMD = ToMarkdown(project) toMD = ToMarkdown(project, False)
toMD._isNovel = True toMD._isNovel = True
toMD._isFirst = True toMD._isFirst = True
@@ -76,13 +76,13 @@ def testFmtToMarkdown_ConvertHeaders(mockGUI):
def testFmtToMarkdown_ConvertParagraphs(mockGUI): def testFmtToMarkdown_ConvertParagraphs(mockGUI):
"""Test paragraph formats in the ToMarkdown class.""" """Test paragraph formats in the ToMarkdown class."""
project = NWProject() project = NWProject()
toMD = ToMarkdown(project) toMD = ToMarkdown(project, False)
toMD._isNovel = True toMD._isNovel = True
toMD._isFirst = True toMD._isFirst = True
# Text for Extended Markdown # Text for Extended Markdown
toMD.setExtendedMarkdown(True) toMD._extended = True
toMD._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" toMD._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n"
toMD.tokenizeText() toMD.tokenizeText()
toMD.doConvert() toMD.doConvert()
@@ -91,7 +91,7 @@ def testFmtToMarkdown_ConvertParagraphs(mockGUI):
) )
# Text for Standard Markdown # Text for Standard Markdown
toMD.setExtendedMarkdown(False) toMD._extended = False
toMD._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" toMD._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n"
toMD.tokenizeText() toMD.tokenizeText()
toMD.doConvert() toMD.doConvert()
@@ -100,7 +100,7 @@ def testFmtToMarkdown_ConvertParagraphs(mockGUI):
) )
# Shortcodes for Extended Markdown # Shortcodes for Extended Markdown
toMD.setExtendedMarkdown(True) toMD._extended = True
toMD._text = ( toMD._text = (
"Some [b]bold[/b], [i]italic[/i], [s]strike[/s], [u]underline[/u], [m]mark[/m], " "Some [b]bold[/b], [i]italic[/i], [s]strike[/s], [u]underline[/u], [m]mark[/m], "
"super[sup]script[/sup], sub[sub]script[/sub] here\n" "super[sup]script[/sup], sub[sub]script[/sub] here\n"
@@ -113,7 +113,7 @@ def testFmtToMarkdown_ConvertParagraphs(mockGUI):
) )
# Shortcodes for Standard Markdown # Shortcodes for Standard Markdown
toMD.setExtendedMarkdown(False) toMD._extended = False
toMD._text = ( toMD._text = (
"Some [b]bold[/b], [i]italic[/i], [s]strike[/s], [u]underline[/u], [m]mark[/m], " "Some [b]bold[/b], [i]italic[/i], [s]strike[/s], [u]underline[/u], [m]mark[/m], "
"super[sup]script[/sup], sub[sub]script[/sub] here\n" "super[sup]script[/sup], sub[sub]script[/sub] here\n"
@@ -212,10 +212,8 @@ def testFmtToMarkdown_ConvertParagraphs(mockGUI):
def testFmtToMarkdown_ConvertDirect(mockGUI): def testFmtToMarkdown_ConvertDirect(mockGUI):
"""Test the converter directly using the ToMarkdown class.""" """Test the converter directly using the ToMarkdown class."""
project = NWProject() project = NWProject()
toMD = ToMarkdown(project) toMD = ToMarkdown(project, False)
toMD._isNovel = True toMD._isNovel = True
toMD.setExtendedMarkdown(False)
# Special Titles # Special Titles
# ============== # ==============
@@ -249,7 +247,7 @@ def testFmtToMarkdown_ConvertDirect(mockGUI):
def testFmtToMarkdown_Save(mockGUI, fncPath): def testFmtToMarkdown_Save(mockGUI, fncPath):
"""Test the save method of the ToMarkdown class.""" """Test the save method of the ToMarkdown class."""
project = NWProject() project = NWProject()
toMD = ToMarkdown(project) toMD = ToMarkdown(project, False)
toMD._isNovel = True toMD._isNovel = True
# Build Project # Build Project
@@ -300,7 +298,7 @@ def testFmtToMarkdown_Save(mockGUI, fncPath):
def testFmtToMarkdown_Format(mockGUI): def testFmtToMarkdown_Format(mockGUI):
"""Test all the formatters for the ToMarkdown class.""" """Test all the formatters for the ToMarkdown class."""
project = NWProject() project = NWProject()
toMD = ToMarkdown(project) toMD = ToMarkdown(project, False)
assert toMD._formatKeywords("", toMD.A_NONE) == "" assert toMD._formatKeywords("", toMD.A_NONE) == ""
assert toMD._formatKeywords("tag: Jane", toMD.A_NONE) == "**Tag:** Jane\n\n" assert toMD._formatKeywords("tag: Jane", toMD.A_NONE) == "**Tag:** Jane\n\n"