Ještě více magie, která se snaží zachraňovat blokové výstupy z příkazů, které byly zavolány jako Span.
This commit is contained in:
parent
7b81919914
commit
e2f2c4f5f0
3 changed files with 28 additions and 3 deletions
|
@ -16,7 +16,7 @@ class InlineCommand(Span, Command):
|
|||
if len(content) == 1 and (isinstance(content[0], Para) or isinstance(content[0], Plain)):
|
||||
return Span(*content[0].content)
|
||||
else:
|
||||
raise InlineError(f"The command {self.attributes['c']} returned multiple Paragraphs and must be executed using `::: {{c={self.attributes['c']}}}\\n:::`.\n\n{content}")
|
||||
return Div(*content)
|
||||
pass
|
||||
|
||||
class BlockCommand(Div, Command):
|
||||
|
|
|
@ -49,7 +49,7 @@ class FormatitkoRecursiveError(Exception):
|
|||
eprint('on line: "' + stringify(line).strip() + '"', end="")
|
||||
eprint()
|
||||
eprint("in element: " + str(self.elements[0]).replace("\n", "\\n"))
|
||||
sys.tracebacklimit = 2
|
||||
sys.tracebacklimit = 0
|
||||
raise self.__cause__ from None
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ from .context import Group, InlineGroup, BlockGroup
|
|||
from .util import nullify, import_md
|
||||
from .context import Context, CommandCallable
|
||||
from .whitespace import Whitespace, bavlna
|
||||
from .command import BlockCommand, InlineCommand, CodeCommand, Command
|
||||
from .command import BlockCommand, InlineCommand, CodeCommand, Command, InlineError
|
||||
from .command_util import handle_command_define, parse_command
|
||||
from .nop_processor import NOPProcessor, ELCl, DoubleDocError
|
||||
|
||||
|
@ -56,6 +56,18 @@ class TransformProcessor(NOPProcessor):
|
|||
return nullify(e)
|
||||
return e
|
||||
|
||||
def transform_ListContainer(self, e: ListContainer) -> ListContainer:
|
||||
try:
|
||||
return super().transform_ListContainer(e)
|
||||
except TypeError as err:
|
||||
names = []
|
||||
for el in e:
|
||||
if hasattr(el, "attributes") and "c" in el.attributes:
|
||||
names.append(el.attributes["c"])
|
||||
if len(names) > 0:
|
||||
raise InlineError(f"The command{'s' if len(names) > 1 else ''} {names[0] if len(names) == 1 else names} was called in an Inline way but returned Block content. Put it in a paragraph alone or execute it as a Div using: \n::: {{c={names[0] if len(names) == 1 else '<command_name>'}}}\n:::")
|
||||
else:
|
||||
raise err
|
||||
|
||||
def transform_Doc(self, e: Doc) -> Doc:
|
||||
if self.context is not None:
|
||||
|
@ -96,6 +108,19 @@ class TransformProcessor(NOPProcessor):
|
|||
else:
|
||||
return BlockGroup(*content, context=new_context)
|
||||
|
||||
def transform_Para(self, e: Para) -> Union[Para, Div]:
|
||||
if len(e.content) == 1 and isinstance(e.content[0], Span):
|
||||
# If the span turns out to be a command, it might return a Div. We should then replace ourselves with the Div
|
||||
span = e.content[0]
|
||||
span = self.transform(span)
|
||||
if isinstance(span, Div):
|
||||
return span
|
||||
else:
|
||||
e.content[0] = span
|
||||
return super().transform_Para(e)
|
||||
else:
|
||||
return super().transform_Para(e)
|
||||
|
||||
def transform_Div(self, e: Div) -> Union[Div, Group, Null, RawBlock]:
|
||||
e.content = self.transform(e.content)
|
||||
|
||||
|
|
Loading…
Reference in a new issue