roundabout,
created on Tuesday, 16 January 2024, 18:47:18 (1705430838),
received on Wednesday, 31 July 2024, 06:54:41 (1722408881)
Author identity: vlad <vlad.muntoiu@gmail.com>
b823c49e6dc4f5e37823b92d73bc82be375f65cd
markdown.py
@@ -0,0 +1,89 @@
import re def leading(string, character): return len(string) - len(string.lstrip(character)) def trailing(string, character): return len(string) - len(string.rstrip(character)) class Element: def __init__(self): pass def __repr__(self): return "Void block" class Heading(Element): def __init__(self, content, level): super().__init__() self.content = content self.level = level pass def __repr__(self): return f"Heading level {self.level}:\n\t" + self.content class Paragraph(Element): def __init__(self, content): super().__init__() self.content = content def addLine(self, content): self.content += content.strip() + " " def __repr__(self): return "Paragraph:\n\t" + self.content def _tokenise(source): tokens = [] currentBlock = Element for line in source.split("\n"): if not line.strip(): # Void block tokens.append(currentBlock) currentBlock = Element() elif line.startswith("#") and leading(line.lstrip("#"), " ") == 1: tokens.append(currentBlock) content = line.lstrip("#").strip() currentBlock = Heading(content, leading(line, "#")) else: if not isinstance(currentBlock, Paragraph): tokens.append(currentBlock) currentBlock = Paragraph("") currentBlock.addLine(line) tokens.append(currentBlock) return tokens for i in _tokenise( """ # Hello World! ## Title 1 ### Part 1 #### Chapter 1 ##### Article 1 ###### Section 1 Lorem ipsum dolor sit amet""" ): print(repr(i)) def parseMarkdown(source): tokens = _tokenise(source) parseMarkdown("")