From: mar77i Date: Tue, 18 Mar 2025 21:00:35 +0000 (+0100) Subject: fix class hierarchy and rename join methods to render_inner, render_outer X-Git-Url: https://git.mar77i.info/?a=commitdiff_plain;h=20df60f77d94a5f1b76509c1a559ea89fd43565b;p=mar77i.info fix class hierarchy and rename join methods to render_inner, render_outer --- diff --git a/md.py b/md.py index 4e8fda1..2ae5408 100644 --- a/md.py +++ b/md.py @@ -1,15 +1,16 @@ import os from io import StringIO +_registered_tags = [] -class MDTag: - registered_tags = [] + +class MDInlineTag: char: str tag_name: str def __init_subclass__(cls, **kwargs): super().__init_subclass__(**kwargs) - MDTag.registered_tags.append(cls) + _registered_tags.append(cls) def __init__(self, states, sio): self.states = states @@ -34,27 +35,27 @@ class MDTag: return value -class Bold(MDTag): +class Bold(MDInlineTag): char = "*" tag_name = "b" -class Italic(MDTag): +class Italic(MDInlineTag): char = "/" tag_name = "i" -class Underline(MDTag): +class Underline(MDInlineTag): char = "_" tag_name = "u" -class Code(MDTag): +class Code(MDInlineTag): char = "`" tag_name = "code" -class Link(MDTag): +class Link(MDInlineTag): char = "[" tag_name = "a" start: int | None @@ -83,8 +84,8 @@ class Link(MDTag): self.states.pop() -class Paragraph: - name = "p" +class MDLineTag: + name: str def __init__(self): self.lines = [] @@ -120,12 +121,12 @@ class Paragraph: return True def handle_tag(self, c): - for tag_class in MDTag.registered_tags: + for tag_class in _registered_tags: if c == tag_class.char and self.check_states(tag_class): return tag_class(self.states, self.sio) return None - def join_lines(self): + def render_inner(self): if self.sio.getvalue(): assert not self.lines return self.sio.getvalue() @@ -143,18 +144,22 @@ class Paragraph: self.lines.clear() return self.sio.getvalue() - def join(self): - return f"<{self.name}>{self.join_lines()}" + def render_outer(self): + return f"<{self.name}>{self.render_inner()}" + + +class Paragraph(MDLineTag): + name = "p" -class Heading2(Paragraph): +class Heading2(MDLineTag): name = "h2" -class BulletList(Paragraph): +class BulletList(MDLineTag): name = "ul" - class ListItem(Paragraph): + class ListItem(MDLineTag): name = "li" def __init__(self): @@ -169,8 +174,8 @@ class BulletList(Paragraph): def lines(self, _): self.list_items.append(self.ListItem()) - def join_lines(self): - return os.linesep.join(li.join() for li in self.list_items) + def render_inner(self): + return os.linesep.join(li.render_outer() for li in self.list_items) class MDRenderer: @@ -212,6 +217,6 @@ class MDRenderer: self.set_tag(Paragraph) self.tag.lines.append(line) return ( - title.join_lines() if title else None, - os.linesep.join(t.join() for t in self.tags), + title.render_inner() if title else None, + os.linesep.join(t.render_outer() for t in self.tags), )