]> git.mar77i.info Git - mar77i.info/commitdiff
fix class hierarchy and rename join methods to render_inner, render_outer
authormar77i <mar77i@protonmail.ch>
Tue, 18 Mar 2025 21:00:35 +0000 (22:00 +0100)
committermar77i <mar77i@protonmail.ch>
Tue, 18 Mar 2025 21:00:35 +0000 (22:00 +0100)
md.py

diff --git a/md.py b/md.py
index 4e8fda183774ac4c48f35cb64e7b3339ce4b59a1..2ae5408e0c93f08161b46ba564059e9de30a4020 100644 (file)
--- 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()}</{self.name}>"
+    def render_outer(self):
+        return f"<{self.name}>{self.render_inner()}</{self.name}>"
+
+
+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),
         )