Separate ordinary headers and novel headers in the Tokenizer
This commit is contained in:
@@ -104,17 +104,21 @@ class BlockTyp(IntEnum):
|
||||
|
||||
EMPTY = 1 # Empty line (new paragraph)
|
||||
TITLE = 2 # Title
|
||||
HEAD1 = 3 # Heading 1
|
||||
HEAD2 = 4 # Heading 2
|
||||
HEAD3 = 5 # Heading 3
|
||||
HEAD4 = 6 # Heading 4
|
||||
TEXT = 7 # Text line
|
||||
SEP = 8 # Scene separator
|
||||
SKIP = 9 # Paragraph break
|
||||
SUMMARY = 10 # Synopsis/short comment
|
||||
NOTE = 11 # Note
|
||||
COMMENT = 12 # Comment
|
||||
KEYWORD = 13 # Tag/reference keywords
|
||||
PART = 3 # Partition
|
||||
CHAPTER = 4 # Chapter
|
||||
SCENE = 5 # Scene
|
||||
SECTION = 6 # Section
|
||||
HEAD1 = 7 # Heading 1
|
||||
HEAD2 = 8 # Heading 2
|
||||
HEAD3 = 9 # Heading 3
|
||||
HEAD4 = 10 # Heading 4
|
||||
TEXT = 11 # Text line
|
||||
SEP = 12 # Scene separator
|
||||
SKIP = 13 # Paragraph break
|
||||
SUMMARY = 14 # Synopsis/short comment
|
||||
NOTE = 15 # Note
|
||||
COMMENT = 16 # Comment
|
||||
KEYWORD = 17 # Tag/reference keywords
|
||||
|
||||
|
||||
class BlockFmt(Flag):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -113,19 +113,15 @@ class ToMarkdown(Tokenizer):
|
||||
tTemp = self._formatText(tText, tFormat, mTags).replace("\n", " \n")
|
||||
lines.append(f"{tTemp}\n\n")
|
||||
|
||||
elif tType == BlockTyp.TITLE:
|
||||
elif tType in (BlockTyp.TITLE, BlockTyp.HEAD1, BlockTyp.PART, BlockTyp.CHAPTER):
|
||||
tHead = tText.replace("\n", " - ")
|
||||
lines.append(f"# {tHead}\n\n")
|
||||
|
||||
elif tType == BlockTyp.HEAD1:
|
||||
tHead = tText.replace("\n", " - ")
|
||||
lines.append(f"# {tHead}\n\n")
|
||||
|
||||
elif tType == BlockTyp.HEAD2:
|
||||
elif tType in (BlockTyp.HEAD2, BlockTyp.SCENE):
|
||||
tHead = tText.replace("\n", " - ")
|
||||
lines.append(f"## {tHead}\n\n")
|
||||
|
||||
elif tType == BlockTyp.HEAD3:
|
||||
elif tType in (BlockTyp.HEAD3, BlockTyp.SECTION):
|
||||
tHead = tText.replace("\n", " - ")
|
||||
lines.append(f"### {tHead}\n\n")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user