Generalise heading comments
This commit is contained in:
@@ -386,10 +386,10 @@ class Index:
|
|||||||
|
|
||||||
elif line.startswith("%"):
|
elif line.startswith("%"):
|
||||||
cStyle, cKey, cText, _, _ = processComment(line)
|
cStyle, cKey, cText, _, _ = processComment(line)
|
||||||
if cStyle in (nwComment.SYNOPSIS, nwComment.SHORT):
|
if cStyle == nwComment.FOOTNOTE:
|
||||||
self._itemIndex.setHeadingSynopsis(tHandle, cTitle, cText)
|
|
||||||
elif cStyle == nwComment.FOOTNOTE:
|
|
||||||
self._itemIndex.addNoteKey(tHandle, "footnotes", cKey)
|
self._itemIndex.addNoteKey(tHandle, "footnotes", cKey)
|
||||||
|
else:
|
||||||
|
self._itemIndex.setHeadingComment(tHandle, cTitle, cStyle, cKey, cText)
|
||||||
|
|
||||||
# Count words for remaining text after last heading
|
# Count words for remaining text after last heading
|
||||||
if pTitle != TT_NONE:
|
if pTitle != TT_NONE:
|
||||||
@@ -1007,10 +1007,13 @@ class ItemIndex:
|
|||||||
self._items[tHandle].setHeadingCounts(sTitle, cC, wC, pC)
|
self._items[tHandle].setHeadingCounts(sTitle, cC, wC, pC)
|
||||||
return
|
return
|
||||||
|
|
||||||
def setHeadingSynopsis(self, tHandle: str, sTitle: str, text: str) -> None:
|
def setHeadingComment(
|
||||||
"""Set the synopsis text for a heading on a given item."""
|
self, tHandle: str, sTitle: str,
|
||||||
|
comment: nwComment, key: str, text: str,
|
||||||
|
) -> None:
|
||||||
|
"""Set a story comment for a heading on a given item."""
|
||||||
if tHandle in self._items:
|
if tHandle in self._items:
|
||||||
self._items[tHandle].setHeadingSynopsis(sTitle, text)
|
self._items[tHandle].setHeadingComment(sTitle, comment, key, text)
|
||||||
return
|
return
|
||||||
|
|
||||||
def setHeadingTag(self, tHandle: str, sTitle: str, tagKey: str) -> None:
|
def setHeadingTag(self, tHandle: str, sTitle: str, tagKey: str) -> None:
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ from typing import TYPE_CHECKING, Literal
|
|||||||
from novelwriter import CONFIG
|
from novelwriter import CONFIG
|
||||||
from novelwriter.common import checkInt, isListInstance, isTitleTag
|
from novelwriter.common import checkInt, isListInstance, isTitleTag
|
||||||
from novelwriter.constants import nwKeyWords, nwStyles
|
from novelwriter.constants import nwKeyWords, nwStyles
|
||||||
|
from novelwriter.enum import nwComment
|
||||||
|
|
||||||
if TYPE_CHECKING: # pragma: no cover
|
if TYPE_CHECKING: # pragma: no cover
|
||||||
from novelwriter.core.index import TagsIndex
|
from novelwriter.core.index import TagsIndex
|
||||||
@@ -113,10 +114,10 @@ class IndexNode:
|
|||||||
self._headings[sTitle].setCounts([cCount, wCount, pCount])
|
self._headings[sTitle].setCounts([cCount, wCount, pCount])
|
||||||
return
|
return
|
||||||
|
|
||||||
def setHeadingSynopsis(self, sTitle: str, text: str) -> None:
|
def setHeadingComment(self, sTitle: str, comment: nwComment, key: str, text: str) -> None:
|
||||||
"""Set the synopsis text of a heading."""
|
"""Set the comment text of a heading."""
|
||||||
if sTitle in self._headings:
|
if sTitle in self._headings:
|
||||||
self._headings[sTitle].setSynopsis(text)
|
self._headings[sTitle].setComment(comment, key, text)
|
||||||
return
|
return
|
||||||
|
|
||||||
def setHeadingTag(self, sTitle: str, tag: str) -> None:
|
def setHeadingTag(self, sTitle: str, tag: str) -> None:
|
||||||
@@ -302,9 +303,10 @@ class IndexHeading:
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
def setSynopsis(self, text: str) -> None:
|
def setComment(self, comment: nwComment, key: str, text: str) -> None:
|
||||||
"""Set the synopsis text and make sure it is a string."""
|
"""Set the text for a comment and make sure it is a string."""
|
||||||
self._comments["summary"] = str(text)
|
if comment in (nwComment.SHORT, nwComment.SYNOPSIS):
|
||||||
|
self._comments["summary"] = str(text)
|
||||||
return
|
return
|
||||||
|
|
||||||
def setTag(self, tag: str) -> None:
|
def setTag(self, tag: str) -> None:
|
||||||
|
|||||||
@@ -31,12 +31,14 @@ MODIFIERS = {
|
|||||||
"short": nwComment.SHORT,
|
"short": nwComment.SHORT,
|
||||||
"note": nwComment.NOTE,
|
"note": nwComment.NOTE,
|
||||||
"footnote": nwComment.FOOTNOTE,
|
"footnote": nwComment.FOOTNOTE,
|
||||||
|
"story": nwComment.STORY,
|
||||||
}
|
}
|
||||||
KEY_REQ = {
|
KEY_REQ = {
|
||||||
"synopsis": 0, # Key not allowed
|
"synopsis": 0, # Key not allowed
|
||||||
"short": 0, # Key not allowed
|
"short": 0, # Key not allowed
|
||||||
"note": 1, # Key optional
|
"note": 1, # Key optional
|
||||||
"footnote": 2, # Key required
|
"footnote": 2, # Key required
|
||||||
|
"story": 2, # Key required
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1196,7 +1196,7 @@ def testCoreIndex_ItemIndex(nwGUI, fncPath, mockRnd):
|
|||||||
|
|
||||||
# Set the remaining data values
|
# Set the remaining data values
|
||||||
itemIndex.setHeadingCounts(cHandle, "T0001", 60, 10, 2)
|
itemIndex.setHeadingCounts(cHandle, "T0001", 60, 10, 2)
|
||||||
itemIndex.setHeadingSynopsis(cHandle, "T0001", "In the beginning ...")
|
itemIndex.setHeadingComment(cHandle, "T0001", nwComment.SYNOPSIS, "", "In the beginning ...")
|
||||||
itemIndex.setHeadingTag(cHandle, "T0001", "One")
|
itemIndex.setHeadingTag(cHandle, "T0001", "One")
|
||||||
itemIndex.addHeadingRef(cHandle, "T0001", ["Jane"], "@pov")
|
itemIndex.addHeadingRef(cHandle, "T0001", ["Jane"], "@pov")
|
||||||
itemIndex.addHeadingRef(cHandle, "T0001", ["Jane"], "@focus")
|
itemIndex.addHeadingRef(cHandle, "T0001", ["Jane"], "@focus")
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ from novelwriter.core.index import TagsIndex
|
|||||||
from novelwriter.core.indexdata import IndexHeading, IndexNode
|
from novelwriter.core.indexdata import IndexHeading, IndexNode
|
||||||
from novelwriter.core.item import NWItem
|
from novelwriter.core.item import NWItem
|
||||||
from novelwriter.core.project import NWProject
|
from novelwriter.core.project import NWProject
|
||||||
|
from novelwriter.enum import nwComment
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.core
|
@pytest.mark.core
|
||||||
@@ -74,8 +75,8 @@ def testCoreIndexData_IndexNode(mockGUI):
|
|||||||
assert head2.paraCount == 6
|
assert head2.paraCount == 6
|
||||||
|
|
||||||
# Set synopsis
|
# Set synopsis
|
||||||
node.setHeadingSynopsis("T0001", "The first")
|
node.setHeadingComment("T0001", nwComment.SYNOPSIS, "", "The first")
|
||||||
node.setHeadingSynopsis("T0002", "The second")
|
node.setHeadingComment("T0002", nwComment.SYNOPSIS, "", "The second")
|
||||||
assert head1.synopsis == "The first"
|
assert head1.synopsis == "The first"
|
||||||
assert head2.synopsis == "The second"
|
assert head2.synopsis == "The second"
|
||||||
|
|
||||||
@@ -213,7 +214,7 @@ def testCoreIndexData_IndexHeading():
|
|||||||
assert head.mainCount == 42
|
assert head.mainCount == 42
|
||||||
|
|
||||||
# Set Summary
|
# Set Summary
|
||||||
head.setSynopsis("In the beginning ...")
|
head.setComment(nwComment.SYNOPSIS, "", "In the beginning ...")
|
||||||
assert head.synopsis == "In the beginning ..."
|
assert head.synopsis == "In the beginning ..."
|
||||||
|
|
||||||
# Set Tag
|
# Set Tag
|
||||||
|
|||||||
Reference in New Issue
Block a user