mirror of
https://git.srhtnin.garden/sarah/SaraView.git
synced 2026-10-13 18:28:14 +02:00
Added head and tail functions. They work with portals: {./Example.md
***portalname head 2}
This commit is contained in:
1 parent
82a728dc67
commit
778579c04f
1 file changed
+41
-1
+41
-1
@@ -11,7 +11,9 @@ from Preview import ReadTextFile
|
||||
PortalFileTypes = {"markdown", "text"}
|
||||
|
||||
MarkerPattern = re.compile(
|
||||
r"\{(?:(?P<CrossPath>[^\s{}']+)\s+)?\*\*\*(?P<CrossName>[^\s*{}]+)\}"
|
||||
r"\{(?:(?P<CrossPath>[^\s{}']+)\s+)?\*\*\*(?P<CrossName>[^\s*{}]+)"
|
||||
r"(?:\s+(?P<CrossPipe>head|tail)\s+(?P<CrossPipeCount>\d+))?\}"
|
||||
r"|\{(?P<PipePath>[^\s{}']+)\s+(?P<PipeMode>head|tail)\s+(?P<PipeCount>\d+)\}"
|
||||
r"|\{(?P<LinePath>[^\s{}']+)\s+'(?P<LineNumber>\d+)'\}"
|
||||
r"|\{\*\*(?P<LineName>[^\s*{}]+)\}"
|
||||
r"|\{\*(?P<BlockName>[^\s*{}]+)\}"
|
||||
@@ -188,6 +190,30 @@ def _ResolveCrossFileReference(
|
||||
return _FindLocalDefinitions(Content).get(Name)
|
||||
|
||||
|
||||
def _ApplyPipe(Text: str, Mode: str, Count: int) -> str:
|
||||
Lines = Text.splitlines()
|
||||
Selected = Lines[:Count] if Mode == "head" else Lines[-Count:] if Count > 0 else []
|
||||
return "\n".join(Selected)
|
||||
|
||||
|
||||
def _ResolveWholeFilePipe(
|
||||
RootName: str,
|
||||
RefererDirectory: str,
|
||||
PathText: str,
|
||||
Mode: str,
|
||||
Count: int,
|
||||
Username: str,
|
||||
UserGroups: list[str],
|
||||
) -> str | None:
|
||||
TargetRelativePath = _NormalizeRelativePath(RefererDirectory, PathText)
|
||||
Content = _ReadAccessiblePortalSource(RootName, TargetRelativePath, Username, UserGroups)
|
||||
|
||||
if Content is None:
|
||||
return None
|
||||
|
||||
return _ApplyPipe(_ResolveLocalPortals(Content), Mode, Count)
|
||||
|
||||
|
||||
def _ResolveLineNumberReference(
|
||||
RootName: str,
|
||||
RefererDirectory: str,
|
||||
@@ -233,6 +259,20 @@ def ResolvePortals(
|
||||
Username,
|
||||
UserGroups,
|
||||
)
|
||||
if Replacement is not None and Match.group("CrossPipe"):
|
||||
Replacement = _ApplyPipe(
|
||||
Replacement, Match.group("CrossPipe"), int(Match.group("CrossPipeCount"))
|
||||
)
|
||||
elif Match.group("PipeMode"):
|
||||
Replacement = _ResolveWholeFilePipe(
|
||||
RootName,
|
||||
RefererDirectory,
|
||||
Match.group("PipePath"),
|
||||
Match.group("PipeMode"),
|
||||
int(Match.group("PipeCount")),
|
||||
Username,
|
||||
UserGroups,
|
||||
)
|
||||
elif Match.group("LineNumber"):
|
||||
Replacement = _ResolveLineNumberReference(
|
||||
RootName,
|
||||
|
||||
Reference in new issue
Block a user