Číslování
This commit is contained in:
parent
4dd1eb0314
commit
88d653af15
3 changed files with 31 additions and 11 deletions
|
@ -1,4 +1,4 @@
|
|||
from panflute import Doc, Element, Div, Span, Header
|
||||
from panflute import Doc, Element, Div, Span, Header, Figure
|
||||
|
||||
from typing import Union, Callable
|
||||
from types import ModuleType
|
||||
|
@ -19,12 +19,21 @@ CommandCallable = Callable[[Command, 'Context', 'NOPProcessor'], list[Element]]
|
|||
#
|
||||
# This class is basically an extension to panflute's doc, this is why metadata
|
||||
# is read directly from it.
|
||||
def default_number_generator(e: Header, context: 'Context') -> str:
|
||||
def default_section_number_generator(e: Header, context: 'Context') -> list[Union[str, int]]:
|
||||
l = e.level
|
||||
context.section_counters[l-1] += 1
|
||||
for i in range(l, len(context.section_counters)):
|
||||
context.section_counters[i] = 0
|
||||
return ".".join(map(str, context.section_counters[:l]))
|
||||
section_counters = context.get_data("section_counters")
|
||||
section_counters[l-1] += 1
|
||||
for i in range(l, len(section_counters)):
|
||||
section_counters[i] = 0
|
||||
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:
|
||||
|
@ -58,8 +67,11 @@ class Context:
|
|||
self.add_dep(path)
|
||||
if self.get_metadata("flags", immediate=True) is None:
|
||||
self.set_metadata("flags", {})
|
||||
self.number_generator = default_number_generator
|
||||
self.section_counters = [0 for i in range(6)]
|
||||
if not parent:
|
||||
self.set_data('section_number_generator', default_section_number_generator)
|
||||
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]:
|
||||
if command in self._commands:
|
||||
|
|
|
@ -97,7 +97,7 @@ class UCWTexGenerator(OutputGenerator):
|
|||
|
||||
def generate_Header(self, e: Header):
|
||||
self.ensure_empty(2)
|
||||
self.write("\\"+"sub"*(e.level-1)+"section{"+str(e.attributes["number"])+"}{")
|
||||
self.write("\\"+"sub"*(e.level-1)+"section{"+".".join(map(str, e.attributes["number"]))+"}{")
|
||||
self.generate(e.content)
|
||||
self.write(r"}")
|
||||
self.ensure_empty(2)
|
||||
|
@ -163,6 +163,8 @@ class UCWTexGenerator(OutputGenerator):
|
|||
self.writeln(r"}")
|
||||
self.writeln(r"\centerline{")
|
||||
self.indent_more()
|
||||
if 'number' in e.attributes:
|
||||
self.writeln(f"Obrázek {e.attributes['number']}:")
|
||||
self.generate(e.caption)
|
||||
self.indent_less()
|
||||
self.writeln(r"}")
|
||||
|
|
|
@ -319,7 +319,13 @@ class TransformProcessor(NOPProcessor):
|
|||
if 'unnumbered' in e.classes:
|
||||
e.attributes["number"] = ""
|
||||
else:
|
||||
e.attributes["number"] = self.context.number_generator(e, self.context)
|
||||
print("TH", e)
|
||||
e.attributes["number"] = self.context.get_data("section_number_generator")(e, self.context)
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue