Compare commits

..

No commits in common. "a2468b54e1c70abf45636a80fe6b34e37b9c6574" and "4dd1eb031449eb38592cedb4234d82c71d89dbcb" have entirely different histories.

6 changed files with 27 additions and 98 deletions

View file

@ -1,4 +1,4 @@
from panflute import Doc, Element, Div, Span, Header, Figure from panflute import Doc, Element, Div, Span, Header
from typing import Union, Callable from typing import Union, Callable
from types import ModuleType from types import ModuleType
@ -19,21 +19,12 @@ CommandCallable = Callable[[Command, 'Context', 'NOPProcessor'], list[Element]]
# #
# This class is basically an extension to panflute's doc, this is why metadata # This class is basically an extension to panflute's doc, this is why metadata
# is read directly from it. # is read directly from it.
def default_section_number_generator(e: Header, context: 'Context') -> list[Union[str, int]]: def default_number_generator(e: Header, context: 'Context') -> str:
l = e.level l = e.level
section_counters = context.get_data("section_counters") context.section_counters[l-1] += 1
section_counters[l-1] += 1 for i in range(l, len(context.section_counters)):
for i in range(l, len(section_counters)): context.section_counters[i] = 0
section_counters[i] = 0 return ".".join(map(str, context.section_counters[:l]))
return list(section_counters[:l])
def default_figure_number_generator(e: Figure, context: 'Context') -> Union[str, int]:
figure_type = e.attributes.get("type", "img")
figure_counters = context.get_data("figure_counters")
figure_counters.setdefault(figure_type, 0)
figure_counters[figure_type] += 1
return figure_counters[figure_type]
class Context: class Context:
@ -67,11 +58,8 @@ class Context:
self.add_dep(path) self.add_dep(path)
if self.get_metadata("flags", immediate=True) is None: if self.get_metadata("flags", immediate=True) is None:
self.set_metadata("flags", {}) self.set_metadata("flags", {})
if not parent: self.number_generator = default_number_generator
self.set_data('section_number_generator', default_section_number_generator) self.section_counters = [0 for i in range(6)]
self.set_data('figure_number_generator', default_figure_number_generator)
self.set_data('section_counters', [0 for i in range(6)])
self.set_data('figure_counters', {})
def get_command(self, command: str) -> Union[CommandCallable, None]: def get_command(self, command: str) -> Union[CommandCallable, None]:
if command in self._commands: if command in self._commands:

View file

@ -134,60 +134,3 @@
\def\mod{\mathrel{\rm mod}} \def\mod{\mathrel{\rm mod}}
\settextsize{12} \settextsize{12}
\def\unparskip{\vskip-\parskip}
\def\floatinsert#1{\par{
\setbox0=\vbox{\boxmaxdepth=2pt\relax #1}
\dimen0=\dimexpr \ht0 + \dp0 + \baselineskip + \pagetotal - \pageshrink \relax
\ifdim\dimen0 > \pagegoal
\insert\topins{
\penalty 100
\splittopskip=0pt
\splitmaxdepth=\maxdimen
\floatingpenalty=0
\box0
\nobreak\bigskip\medskip
}
\else
\goodbreak\bigskip
\box0
\goodbreak\bigskip
\unparskip
\fi
}}
% Obecny plovouci objekt: \float{objekt}{popisek}{optional-id}
\def\float#1#2#3{\floatinsert{
\medskip
\centerline{#1}
\medskip
\smallskip
{
\setbox0=\hbox{#2}
\ifdim\wd0 < 0.8\hsize
\centerline{\box0}
\else
\centerline{\vtop{
\hsize=0.8\hsize
\parindent=0pt
\leftskip=0pt plus 0.3\hsize
\rightskip=0pt plus 0.3\hsize
\parfillskip=0pt
\spaceskip=0.3333em
#2
}}
\fi
}}}
% Dva floaty vedle sebe: \float{objekt1}{popisek1}{id1}{objekt2}{popisek2}{id2}
\def\twofloats#1#2#3#4#5#6{\floatinsert{
\medskip
\centerline{\vbox{\halign{\hss##\hss&\qquad\hss##\hss\cr
#1&#4\cr
\noalign{\medskip\smallskip}
#2&#5\cr
}}}
}}

@ -1 +1 @@
Subproject commit 211cb2010e23265be599819c5f79f66f0abd62d1 Subproject commit 953b44e942282375ac369af233c123b28146713e

View file

@ -97,7 +97,7 @@ class UCWTexGenerator(OutputGenerator):
def generate_Header(self, e: Header): def generate_Header(self, e: Header):
self.ensure_empty(2) self.ensure_empty(2)
self.write("\\"+"sub"*(e.level-1)+"section{"+".".join(map(str, e.attributes["number"]))+"}{") self.write("\\"+"sub"*(e.level-1)+"section{"+str(e.attributes["number"])+"}{")
self.generate(e.content) self.generate(e.content)
self.write(r"}") self.write(r"}")
self.ensure_empty(2) self.ensure_empty(2)
@ -155,17 +155,18 @@ class UCWTexGenerator(OutputGenerator):
def generate_Figure(self, e: Figure): def generate_Figure(self, e: Figure):
self.ensure_empty(2) self.ensure_empty(2)
self.writeln(r"\float{") self.writeln(r"\vskip5pt")
self.writeln(r"\centerline{")
self.indent_more() self.indent_more()
self.generate(e.content) self.generate(e.content)
self.indent_less() self.indent_less()
self.writeln(r"}{") self.writeln(r"}")
self.writeln(r"\centerline{")
self.indent_more() self.indent_more()
if 'number' in e.attributes:
self.writeln(f"Obrázek {e.attributes['number']}:")
self.generate(e.caption) self.generate(e.caption)
self.indent_less() self.indent_less()
self.writeln(r"}{}") self.writeln(r"}")
self.writeln(r"\vskip5pt{}")
self.ensure_empty(2) self.ensure_empty(2)
def generate_Emph(self, e: Emph): def generate_Emph(self, e: Emph):

View file

@ -131,6 +131,7 @@ class TransformProcessor(NOPProcessor):
return super().transform_Para(e) return super().transform_Para(e)
def transform_Div(self, e: Div) -> Union[Div, Group, Null, RawBlock]: def transform_Div(self, e: Div) -> Union[Div, Group, Null, RawBlock]:
e.content = self.transform(e.content)
if "group" in e.classes: if "group" in e.classes:
# `.group` class for Divs # `.group` class for Divs
@ -190,9 +191,10 @@ class TransformProcessor(NOPProcessor):
if "lang" in e.attributes: if "lang" in e.attributes:
warnings.warn("To set language in a way formátítko will understand, this Div has to have the `.group` class and be a Group.", UserWarning) warnings.warn("To set language in a way formátítko will understand, this Div has to have the `.group` class and be a Group.", UserWarning)
return super().transform_Div(e) return e
def transform_Span(self, e: Span) -> Span: def transform_Span(self, e: Span) -> Span:
e.content = self.transform(e.content)
if "group" in e.classes: if "group" in e.classes:
# `.group` class for Spans # `.group` class for Spans
@ -249,7 +251,7 @@ class TransformProcessor(NOPProcessor):
# This is a shorthand for just printing the content of some metadata. # This is a shorthand for just printing the content of some metadata.
elif re.match(r"^\$[\w.]+$", e.content[0].text): elif re.match(r"^\$[\w.]+$", e.content[0].text):
val = self.context.get_metadata(e.content[0].text[1:], False) val = self.context.get_metadata(e.content[0].text[1:], False)
if isinstance(val, MetaInlines): # TODO: Trust transform for this if isinstance(val, MetaInlines):
e = Span(*val.content) e = Span(*val.content)
e = self.transform(e) e = self.transform(e)
elif isinstance(val, MetaString): elif isinstance(val, MetaString):
@ -265,7 +267,8 @@ class TransformProcessor(NOPProcessor):
# Content of Span is enclosed into Slanted (subclass os Emph) # Content of Span is enclosed into Slanted (subclass os Emph)
return self.transform(Slanted(*e.content)) return self.transform(Slanted(*e.content))
return super().transform_Span(e)
return e
def transform_CodeBlock(self, e: CodeBlock) -> Union[CodeBlock, Div, Null]: def transform_CodeBlock(self, e: CodeBlock) -> Union[CodeBlock, Div, Null]:
if "markdown" in e.classes and "group" in e.classes: if "markdown" in e.classes and "group" in e.classes:
@ -316,13 +319,7 @@ class TransformProcessor(NOPProcessor):
if 'unnumbered' in e.classes: if 'unnumbered' in e.classes:
e.attributes["number"] = "" e.attributes["number"] = ""
else: else:
e.attributes["number"] = self.context.get_data("section_number_generator")(e, self.context) e.attributes["number"] = self.context.number_generator(e, self.context)
print("TH", e)
return e return e
def transform_Figure(self, e:Figure) -> Figure:
if "number" not in e.attributes:
if 'unnumbered' in e.classes:
e.attributes["number"] = ""
else:
e.attributes["number"] = self.context.get_data("figure_number_generator")(e, self.context)
return super().transform_Figure(e)

View file

@ -36,9 +36,9 @@ def bavlna(e: Whitespace, c: Context) -> bool:
if prevC in operators and nextC in numbers: if prevC in operators and nextC in numbers:
return True return True
# if isinstance(e.prev, Math) or isinstance(e.next, Math): if isinstance(e.prev, Math) or isinstance(e.next, Math):
# # Add no-break spaces around TeX math. # Add no-break spaces around TeX math.
# return True return True