diff --git a/nw/core/tohtml.py b/nw/core/tohtml.py index 0fb517b8..9b5eb425 100644 --- a/nw/core/tohtml.py +++ b/nw/core/tohtml.py @@ -148,30 +148,26 @@ class ToHtml(Tokenizer): # Styles aStyle = [] if tStyle is not None: - # if tStyle & self.A_LEFT: - # aStyle.append("text-align: left;") - # if tStyle & self.A_RIGHT: - # aStyle.append("text-align: right;") + if tStyle & self.A_LEFT: + aStyle.append("text-align: left;") + if tStyle & self.A_RIGHT: + aStyle.append("text-align: right;") if tStyle & self.A_CENTRE: aStyle.append("text-align: center;") - # if tStyle & self.A_JUSTIFY: - # aStyle.append("text-align: justify;") - # if tStyle & self.A_PBB: - # aStyle.append("page-break-before: always;") - # if tStyle & self.A_PBB_L: - # aStyle.append("page-break-before: left;") - # if tStyle & self.A_PBB_R: - # aStyle.append("page-break-before: right;") - # if tStyle & self.A_PBB_AV: - # aStyle.append("page-break-before: avoid;") - # if tStyle & self.A_PBA: - # aStyle.append("page-break-after: always;") - # if tStyle & self.A_PBA_L: - # aStyle.append("page-break-after: left;") - # if tStyle & self.A_PBA_R: - # aStyle.append("page-break-after: right;") - # if tStyle & self.A_PBA_AV: - # aStyle.append("page-break-after: avoid;") + if tStyle & self.A_JUSTIFY: + aStyle.append("text-align: justify;") + if tStyle & self.A_PBB: + aStyle.append("page-break-before: always;") + if tStyle & self.A_PBB_AV: + aStyle.append("page-break-before: avoid;") + if tStyle & self.A_PBB_NO: + aStyle.append("page-break-before: never;") + if tStyle & self.A_PBA: + aStyle.append("page-break-after: always;") + if tStyle & self.A_PBA_AV: + aStyle.append("page-break-after: avoid;") + if tStyle & self.A_PBA_NO: + aStyle.append("page-break-after: never;") if len(aStyle) > 0: hStyle = " style='%s'" % (" ".join(aStyle)) @@ -195,7 +191,7 @@ class ToHtml(Tokenizer): elif tType == self.T_TITLE: tHead = tText.replace(r"\\", "
") - tmpResult.append("
%s
\n" % (hStyle, tHead)) + tmpResult.append("

%s

\n" % (hStyle, tHead)) elif tType == self.T_HEAD1: tHead = tText.replace(r"\\", "
") @@ -258,8 +254,7 @@ class ToHtml(Tokenizer): theStyles.append(r"h1, h2 {color: rgb(66, 113, 174);}") theStyles.append(r"h3, h4 {color: rgb(50, 50, 50);}") theStyles.append(r"h1, h2, h3, h4 {page-break-after: avoid;}") - theStyles.append(r"h1 {page-break-before: always;}") - theStyles.append(r".title {font-size: 2.5em; font-weight: bold; page-break-before: never;}") + theStyles.append(r".title {font-size: 2.5em; font-weight: bold;}") theStyles.append(r".tags {color: rgb(245, 135, 31); font-weight: bold;}") theStyles.append(r".break {text-align: left;}") theStyles.append(r".sep {text-align: center; margin-top: 1em; margin-bottom: 1em;}") diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index 8773cdb1..d4e001f5 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -60,14 +60,17 @@ class Tokenizer(): T_SEP = 11 # Scene separator T_SKIP = 12 # Paragraph break + A_NONE = 0 # No special style A_LEFT = 1 # Left aligned A_RIGHT = 2 # Right aligned A_CENTRE = 4 # Centred A_JUSTIFY = 8 # Justified - A_PBB = 16 # Page break before - A_PBB_AV = 32 # Page break, avoid - A_PBA = 64 # Page break after - A_PBA_AV = 128 # Page break, avoid + A_PBB = 16 # Page break before always + A_PBB_AV = 32 # Page break before avoid + A_PBB_NO = 64 # Page break before never + A_PBA = 128 # Page break after always + A_PBA_AV = 256 # Page break after avoid + A_PBA_NO = 512 # Page break after avoid def __init__(self, theProject, theParent): @@ -288,7 +291,7 @@ class Tokenizer(): # Tag lines starting with specific characters if len(aLine.strip()) == 0: self.theTokens.append(( - self.T_EMPTY, "", None, None + self.T_EMPTY, "", None, self.A_NONE )) tmpMarkdown.append("\n") @@ -296,45 +299,45 @@ class Tokenizer(): cLine = aLine[1:].strip() if cLine.lower().startswith("synopsis:"): self.theTokens.append(( - self.T_SYNOPSIS, cLine[9:].strip(), None, None + self.T_SYNOPSIS, cLine[9:].strip(), None, self.A_NONE )) if self.doSynopsis: tmpMarkdown.append("%s\n" % aLine) else: self.theTokens.append(( - self.T_COMMENT, aLine[1:].strip(), None, None + self.T_COMMENT, aLine[1:].strip(), None, self.A_NONE )) if self.doComments: tmpMarkdown.append("%s\n" % aLine) elif aLine[0] == "@": self.theTokens.append(( - self.T_KEYWORD, aLine[1:].strip(), None, None + self.T_KEYWORD, aLine[1:].strip(), None, self.A_NONE )) if self.doKeywords: tmpMarkdown.append("%s\n" % aLine) elif aLine[:2] == "# ": self.theTokens.append(( - self.T_HEAD1, aLine[2:].strip(), None, None + self.T_HEAD1, aLine[2:].strip(), None, self.A_PBB )) tmpMarkdown.append("%s\n" % aLine) elif aLine[:3] == "## ": self.theTokens.append(( - self.T_HEAD2, aLine[3:].strip(), None, None + self.T_HEAD2, aLine[3:].strip(), None, self.A_NONE )) tmpMarkdown.append("%s\n" % aLine) elif aLine[:4] == "### ": self.theTokens.append(( - self.T_HEAD3, aLine[4:].strip(), None, None + self.T_HEAD3, aLine[4:].strip(), None, self.A_NONE )) tmpMarkdown.append("%s\n" % aLine) elif aLine[:5] == "#### ": self.theTokens.append(( - self.T_HEAD4, aLine[5:].strip(), None, None + self.T_HEAD4, aLine[5:].strip(), None, self.A_NONE )) tmpMarkdown.append("%s\n" % aLine) @@ -359,13 +362,13 @@ class Tokenizer(): # sorted by position fmtPos = sorted(fmtPos, key=itemgetter(0)) self.theTokens.append(( - self.T_TEXT, aLine, fmtPos, None + self.T_TEXT, aLine, fmtPos, self.A_NONE )) tmpMarkdown.append("%s\n" % aLine) # Always add an empty line at the end self.theTokens.append(( - self.T_EMPTY, "", None, None + self.T_EMPTY, "", None, self.A_NONE )) tmpMarkdown.append("\n") @@ -402,7 +405,7 @@ class Tokenizer(): tText = self._formatHeading(self.fmtTitle, tText) self.theTokens[n] = ( - tType, tText, None, None + tType, tText, None, self.A_NONE ) elif tType == self.T_HEAD2: @@ -418,7 +421,7 @@ class Tokenizer(): # Format the chapter header self.theTokens[n] = ( - tType, tText, None, None + tType, tText, None, self.A_PBB ) # Set scene variables @@ -435,21 +438,21 @@ class Tokenizer(): tTemp = self._formatHeading(self.fmtScene, tText) if tTemp == "" and self.hideScene: self.theTokens[n] = ( - self.T_EMPTY, "", None, None + self.T_EMPTY, "", None, self.A_NONE ) elif tTemp == "" and not self.hideScene: if self.firstScene: self.theTokens[n] = ( - self.T_EMPTY, "", None, None + self.T_EMPTY, "", None, self.A_NONE ) else: self.theTokens[n] = ( - self.T_SKIP, "", None, None + self.T_SKIP, "", None, self.A_NONE ) elif tTemp == self.fmtScene: if self.firstScene: self.theTokens[n] = ( - self.T_EMPTY, "", None, None + self.T_EMPTY, "", None, self.A_NONE ) else: self.theTokens[n] = ( @@ -457,7 +460,7 @@ class Tokenizer(): ) else: self.theTokens[n] = ( - tType, tTemp, None, None + tType, tTemp, None, self.A_NONE ) # Definitely no longer the first scene @@ -470,11 +473,11 @@ class Tokenizer(): tTemp = self._formatHeading(self.fmtSection, tText) if tTemp == "" and self.hideSection: self.theTokens[n] = ( - self.T_EMPTY, "", None, None + self.T_EMPTY, "", None, self.A_NONE ) elif tTemp == "" and not self.hideSection: self.theTokens[n] = ( - self.T_SKIP, "", None, None + self.T_SKIP, "", None, self.A_NONE ) elif tTemp == self.fmtSection: self.theTokens[n] = ( @@ -482,7 +485,7 @@ class Tokenizer(): ) else: self.theTokens[n] = ( - tType, tTemp, None, None + tType, tTemp, None, self.A_NONE ) # For title page and partitions, we need to centre all text. @@ -494,12 +497,19 @@ class Tokenizer(): tType = tToken[0] tText = tToken[1] tFormat = tToken[2] - if self.isTitle: - if tType == self.T_HEAD1: - tType = self.T_TITLE - self.theTokens[n] = ( - tType, tText, tFormat, self.A_CENTRE - ) + if tType == self.T_HEAD1: + if self.isTitle: + self.theTokens[n] = ( + self.T_TITLE, tText, tFormat, self.A_PBB_NO | self.A_CENTRE + ) + else: + self.theTokens[n] = ( + tType, tText, tFormat, self.A_PBB | self.A_CENTRE + ) + else: + self.theTokens[n] = ( + tType, tText, tFormat, self.A_CENTRE + ) # Add a page break after the last entry n = len(self.theTokens) - 1 diff --git a/sample/sampleNovel/data_e/dca4be2fcaf8_main.nwd b/sample/sampleNovel/data_e/dca4be2fcaf8_main.nwd new file mode 100644 index 00000000..679e4e27 --- /dev/null +++ b/sample/sampleNovel/data_e/dca4be2fcaf8_main.nwd @@ -0,0 +1,4 @@ +%%~ edca4be2fcaf8:7031beac91f75:Part 1 +# Part One + +The first part. \ No newline at end of file diff --git a/sample/sampleNovel/nwProject.nwx b/sample/sampleNovel/nwProject.nwx index 9e0468e6..d0405ad5 100644 --- a/sample/sampleNovel/nwProject.nwx +++ b/sample/sampleNovel/nwProject.nwx @@ -1,5 +1,5 @@ - + Sample Project Sample Project @@ -10,7 +10,7 @@ True True - 96b68994dfa3d + 636b6aa9b697b 6a2d6d5f4f401 875 @@ -44,7 +44,7 @@ Main - + Novel ROOT @@ -65,7 +65,20 @@ 2 78 - + + Part 1 + FILE + NOVEL + New + False + True + PARTITION + 0 + 0 + 0 + 0 + + A Folder FOLDER NOVEL