Separate ordinary headers and novel headers in the Tokenizer

This commit is contained in:
Veronica Berglyd Olsen
2025-01-25 14:58:06 +01:00
parent 5be1e2c954
commit 13e6199af2
5 changed files with 129 additions and 126 deletions
+20 -19
View File
@@ -68,11 +68,20 @@ COMMENT_STYLE = {
nwComment.COMMENT: ComStyle(),
nwComment.STORY: ComStyle("", "modifier", "note"),
}
HEADINGS = [BlockTyp.TITLE, BlockTyp.HEAD1, BlockTyp.HEAD2, BlockTyp.HEAD3, BlockTyp.HEAD4]
SKIP_INDENT = [
BlockTyp.TITLE, BlockTyp.HEAD1, BlockTyp.HEAD2, BlockTyp.HEAD2, BlockTyp.HEAD3,
BlockTyp.HEAD4, BlockTyp.SEP, BlockTyp.SKIP,
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,
]
SKIP_INDENT = HEADINGS + [BlockTyp.SEP, BlockTyp.SKIP]
B_EMPTY: T_Block = (BlockTyp.EMPTY, "", "", [], BlockFmt.NONE)
@@ -654,6 +663,7 @@ class Tokenizer(ABC):
if not (isPlain or isNovel and sHide):
tStyle |= self._titleStyle
if isNovel:
tType = BlockTyp.PART if isPlain else BlockTyp.TITLE
if sHide:
tText = ""
tType = BlockTyp.EMPTY
@@ -687,6 +697,7 @@ class Tokenizer(ABC):
sHide = self._hideChapter if isPlain else self._hideUnNum
tFormat = self._fmtChapter if isPlain else self._fmtUnNum
if isNovel:
tType = BlockTyp.CHAPTER
if isPlain:
self._hFormatter.incChapter()
if sHide:
@@ -721,6 +732,7 @@ class Tokenizer(ABC):
sHide = self._hideScene if isPlain else self._hideHScene
tFormat = self._fmtScene if isPlain else self._fmtHScene
if isNovel:
tType = BlockTyp.SCENE
self._hFormatter.incScene()
if sHide:
tText = ""
@@ -752,6 +764,7 @@ class Tokenizer(ABC):
tText = aLine[5:].strip()
tType = BlockTyp.HEAD4
if isNovel:
tType = BlockTyp.SECTION
if self._hideSection:
tText = ""
tType = BlockTyp.EMPTY
@@ -923,22 +936,10 @@ class Tokenizer(ABC):
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 tType == BlockTyp.TITLE:
prefix = "TT"
elif tType == BlockTyp.HEAD1:
prefix = "PT" if isNovel else "H1"
elif tType == BlockTyp.HEAD2:
prefix = "CH" if isNovel else "H2"
elif tType == BlockTyp.HEAD3:
prefix = "SC" if isNovel else "H3"
else:
continue
text = tText.replace(nwHeadFmt.BR, " ").replace("&", "&")
self._outline[tKey] = f"{prefix}|{text}"
if prefix := OUTLINE_CODE.get(tType):
text = tText.replace(nwHeadFmt.BR, " ").replace("&", "&")
self._outline[tKey] = f"{prefix}|{text}"
return
def countStats(self) -> None: