Browse Source

Odkazy na interní objekty (obrázky)

jk-bakalarka
Jiří Kalvoda 2 months ago
parent
commit
f1f2f63cb5
  1. 1
      src/formatitko/context.py
  2. 9
      src/formatitko/elements.py
  3. 6
      src/formatitko/nop_processor.py
  4. 6
      src/formatitko/output_generator.py
  5. 7
      src/formatitko/tex_generator.py
  6. 9
      src/formatitko/transform_processor.py

1
src/formatitko/context.py

@ -72,6 +72,7 @@ class Context:
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', {})
self.set_data('obj_map', {})
def get_command(self, command: str) -> Union[CommandCallable, None]:
if command in self._commands:

9
src/formatitko/elements.py

@ -1,4 +1,4 @@
from panflute import Quoted, Emph
from panflute import Quoted, Emph, Link
from .command import Command, InlineCommand, BlockCommand, CodeCommand
@ -16,3 +16,10 @@ class FQuoted(Quoted):
class Slanted(Emph):
pass
class FLink(Link):
obj_map: map
def __init__(self, *args, **kwargs):
self.obj_map = kwargs["obj_map"]
del kwargs["obj_map"]
super().__init__(*args, **kwargs)

6
src/formatitko/nop_processor.py

@ -6,7 +6,7 @@ from panflute import MetaValue
from typing import Union, Callable
from .whitespace import NBSP
from .elements import FQuoted, Slanted
from .elements import FQuoted, Slanted, FLink
from .context import Group, InlineGroup, BlockGroup, Context
from .whitespace import Whitespace
from .command import BlockCommand, InlineCommand, CodeCommand, Command
@ -89,6 +89,7 @@ class NOPProcessor:
Underline: self.transform_Underline,
NBSP: self.transform_NBSP,
FQuoted: self.transform_FQuoted,
FLink: self.transform_FLink,
InlineCommand: self.transform_InlineCommand,
BlockCommand: self.transform_BlockCommand,
@ -304,6 +305,9 @@ class NOPProcessor:
e.content = self.transform(e.content)
return e
def transform_FLink(self, e: FLink) -> FLink:
return self.transform_Link(e)
def transform_Figure(self, e: Figure) -> Figure:
e.content = self.transform(e.content)
e.caption = self.transform(e.caption)

6
src/formatitko/output_generator.py

@ -7,7 +7,7 @@ from panflute import stringify
from typing import Union, Callable
from .whitespace import NBSP
from .elements import FQuoted, Slanted
from .elements import FQuoted, Slanted, FLink
from .context import Group, InlineGroup, BlockGroup, Context
@ -128,6 +128,7 @@ class OutputGenerator:
Underline: self.generate_Underline,
NBSP: self.generate_NBSP,
FQuoted: self.generate_FQuoted,
FLink: self.generate_FLink,
InlineGroup: self.generate_InlineGroup
}
@ -385,6 +386,9 @@ class OutputGenerator:
def generate_Link(self, e: Link):
self.generate_simple_tag(e)
def generate_FLink(self, e: FLink):
self.generate_Link(e)
def generate_Note(self, e: Note):
self.generate_simple_tag(e)

7
src/formatitko/tex_generator.py

@ -194,7 +194,7 @@ class UCWTexGenerator(OutputGenerator):
self.write(r"}")
def generate_Caption(self, e: Caption):
self.generate_Emph(e)
self.generate_Slanted(e)
def generate_Math(self, e: Math):
if e.format == "DisplayMath":
@ -323,6 +323,11 @@ class UCWTexGenerator(OutputGenerator):
self.writeln(r"}")
def generate_Link(self, e: Link):
if len(e.content) == 0:
if e.url.startswith('#'):
obj = e.obj_map[e.url[1:]]
self.write(str(obj.attributes["number"]))
return
if len(e.content) == 1 and isinstance(e.content[0], Str) and e.content[0].text == e.url:
self.write(r"\url{")
else:

9
src/formatitko/transform_processor.py

@ -14,7 +14,7 @@ import importlib
import json
from .whitespace import NBSP
from .elements import FQuoted, Slanted
from .elements import FQuoted, Slanted, FLink
from .context import Group, InlineGroup, BlockGroup
from .util import nullify, import_md
from .context import Context, CommandCallable
@ -319,10 +319,15 @@ class TransformProcessor(NOPProcessor):
e.attributes["number"] = self.context.get_data("section_number_generator")(e, self.context)
return e
def transform_Figure(self, e:Figure) -> Figure:
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)
self.context.get_data("obj_map")[e.identifier] = e
return super().transform_Figure(e)
def transform_Link(self, e: Link) -> Link:
e = FLink(*e.content, url=e.url, identifier=e.identifier, attributes=e.attributes, classes=e.classes, obj_map=self.context.get_data("obj_map"))
return super().transform_Link(e)

Loading…
Cancel
Save