From 96fabf6a14266e9c507b8410958db7afcfa4583b Mon Sep 17 00:00:00 2001 From: Greenscreener Date: Sun, 20 Aug 2023 15:05:40 +0200 Subject: [PATCH] =?UTF-8?q?P=C5=99id=C3=A1na=20mo=C5=BEnost=20p=C5=99id?= =?UTF-8?q?=C3=A1v=C3=A1n=C3=AD=20element=C5=AF=20do=20hlavi=C4=8Dky=20a?= =?UTF-8?q?=20pati=C4=8Dky=20str=C3=A1nky,=20u=C5=BEite=C4=8Dn=C3=A9=20pro?= =?UTF-8?q?=20pou=C5=BE=C3=ADv=C3=A1n=C3=AD=20form=C3=A1t=C3=ADtka=20pro?= =?UTF-8?q?=20standalone=20HTML.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/formatitko/html_generator.py | 4 +- src/formatitko/output_generator.py | 66 +++++++++++++++++---------- src/formatitko/transform_processor.py | 15 ++++++ test/test.md | 2 + 4 files changed, 61 insertions(+), 26 deletions(-) diff --git a/src/formatitko/html_generator.py b/src/formatitko/html_generator.py index 0659758..2efc93e 100644 --- a/src/formatitko/html_generator.py +++ b/src/formatitko/html_generator.py @@ -101,10 +101,10 @@ class HTMLGenerator(OutputGenerator): def generate_Null(self, e: Null): pass - def generate_Doc(self, e: Doc): + #def generate_Doc(self, e: Doc): # formatter = HtmlFormatter(style=e.get_metadata("highlight-style") if e.get_metadata("highlight-style") is not None else "default") # self.generate_simple_tag(tag="style", attributes={}, content=formatter.get_style_defs(".highlight")) - self.generate_simple_tag(e, tag="main") + #self.generate_simple_tag(e, tag="main") def generate_CodeBlock(self, e: CodeBlock): lexer = None diff --git a/src/formatitko/output_generator.py b/src/formatitko/output_generator.py index c795dba..c84ec0e 100644 --- a/src/formatitko/output_generator.py +++ b/src/formatitko/output_generator.py @@ -2,6 +2,7 @@ from panflute import Element, ListContainer, Inline, Block from panflute import Cite, Code, Emph, Image, LineBreak, Link, Math, Note, Quoted, RawInline, SmallCaps, SoftBreak, Space, Span, Str, Strikeout, Strong, Subscript, Superscript, Underline from panflute import BlockQuote, BulletList, Citation, CodeBlock, Definition, DefinitionItem, DefinitionList, Div, Figure, Header, HorizontalRule, LineBlock, LineItem, ListItem, MetaBlocks, MetaBool, MetaInlines, MetaList, MetaMap, MetaString, Null, OrderedList, Para, Plain, RawBlock, Table, TableBody, TableFoot, TableHead from panflute import TableRow, TableCell, Caption, Doc +from panflute import MetaValue from typing import Union, Callable from .whitespace import NBSP @@ -53,12 +54,6 @@ class OutputGenerator: Header: self.generate_Header, HorizontalRule: self.generate_HorizontalRule, LineBlock: self.generate_LineBlock, - MetaBlocks: self.generate_MetaBlocks, - MetaBool: self.generate_MetaBool, - MetaInlines: self.generate_MetaInlines, - MetaList: self.generate_MetaList, - MetaMap: self.generate_MetaMap, - MetaString: self.generate_MetaString, Null: self.generate_Null, OrderedList: self.generate_OrderedList, Para: self.generate_Para, @@ -97,6 +92,14 @@ class OutputGenerator: InlineGroup: self.generate_InlineGroup } + self.TYPE_DICT_META = { + MetaBlocks: self.generate_MetaBlocks, + MetaBool: self.generate_MetaBool, + MetaInlines: self.generate_MetaInlines, + MetaMap: self.generate_MetaMap, + MetaString: self.generate_MetaString, + } + def generate(self, e: Union[Element, ListContainer, list[Union[Element, ListContainer]]]): if isinstance(e, Group): old_context = self.context @@ -109,6 +112,10 @@ class OutputGenerator: self.generate_Inline(e) elif isinstance(e, Block): self.generate_Block(e) + elif isinstance(e, MetaValue): + self.generate_MetaValue(e) + elif isinstance(e, MetaList): + self.generate_MetaList(e) else: try: self.TYPE_DICT_MISC[type(e)](e) @@ -231,6 +238,31 @@ class OutputGenerator: for el in e: self.generate(el) + def generate_MetaList(self, e: MetaList): + for child in e: + self.generate(child) + + def generate_MetaValue(self, e: MetaValue): + try: + self.TYPE_DICT_META[type(e)](e) + except KeyError: + self.generate(e.content) + + def generate_MetaBlocks(self, e: MetaBlocks): + self.generate(e.content) + + def generate_MetaInlines(self, e: MetaInlines): + self.generate(e.content) + + def generate_MetaBool(self, e: MetaBool): + self.generate_simple_tag(e) + + def generate_MetaMap(self, e: MetaMap): + self.generate_simple_tag(e) + + def generate_MetaString(self, e: MetaString): + self.generate_simple_tag(e) + def generate_Inline(self, e: Inline): self.TYPE_DICT_INLINE[type(e)](e) @@ -370,24 +402,6 @@ class OutputGenerator: def generate_ListItem(self, e: ListItem): self.generate_simple_tag(e) - def generate_MetaBlocks(self, e: MetaBlocks): - self.generate_simple_tag(e) - - def generate_MetaBool(self, e: MetaBool): - self.generate_simple_tag(e) - - def generate_MetaInlines(self, e: MetaInlines): - self.generate_simple_tag(e) - - def generate_MetaList(self, e: MetaList): - self.generate_simple_tag(e) - - def generate_MetaMap(self, e: MetaMap): - self.generate_simple_tag(e) - - def generate_MetaString(self, e: MetaString): - self.generate_simple_tag(e) - def generate_OrderedList(self, e: OrderedList): self.generate_simple_tag(e) @@ -416,7 +430,11 @@ class OutputGenerator: self.generate_simple_tag(e) def generate_Doc(self, e: Doc): + if "header_content" in e.metadata: + self.generate(e.metadata["header_content"]) self.generate_simple_tag(e) + if "footer_content" in e.metadata: + self.generate(e.metadata["footer_content"]) def generate_BlockGroup(self, e: BlockGroup): self.generate_simple_tag(e) diff --git a/src/formatitko/transform_processor.py b/src/formatitko/transform_processor.py index 2c21e5e..caf0d32 100644 --- a/src/formatitko/transform_processor.py +++ b/src/formatitko/transform_processor.py @@ -2,6 +2,7 @@ from panflute import Element, ListContainer, Inline, Block from panflute import Cite, Code, Emph, Image, LineBreak, Link, Math, Note, Quoted, RawInline, SmallCaps, SoftBreak, Space, Span, Str, Strikeout, Strong, Subscript, Superscript, Underline from panflute import BlockQuote, BulletList, Citation, CodeBlock, Definition, DefinitionItem, DefinitionList, Div, Figure, Header, HorizontalRule, LineBlock, LineItem, ListItem, MetaBlocks, MetaBool, MetaInlines, MetaList, MetaMap, MetaString, Null, OrderedList, Para, Plain, RawBlock, Table, TableBody, TableFoot, TableHead from panflute import TableRow, TableCell, Caption, Doc +from panflute import MetaValue from typing import Union, Callable from types import ModuleType @@ -409,6 +410,20 @@ class TransformProcessor: elif e.attributes["type"] in ["tex", "html"]: return RawBlock(text, e.attributes["type"]) + if "header_content" in e.classes: + header_content = self.context.get_metadata("header_content") + header_content = [] if header_content is None else header_content + header_content.append(MetaBlocks(*self.transform(e.content))) + self.context.set_metadata("header_content", header_content) + return Null() + + if "footer_content" in e.classes: + footer_content = self.context.get_metadata("footer_content") + footer_content = [] if footer_content is None else footer_content + footer_content.append(MetaBlocks(*self.transform(e.content))) + self.context.set_metadata("footer_content", footer_content) + return Null() + 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) diff --git a/test/test.md b/test/test.md index 58aeb70..c9ed067 100644 --- a/test/test.md +++ b/test/test.md @@ -4,8 +4,10 @@ subtitle: 'A subtitle' are_we_there_yet: False lang: "en" --- +:::: {.header_content} ::: {partial="test-top.html" type="html"} ::: +:::: [#test-files/test-import.md]{type=md}