diff --git a/novelwriter/formats/todocx.py b/novelwriter/formats/todocx.py index 4f77f137..f02e9251 100644 --- a/novelwriter/formats/todocx.py +++ b/novelwriter/formats/todocx.py @@ -214,8 +214,6 @@ class ToDocX(Tokenizer): def doConvert(self) -> None: """Convert the list of text tokens into XML elements.""" - self._result = "" # Not used, but cleared just in case - bIndent = self._fontSize * self._blockIndent for tType, _, tText, tFormat, tStyle in self._blocks: diff --git a/novelwriter/formats/tohtml.py b/novelwriter/formats/tohtml.py index f0bac888..d129349f 100644 --- a/novelwriter/formats/tohtml.py +++ b/novelwriter/formats/tohtml.py @@ -79,25 +79,12 @@ class ToHtml(Tokenizer): def __init__(self, project: NWProject) -> None: super().__init__(project) - - self._cssStyles = True - self._fullHTML: list[str] = [] - - # Internals self._trMap = {} + self._cssStyles = True self._usedNotes: dict[str, int] = {} self.setReplaceUnicode(False) - return - ## - # Properties - ## - - @property - def fullHTML(self) -> list[str]: - return self._fullHTML - ## # Setters ## @@ -128,7 +115,7 @@ class ToHtml(Tokenizer): def getFullResultSize(self) -> int: """Return the size of the full HTML result.""" - return sum(len(x) for x in self._fullHTML) + return sum(len(x) for x in self._pages) def doPreProcessing(self) -> None: """Extend the auto-replace to also properly encode some unicode @@ -140,8 +127,6 @@ class ToHtml(Tokenizer): def doConvert(self) -> None: """Convert the list of text tokens into an HTML document.""" - self._result = "" - if self._isNovel: # For story files, we bump the titles one level up h1Cl = " class='title'" @@ -258,8 +243,7 @@ class ToHtml(Tokenizer): tClass = f"meta meta-{tMeta}" lines.append(f"

{self._formatText(tText, tFmt)}

\n") - self._result = "".join(lines) - self._fullHTML.append(self._result) + self._pages.append("".join(lines)) return @@ -277,9 +261,7 @@ class ToHtml(Tokenizer): lines.append(f"
  • {text}

  • \n") lines.append("\n") - result = "".join(lines) - self._result += result - self._fullHTML.append(result) + self._pages.append("".join(lines)) return @@ -296,7 +278,7 @@ class ToHtml(Tokenizer): }, "text": { "css": self.getStyleSheet(), - "html": [t.replace("\t", " ").rstrip().split("\n") for t in self.fullHTML], + "html": [t.replace("\t", " ").rstrip().split("\n") for t in self._pages], } } with open(path, mode="w", encoding="utf-8") as fObj: @@ -323,7 +305,7 @@ class ToHtml(Tokenizer): ).format( title=self._project.data.name, style="\n".join(self.getStyleSheet()), - body=("".join(self._fullHTML)).replace("\t", " ").rstrip(), + body=("".join(self._pages)).replace("\t", " ").rstrip(), )) logger.info("Wrote file: %s", path) @@ -332,12 +314,11 @@ class ToHtml(Tokenizer): def replaceTabs(self, nSpaces: int = 8, spaceChar: str = " ") -> None: """Replace tabs with spaces in the html.""" - htmlText = [] + pages = [] tabSpace = spaceChar*nSpaces - for aLine in self._fullHTML: - htmlText.append(aLine.replace("\t", tabSpace)) - - self._fullHTML = htmlText + for aLine in self._pages: + pages.append(aLine.replace("\t", tabSpace)) + self._pages = pages return def getStyleSheet(self) -> list[str]: diff --git a/novelwriter/formats/tokenizer.py b/novelwriter/formats/tokenizer.py index 3bd064c5..93caa96e 100644 --- a/novelwriter/formats/tokenizer.py +++ b/novelwriter/formats/tokenizer.py @@ -96,7 +96,6 @@ class Tokenizer(ABC): # Data Variables self._text = "" # The raw text to be tokenized self._handle = None # The item handle currently being processed - self._result = "" # The result of the last document self._keepRaw = False # Whether to keep the raw text, used by ToRaw # Blocks and Meta Data (Per Document) @@ -104,9 +103,10 @@ class Tokenizer(ABC): self._footnotes: dict[str, T_Note] = {} # Blocks and Meta Data (Per Instance) + self._raw: list[str] = [] + self._pages: list[str] = [] self._counts: dict[str, int] = {} self._outline: dict[str, str] = {} - self._markdown: list[str] = [] # User Settings self._textFont = QFont("Serif", 11) # Output text font @@ -211,16 +211,6 @@ class Tokenizer(ABC): # Properties ## - @property - def result(self) -> str: - """The result of the build process.""" - return self._result - - @property - def allMarkdown(self) -> list[str]: - """The combined novelWriter Markdown text.""" - return self._markdown - @property def textStats(self) -> dict[str, int]: """The collected stats about the text.""" @@ -486,7 +476,7 @@ class Tokenizer(ABC): BlockTyp.TITLE, f"{self._handle}:T0001", title, [], textAlign )) if self._keepRaw: - self._markdown.append(f"#! {title}\n\n") + self._raw.append(f"#! {title}\n\n") return @@ -841,8 +831,7 @@ class Tokenizer(ABC): # Make sure the blocks array doesn't start with a page break # on the very first page, adding a blank first page. - if tBlocks[1][4] & BlockFmt.PBB: - cBlock = tBlocks[1] + if (cBlock := tBlocks[1])[4] & BlockFmt.PBB: tBlocks[1] = ( cBlock[0], cBlock[1], cBlock[2], cBlock[3], cBlock[4] & ~BlockFmt.PBB ) @@ -851,7 +840,7 @@ class Tokenizer(ABC): tBlocks.append(B_EMPTY) if keepRaw: tmpMarkdown.append("\n") - self._markdown.append("".join(tmpMarkdown)) + self._raw.append("".join(tmpMarkdown)) # Second Pass # =========== @@ -1047,7 +1036,7 @@ class Tokenizer(ABC): "buildTimeStr": formatTimeStamp(ts), }, "text": { - "nwd": [page.rstrip("\n").split("\n") for page in self._markdown], + "nwd": [page.rstrip("\n").split("\n") for page in self._raw], } } with open(path, mode="w", encoding="utf-8") as fObj: @@ -1055,7 +1044,7 @@ class Tokenizer(ABC): else: with open(path, mode="w", encoding="utf-8") as outFile: - for nwdPage in self._markdown: + for nwdPage in self._raw: outFile.write(nwdPage) logger.info("Wrote file: %s", path) diff --git a/novelwriter/formats/tomarkdown.py b/novelwriter/formats/tomarkdown.py index 878167c0..198b7e7a 100644 --- a/novelwriter/formats/tomarkdown.py +++ b/novelwriter/formats/tomarkdown.py @@ -84,32 +84,20 @@ class ToMarkdown(Tokenizer): def __init__(self, project: NWProject, extended: bool) -> None: super().__init__(project) - self._fullMD: list[str] = [] - self._usedNotes: dict[str, int] = {} self._extended = extended + self._usedNotes: dict[str, int] = {} return - ## - # Properties - ## - - @property - def fullMD(self) -> list[str]: - """Return the markdown as a list.""" - return self._fullMD - ## # Class Methods ## def getFullResultSize(self) -> int: """Return the size of the full Markdown result.""" - return sum(len(x) for x in self._fullMD) + return sum(len(x) for x in self._pages) def doConvert(self) -> None: """Convert the list of text tokens into a Markdown document.""" - self._result = "" - if self._extended: mTags = EXT_MD cSkip = nwUnicode.U_MMSP @@ -157,8 +145,7 @@ class ToMarkdown(Tokenizer): end = " \n" if tStyle & BlockFmt.Z_BTM else "\n\n" lines.append(f"{self._formatText(tText, tFormat, mTags)}{end}") - self._result = "".join(lines) - self._fullMD.append(self._result) + self._pages.append("".join(lines)) return @@ -176,24 +163,21 @@ class ToMarkdown(Tokenizer): text = self._formatText(content[0], content[1], tags) lines.append(f"{marker}{text}\n") lines.append("\n") - - result = "".join(lines) - self._result += result - self._fullMD.append(result) + self._pages.append("".join(lines)) return def saveDocument(self, path: Path) -> None: """Save the data to a plain text file.""" with open(path, mode="w", encoding="utf-8") as outFile: - outFile.write("".join(self._fullMD)) + outFile.write("".join(self._pages)) logger.info("Wrote file: %s", path) return def replaceTabs(self, nSpaces: int = 8, spaceChar: str = " ") -> None: """Replace tabs with spaces.""" spaces = spaceChar*nSpaces - self._fullMD = [p.replace("\t", spaces) for p in self._fullMD] + self._pages = [p.replace("\t", spaces) for p in self._pages] return ## diff --git a/novelwriter/formats/toraw.py b/novelwriter/formats/toraw.py index d1c701b1..8e1ed47e 100644 --- a/novelwriter/formats/toraw.py +++ b/novelwriter/formats/toraw.py @@ -64,7 +64,7 @@ class ToRaw(Tokenizer): "buildTimeStr": formatTimeStamp(ts), }, "text": { - "nwd": [page.rstrip("\n").split("\n") for page in self._markdown], + "nwd": [page.rstrip("\n").split("\n") for page in self._raw], } } with open(path, mode="w", encoding="utf-8") as fObj: @@ -72,7 +72,7 @@ class ToRaw(Tokenizer): else: with open(path, mode="w", encoding="utf-8") as outFile: - for nwdPage in self._markdown: + for nwdPage in self._raw: outFile.write(nwdPage) logger.info("Wrote file: %s", path) @@ -82,5 +82,5 @@ class ToRaw(Tokenizer): def replaceTabs(self, nSpaces: int = 8, spaceChar: str = " ") -> None: """Replace tabs with spaces.""" spaces = spaceChar*nSpaces - self._markdown = [p.replace("\t", spaces) for p in self._markdown] + self._raw = [p.replace("\t", spaces) for p in self._raw] return diff --git a/tests/test_formats/test_fmt_tohtml.py b/tests/test_formats/test_fmt_tohtml.py index 3535f982..68db421c 100644 --- a/tests/test_formats/test_fmt_tohtml.py +++ b/tests/test_formats/test_fmt_tohtml.py @@ -47,7 +47,7 @@ def testFmtToHtml_ConvertHeaders(mockGUI): html._text = "# Partition\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Partition

    \n" ) @@ -55,7 +55,7 @@ def testFmtToHtml_ConvertHeaders(mockGUI): html._text = "## Chapter Title\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Chapter Title

    \n" ) @@ -63,19 +63,19 @@ def testFmtToHtml_ConvertHeaders(mockGUI): html._text = "### Scene Title\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Scene Title

    \n" + assert html._pages[-1] == "

    Scene Title

    \n" # Header 4 html._text = "#### Section Title\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Section Title

    \n" + assert html._pages[-1] == "

    Section Title

    \n" # Title html._text = "#! Title\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Title

    \n" ) @@ -83,7 +83,7 @@ def testFmtToHtml_ConvertHeaders(mockGUI): html._text = "##! Prologue\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Prologue

    \n" + assert html._pages[-1] == "

    Prologue

    \n" # Note Files Headers # ================== @@ -97,31 +97,31 @@ def testFmtToHtml_ConvertHeaders(mockGUI): html._text = "# Heading One\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Heading One

    \n" + assert html._pages[-1] == "

    Heading One

    \n" # Header 2 html._text = "## Heading Two\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Heading Two

    \n" + assert html._pages[-1] == "

    Heading Two

    \n" # Header 3 html._text = "### Heading Three\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Heading Three

    \n" + assert html._pages[-1] == "

    Heading Three

    \n" # Header 4 html._text = "#### Heading Four\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Heading Four

    \n" + assert html._pages[-1] == "

    Heading Four

    \n" # Title html._text = "#! Heading One\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    " "Heading One

    \n" ) @@ -130,7 +130,7 @@ def testFmtToHtml_ConvertHeaders(mockGUI): html._text = "##! Heading Two\n" html.tokenizeText() html.doConvert() - assert html.result == "

    Heading Two

    \n" + assert html._pages[-1] == "

    Heading Two

    \n" @pytest.mark.core @@ -150,7 +150,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Some nested bold and italic and " "strikethrough text here

    \n" ) @@ -162,7 +162,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): ) html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Some bold, italic, strike, " "underline, mark, " "superscript, subscript here

    \n" @@ -172,7 +172,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "Line one\nLine two\nLine three\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Line one
    Line two
    Line three

    \n" ) @@ -180,13 +180,13 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "%synopsis: The synopsis ...\n" html.tokenizeText() html.doConvert() - assert html.result == "" + assert html._pages[-1] == "" html.setSynopsis(True) html._text = "%synopsis: The synopsis ...\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    " "Synopsis: " "The synopsis ..." @@ -197,7 +197,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "%short: A short description ...\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    " "Short Description: " "A short description ..." @@ -208,13 +208,13 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "% A comment ...\n" html.tokenizeText() html.doConvert() - assert html.result == "" + assert html._pages[-1] == "" html.setComments(True) html._text = "% A comment ...\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    " "Comment: " "A comment ..." @@ -225,13 +225,13 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "@char: Bod, Jane\n" html.tokenizeText() html.doConvert() - assert html.result == "" + assert html._pages[-1] == "" html.setKeywords(True) html._text = "@char: Bod, Jane\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    " "Characters: " "Bod, " @@ -242,7 +242,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "@tag: Bod\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Tag: " "Bod

    \n" ) @@ -250,7 +250,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "@tag: Bod | Nobody Owens\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Tag: " "Bod | " "Nobody Owens

    \n" @@ -262,7 +262,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "## Chapter\n\n@pov: Bod\n@plot: Main\n@location: Europe\n\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Chapter

    \n" "

    " "Point of View: " @@ -280,7 +280,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "## Chapter\n\nThis text \u201chas dialogue\u201d in it.\n\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Chapter

    \n" "

    This text “has dialogue” in it.

    \n" ) @@ -292,7 +292,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): html._text = "## Chapter\n\nThis text ::has alt dialogue:: in it.\n\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Chapter

    \n" "

    This text ::has alt dialogue:: in it.

    \n" ) @@ -306,15 +306,17 @@ def testFmtToHtml_ConvertParagraphs(mockGUI): ) html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

    Text with one1 " "or twoERR footnotes.

    \n" ) html.appendFootnotes() - assert html.result == ( + assert html._pages[-2] == ( "

    Text with one1 " "or twoERR footnotes.

    \n" + ) + assert html._pages[-1] == ( "

    Footnotes

    \n" "
      \n" "
    1. Footnote text A.

    2. \n" @@ -336,7 +338,7 @@ def testFmtToHtml_CloseTags(mockGUI): html._text = "Text [b][i][s][u][m][sup][sub]text text text.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Text " "text text text.

      \n" ) @@ -345,7 +347,7 @@ def testFmtToHtml_CloseTags(mockGUI): html._text = "Text [b][i][s][u][m][sup][sub]text [b][i][s][u][m][sup][sub]text text.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Text " "text text text.

      \n" ) @@ -354,7 +356,7 @@ def testFmtToHtml_CloseTags(mockGUI): html._text = "Text text [/b][/i][/s][/u][/m][/sup][/sub]text text.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Text text text text.

      \n" ) @@ -380,7 +382,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.TITLE, tMeta, "A Title", [], BlockFmt.PBB | BlockFmt.CENTRE), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      " "A Title

      \n" ) @@ -390,7 +392,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.HEAD2, tMeta, "Prologue", [], BlockFmt.PBB), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      " "Prologue

      \n" ) @@ -403,14 +405,14 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.SEP, tMeta, "* * *", [], BlockFmt.CENTRE), ] html.doConvert() - assert html.result == "

      * * *

      \n" + assert html._pages[-1] == "

      * * *

      \n" # Skip html._blocks = [ (BlockTyp.SKIP, tMeta, "", [], BlockFmt.NONE), ] html.doConvert() - assert html.result == "

       

      \n" + assert html._pages[-1] == "

       

      \n" # Alignment # ========= @@ -423,7 +425,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.LEFT), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      A Title

      \n" ) @@ -434,7 +436,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.LEFT), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      A Title

      \n" ) @@ -443,7 +445,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.RIGHT), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      A Title

      \n" ) @@ -452,7 +454,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.CENTRE), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      A Title

      \n" ) @@ -461,7 +463,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.JUSTIFY), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      A Title

      \n" ) @@ -473,7 +475,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.HEAD1, tMeta, "A Title", [], BlockFmt.PBB | BlockFmt.PBA), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      A Title

      \n" ) @@ -486,7 +488,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.TEXT, tMeta, "Some text ...", [], BlockFmt.IND_L), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Some text ...

      \n" ) @@ -495,7 +497,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.TEXT, tMeta, "Some text ...", [], BlockFmt.IND_R), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Some text ...

      \n" ) @@ -504,7 +506,7 @@ def testFmtToHtml_ConvertDirect(mockGUI): (BlockTyp.TEXT, tMeta, "Some text ...", [], BlockFmt.IND_T), ] html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Some text ...

      \n" ) @@ -523,28 +525,28 @@ def testFmtToHtml_SpecialCases(mockGUI): html._text = "Text with > and < with some **bold text** in it.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Text with > and < with some bold text in it.

      \n" ) html._text = "Text with some <**bold text**> in it.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Text with some <bold text> in it.

      \n" ) html._text = "Let's > be > _difficult **shall** > we_?\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Let's > be > difficult shall > we?

      \n" ) html._text = "Test > text _<**bold**>_ and more.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Test > text <bold> and more.

      \n" ) @@ -556,7 +558,7 @@ def testFmtToHtml_SpecialCases(mockGUI): html._text = "% Test > text _<**bold**>_ and more.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      " "Comment: " "Test > text <bold> " @@ -568,7 +570,7 @@ def testFmtToHtml_SpecialCases(mockGUI): html._text = "## Heading <1>\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Heading <1>

      \n" ) @@ -579,7 +581,7 @@ def testFmtToHtml_SpecialCases(mockGUI): html._text = "Test text \\**_bold_** and more.\n" html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Test text **bold** and more.

      \n" ) @@ -632,9 +634,8 @@ def testFmtToHtml_Save(mockGUI, fncPath): html.doPreProcessing() html.tokenizeText() html.doConvert() - assert html.result == resText[i] - assert html.fullHTML == resText + assert html._pages == resText html.replaceTabs(nSpaces=2, spaceChar=" ") resText[6] = "

      A Section

      \n

        More text in scene two.

      \n" @@ -695,7 +696,7 @@ def testFmtToHtml_Methods(mockGUI): html.doPreProcessing() html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Text with <brackets> & short–dash, long—dash …

      \n" ) @@ -706,7 +707,7 @@ def testFmtToHtml_Methods(mockGUI): html.doPreProcessing() html.tokenizeText() html.doConvert() - assert html.result == ( + assert html._pages[-1] == ( "

      Text with <brackets> & short–dash, long—dash …

      \n" ) diff --git a/tests/test_formats/test_fmt_tokenizer.py b/tests/test_formats/test_fmt_tokenizer.py index 72d2c7c2..e571afe2 100644 --- a/tests/test_formats/test_fmt_tokenizer.py +++ b/tests/test_formats/test_fmt_tokenizer.py @@ -157,8 +157,6 @@ def testFmtToken_Setters(mockGUI): assert tokens._doKeywords is True # Properties - assert tokens.result == "" - assert tokens.allMarkdown == [] assert tokens.textStats == {} assert tokens.errData == [] @@ -211,14 +209,14 @@ def testFmtToken_TextOps(monkeypatch, mockGUI, mockRnd, fncPath): # First Page tokens.addRootHeading(C.hPlotRoot) - assert tokens.allMarkdown[-1] == "#! Notes: Plot\n\n" + assert tokens._raw[-1] == "#! Notes: Plot\n\n" assert tokens._blocks[-1] == ( BlockTyp.TITLE, "0000000000009:T0001", "Notes: Plot", [], BlockFmt.CENTRE ) # Not First Page tokens.addRootHeading(C.hPlotRoot) - assert tokens.allMarkdown[-1] == "#! Notes: Plot\n\n" + assert tokens._raw[-1] == "#! Notes: Plot\n\n" assert tokens._blocks[-1] == ( BlockTyp.TITLE, "0000000000009:T0001", "Notes: Plot", [], BlockFmt.CENTRE | BlockFmt.PBB ) @@ -283,7 +281,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.TITLE, TM1, "Novel Title", [], BlockFmt.CENTRE), ] - assert tokens.allMarkdown[-1] == "#! Novel Title\n\n" + assert tokens._raw[-1] == "#! Novel Title\n\n" # Note File tokens._isNovel = False @@ -294,7 +292,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.TITLE, TM1, "Note Title", [], BlockFmt.CENTRE), ] - assert tokens.allMarkdown[-1] == "#! Note Title\n\n" + assert tokens._raw[-1] == "#! Note Title\n\n" # Header 1 # ======== @@ -308,7 +306,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD1, TM1, "Novel Title", [], BlockFmt.CENTRE), ] - assert tokens.allMarkdown[-1] == "# Novel Title\n\n" + assert tokens._raw[-1] == "# Novel Title\n\n" # Note File tokens._isNovel = False @@ -319,7 +317,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD1, TM1, "Note Title", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "# Note Title\n\n" + assert tokens._raw[-1] == "# Note Title\n\n" # Header 2 # ======== @@ -332,7 +330,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD2, TM1, "Chapter One", [], BlockFmt.PBB), ] - assert tokens.allMarkdown[-1] == "## Chapter One\n\n" + assert tokens._raw[-1] == "## Chapter One\n\n" # Note File tokens._isNovel = False @@ -342,7 +340,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD2, TM1, "Heading 2", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "## Heading 2\n\n" + assert tokens._raw[-1] == "## Heading 2\n\n" # Header 3 # ======== @@ -355,7 +353,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD3, TM1, "Scene One", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "### Scene One\n\n" + assert tokens._raw[-1] == "### Scene One\n\n" # Note File tokens._isNovel = False @@ -365,7 +363,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD3, TM1, "Heading 3", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "### Heading 3\n\n" + assert tokens._raw[-1] == "### Heading 3\n\n" # Header 4 # ======== @@ -378,7 +376,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD4, TM1, "A Section", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "#### A Section\n\n" + assert tokens._raw[-1] == "#### A Section\n\n" # Note File tokens._isNovel = False @@ -388,7 +386,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD4, TM1, "Heading 4", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "#### Heading 4\n\n" + assert tokens._raw[-1] == "#### Heading 4\n\n" # Title # ===== @@ -402,7 +400,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.TITLE, TM1, "Title", [], BlockFmt.PBB | BlockFmt.CENTRE), ] - assert tokens.allMarkdown[-1] == "#! Title\n\n" + assert tokens._raw[-1] == "#! Title\n\n" # Note File tokens._isNovel = False @@ -413,7 +411,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.TITLE, TM1, "Title", [], BlockFmt.PBB | BlockFmt.CENTRE), ] - assert tokens.allMarkdown[-1] == "#! Title\n\n" + assert tokens._raw[-1] == "#! Title\n\n" # Unnumbered # ========== @@ -426,7 +424,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD2, TM1, "Prologue", [], BlockFmt.PBB), ] - assert tokens.allMarkdown[-1] == "##! Prologue\n\n" + assert tokens._raw[-1] == "##! Prologue\n\n" # Note File tokens._isNovel = False @@ -436,7 +434,7 @@ def testFmtToken_HeaderFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.HEAD2, TM1, "Prologue", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "##! Prologue\n\n" + assert tokens._raw[-1] == "##! Prologue\n\n" @pytest.mark.core @@ -711,14 +709,14 @@ def testFmtToken_MetaFormat(mockGUI): tokens._text = "%~ Some text\n" tokens.tokenizeText() assert tokens._blocks == [] - assert tokens.allMarkdown[-1] == "\n" + assert tokens._raw[-1] == "\n" # Comment tokens.setComments(False) tokens._text = "% A comment\n" tokens.tokenizeText() assert tokens._blocks == [] - assert tokens.allMarkdown[-1] == "\n" + assert tokens._raw[-1] == "\n" tokens.setComments(True) tokens._text = "% A comment\n" @@ -730,14 +728,14 @@ def testFmtToken_MetaFormat(mockGUI): (9, TextFmt.COL_B, "comment"), (18, TextFmt.COL_E, ""), ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "% A comment\n\n" + assert tokens._raw[-1] == "% A comment\n\n" # Synopsis tokens.setSynopsis(False) tokens._text = "%synopsis: The synopsis\n" tokens.tokenizeText() assert tokens._blocks == [] - assert tokens.allMarkdown[-1] == "\n" + assert tokens._raw[-1] == "\n" tokens.setSynopsis(True) tokens._text = "% synopsis: The synopsis\n" @@ -749,14 +747,14 @@ def testFmtToken_MetaFormat(mockGUI): (10, TextFmt.COL_B, "synopsis"), (22, TextFmt.COL_E, "") ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "% synopsis: The synopsis\n\n" + assert tokens._raw[-1] == "% synopsis: The synopsis\n\n" # Short tokens.setSynopsis(False) tokens._text = "% short: A short description\n" tokens.tokenizeText() assert tokens._blocks == [] - assert tokens.allMarkdown[-1] == "\n" + assert tokens._raw[-1] == "\n" tokens.setSynopsis(True) tokens._text = "% short: A short description\n" @@ -768,14 +766,14 @@ def testFmtToken_MetaFormat(mockGUI): (19, TextFmt.COL_B, "synopsis"), (38, TextFmt.COL_E, ""), ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "% short: A short description\n\n" + assert tokens._raw[-1] == "% short: A short description\n\n" # Keyword tokens.setKeywords(False) tokens._text = "@char: Bod\n" tokens.tokenizeText() assert tokens._blocks == [] - assert tokens.allMarkdown[-1] == "\n" + assert tokens._raw[-1] == "\n" tokens.setKeywords(True) tokens.tokenizeText() @@ -787,7 +785,7 @@ def testFmtToken_MetaFormat(mockGUI): (15, TextFmt.HRF_E, ""), (15, TextFmt.COL_E, ""), ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "@char: Bod\n\n" + assert tokens._raw[-1] == "@char: Bod\n\n" tokens._text = "@pov: Bod\n@plot: Main\n@location: Europe\n" tokens.tokenizeText() @@ -813,7 +811,7 @@ def testFmtToken_MetaFormat(mockGUI): (17, TextFmt.HRF_E, ""), (17, TextFmt.COL_E, ""), ], BlockFmt.Z_TOP )] - assert tokens.allMarkdown[-1] == "@pov: Bod\n@plot: Main\n@location: Europe\n\n" + assert tokens._raw[-1] == "@pov: Bod\n@plot: Main\n@location: Europe\n\n" # Ignored keywords tokens._text = "@pov: Bod\n@plot: Main\n@location: Europe\n" @@ -859,7 +857,7 @@ def testFmtToken_MarginFormat(mockGUI): (BlockTyp.TEXT, "", "Double-indented block", [], dblIndent), (BlockTyp.TEXT, "", "Right-indent, right-aligned", [], rIndAlign), ] - assert tokens.allMarkdown[-1] == ( + assert tokens._raw[-1] == ( "Some regular text\n\n" "Some left-aligned text\n\n" "Some right-aligned text\n\n" @@ -1063,12 +1061,12 @@ def testFmtToken_TextFormat(mockGUI): assert tokens._blocks == [ (BlockTyp.TEXT, "", "Some plain text\non two lines", [], BlockFmt.NONE), ] - assert tokens.allMarkdown[-1] == "Some plain text\non two lines\n\n\n\n" + assert tokens._raw[-1] == "Some plain text\non two lines\n\n\n\n" tokens.setBodyText(False) tokens.tokenizeText() assert tokens._blocks == [] - assert tokens.allMarkdown[-1] == "\n\n\n" + assert tokens._raw[-1] == "\n\n\n" tokens.setBodyText(True) # Text Emphasis @@ -1082,7 +1080,7 @@ def testFmtToken_TextFormat(mockGUI): ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "Some **bolded text** on this lines\n\n" + assert tokens._raw[-1] == "Some **bolded text** on this lines\n\n" tokens._text = "Some _italic text_ on this lines\n" tokens.tokenizeText() @@ -1094,7 +1092,7 @@ def testFmtToken_TextFormat(mockGUI): ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "Some _italic text_ on this lines\n\n" + assert tokens._raw[-1] == "Some _italic text_ on this lines\n\n" tokens._text = "Some **_bold italic text_** on this lines\n" tokens.tokenizeText() @@ -1108,7 +1106,7 @@ def testFmtToken_TextFormat(mockGUI): ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "Some **_bold italic text_** on this lines\n\n" + assert tokens._raw[-1] == "Some **_bold italic text_** on this lines\n\n" tokens._text = "Some ~~strikethrough text~~ on this lines\n" tokens.tokenizeText() @@ -1120,7 +1118,7 @@ def testFmtToken_TextFormat(mockGUI): ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == "Some ~~strikethrough text~~ on this lines\n\n" + assert tokens._raw[-1] == "Some ~~strikethrough text~~ on this lines\n\n" tokens._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" tokens.tokenizeText() @@ -1136,7 +1134,7 @@ def testFmtToken_TextFormat(mockGUI): ], BlockFmt.NONE )] - assert tokens.allMarkdown[-1] == ( + assert tokens._raw[-1] == ( "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n\n" ) @@ -2032,7 +2030,7 @@ def testFmtToken_SceneSeparators(mockGUI): md.setHardSceneFormat("* * *", False) md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# T: Title One\n\n" "Text\n\n" "~\n\n" @@ -2048,7 +2046,7 @@ def testFmtToken_SceneSeparators(mockGUI): md.setHardSceneFormat(f"H: {nwHeadFmt.TITLE}", False) md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# T: Title One\n\n" "### S: Scene One\n\n" "Text\n\n" @@ -2086,7 +2084,7 @@ def testFmtToken_SceneSeparators(mockGUI): md.setHardSceneFormat("* * *", False) md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# T: Title One\n\n" "## C: Chapter One\n\n" "Text\n\n" @@ -2103,7 +2101,7 @@ def testFmtToken_SceneSeparators(mockGUI): md.setHardSceneFormat(f"H: {nwHeadFmt.TITLE}", False) md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# T: Title One\n\n" "## C: Chapter One\n\n" "### S: Scene One\n\n" @@ -2138,7 +2136,7 @@ def testFmtToken_SceneSeparators(mockGUI): md.setHardSceneFormat("* * *", False) md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "Text\n\n" "\u205f\n\n" "Text\n\n" @@ -2190,7 +2188,7 @@ def testFmtToken_HeaderVisibility(mockGUI): md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# Novel\n\n" "# Title One\n\n" "## Prologue\n\n" @@ -2218,7 +2216,7 @@ def testFmtToken_HeaderVisibility(mockGUI): md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# Novel\n\n" "Text\n\n" "Text\n\n" @@ -2242,7 +2240,7 @@ def testFmtToken_HeaderVisibility(mockGUI): md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# Novel\n\n" "# Title One\n\n" "## Prologue\n\n" @@ -2316,7 +2314,7 @@ def testFmtToken_CounterHandling(mockGUI): # Two Novel Format md.tokenizeText() md.doConvert() - assert md.result == ( + assert md._pages[-1] == ( "# Novel One\n\n" "## U: Prologue\n\n" "Text\n\n" diff --git a/tests/test_formats/test_fmt_tomarkdown.py b/tests/test_formats/test_fmt_tomarkdown.py index 1d95ba77..ad0633ae 100644 --- a/tests/test_formats/test_fmt_tomarkdown.py +++ b/tests/test_formats/test_fmt_tomarkdown.py @@ -31,161 +31,161 @@ from novelwriter.formats.tomarkdown import ToMarkdown def testFmtToMarkdown_ConvertHeaders(mockGUI): """Test header formats in the ToMarkdown class.""" project = NWProject() - toMD = ToMarkdown(project, False) + md = ToMarkdown(project, False) - toMD._isNovel = True - toMD._isFirst = True + md._isNovel = True + md._isFirst = True # Header 1 - toMD._text = "# Partition\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "# Partition\n\n" + md._text = "# Partition\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "# Partition\n\n" # Header 2 - toMD._text = "## Chapter Title\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "## Chapter Title\n\n" + md._text = "## Chapter Title\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "## Chapter Title\n\n" # Header 3 - toMD._text = "### Scene Title\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "### Scene Title\n\n" + md._text = "### Scene Title\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "### Scene Title\n\n" # Header 4 - toMD._text = "#### Section Title\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "#### Section Title\n\n" + md._text = "#### Section Title\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "#### Section Title\n\n" # Title - toMD._text = "#! Title\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "# Title\n\n" + md._text = "#! Title\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "# Title\n\n" # Unnumbered - toMD._text = "##! Prologue\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "## Prologue\n\n" + md._text = "##! Prologue\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "## Prologue\n\n" @pytest.mark.core def testFmtToMarkdown_ConvertParagraphs(mockGUI): """Test paragraph formats in the ToMarkdown class.""" project = NWProject() - toMD = ToMarkdown(project, False) + md = ToMarkdown(project, False) - toMD._isNovel = True - toMD._isFirst = True + md._isNovel = True + md._isFirst = True # Text for Extended Markdown - toMD._extended = True - toMD._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == ( + md._extended = True + md._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == ( "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n\n" ) # Text for Standard Markdown - toMD._extended = False - toMD._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == ( + md._extended = False + md._text = "Some **nested bold and _italic_ and ~~strikethrough~~ text** here\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == ( "Some **nested bold and _italic_ and strikethrough text** here\n\n" ) # Shortcodes for Extended Markdown - toMD._extended = True - toMD._text = ( + md._extended = True + md._text = ( "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" ) - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == ( + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == ( "Some **bold**, _italic_, ~~strike~~, underline, ==mark==, " "super^script^, sub~script~ here\n\n" ) # Shortcodes for Standard Markdown - toMD._extended = False - toMD._text = ( + md._extended = False + md._text = ( "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" ) - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == ( + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == ( "Some **bold**, _italic_, strike, underline, mark, superscript, subscript here\n\n" ) # Text w/Hard Break - toMD._text = "Line one\nLine two\nLine three\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "Line one \nLine two \nLine three\n\n" + md._text = "Line one\nLine two\nLine three\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "Line one \nLine two \nLine three\n\n" # Text wo/Hard Break - toMD._text = "Line one\nLine two\nLine three\n" - toMD.setKeepLineBreaks(False) - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "Line one Line two Line three\n\n" + md._text = "Line one\nLine two\nLine three\n" + md.setKeepLineBreaks(False) + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "Line one Line two Line three\n\n" # Synopsis, Short - toMD._text = "%synopsis: The synopsis ...\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "" + md._text = "%synopsis: The synopsis ...\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "" - toMD.setSynopsis(True) - toMD._text = "%synopsis: The synopsis ...\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "**Synopsis:** The synopsis ...\n\n" + md.setSynopsis(True) + md._text = "%synopsis: The synopsis ...\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "**Synopsis:** The synopsis ...\n\n" - toMD.setSynopsis(True) - toMD._text = "%short: A description ...\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "**Short Description:** A description ...\n\n" + md.setSynopsis(True) + md._text = "%short: A description ...\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "**Short Description:** A description ...\n\n" # Comment - toMD._text = "% A comment ...\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "" + md._text = "% A comment ...\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "" - toMD.setComments(True) - toMD._text = "% A comment ...\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "**Comment:** A comment ...\n\n" + md.setComments(True) + md._text = "% A comment ...\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "**Comment:** A comment ...\n\n" # Keywords - toMD._text = "@char: Bod, Jane\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "" + md._text = "@char: Bod, Jane\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "" - toMD.setKeywords(True) - toMD._text = "@char: Bod, Jane\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "**Characters:** Bod, Jane\n\n" + md.setKeywords(True) + md._text = "@char: Bod, Jane\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "**Characters:** Bod, Jane\n\n" # Multiple Keywords - toMD.setKeywords(True) - toMD._text = "## Chapter\n\n@pov: Bod\n@plot: Main\n@location: Europe\n\n" - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == ( + md.setKeywords(True) + md._text = "## Chapter\n\n@pov: Bod\n@plot: Main\n@location: Europe\n\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == ( "## Chapter\n\n" "**Point of View:** Bod \n" "**Plot:** Main \n" @@ -193,17 +193,19 @@ def testFmtToMarkdown_ConvertParagraphs(mockGUI): ) # Footnotes - toMD._text = ( + md._text = ( "Text with one[footnote:fa] or two[footnote:fb] footnotes.\n\n" "%footnote.fa: Footnote text A.\n\n" ) - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == "Text with one[1] or two[ERR] footnotes.\n\n" + md.tokenizeText() + md.doConvert() + assert md._pages[-1] == "Text with one[1] or two[ERR] footnotes.\n\n" - toMD.appendFootnotes() - assert toMD.result == ( + md.appendFootnotes() + assert md._pages[-2] == ( "Text with one[1] or two[ERR] footnotes.\n\n" + ) + assert md._pages[-1] == ( "### Footnotes\n\n" "1. Footnote text A.\n\n" ) @@ -213,43 +215,43 @@ def testFmtToMarkdown_ConvertParagraphs(mockGUI): def testFmtToMarkdown_ConvertDirect(mockGUI): """Test the converter directly using the ToMarkdown class.""" project = NWProject() - toMD = ToMarkdown(project, False) - toMD._isNovel = True + md = ToMarkdown(project, False) + md._isNovel = True # Special Titles # ============== # Title - toMD._blocks = [ + md._blocks = [ (BlockTyp.TITLE, "", "A Title", [], BlockFmt.PBB | BlockFmt.CENTRE), ] - toMD.doConvert() - assert toMD.result == "# A Title\n\n" + md.doConvert() + assert md._pages[-1] == "# A Title\n\n" # Separators # ========== # Separator - toMD._blocks = [ + md._blocks = [ (BlockTyp.SEP, "", "* * *", [], BlockFmt.CENTRE), ] - toMD.doConvert() - assert toMD.result == "* * *\n\n" + md.doConvert() + assert md._pages[-1] == "* * *\n\n" # Skip - toMD._blocks = [ + md._blocks = [ (BlockTyp.SKIP, "", "", [], BlockFmt.NONE), ] - toMD.doConvert() - assert toMD.result == "\n\n" + md.doConvert() + assert md._pages[-1] == "\n\n" @pytest.mark.core def testFmtToMarkdown_Save(mockGUI, fncPath): """Test the save method of the ToMarkdown class.""" project = NWProject() - toMD = ToMarkdown(project, False) - toMD._isNovel = True + md = ToMarkdown(project, False) + md._isNovel = True # Build Project # ============= @@ -274,22 +276,21 @@ def testFmtToMarkdown_Save(mockGUI, fncPath): ] for i in range(len(docText)): - toMD._text = docText[i] - toMD.doPreProcessing() - toMD.tokenizeText() - toMD.doConvert() - assert toMD.result == resText[i] + md._text = docText[i] + md.doPreProcessing() + md.tokenizeText() + md.doConvert() - assert toMD.fullMD == resText - assert toMD.getFullResultSize() == len("".join(resText)) + assert md._pages == resText + assert md.getFullResultSize() == len("".join(resText)) - toMD.replaceTabs(nSpaces=4, spaceChar=" ") + md.replaceTabs(nSpaces=4, spaceChar=" ") resText[6] = "#### A Section\n\n More text in scene two.\n\n" - assert toMD.fullMD == resText + assert md._pages == resText # Check File # ========== saveFile = fncPath / "outFile.md" - toMD.saveDocument(saveFile) + md.saveDocument(saveFile) assert saveFile.read_text(encoding="utf-8") == "".join(resText)