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("")