Pass the Markdown style to the constructor
This commit is contained in:
@@ -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=" ")
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user