roundabout,
created on Wednesday, 27 March 2024, 18:53:35 (1711565615),
received on Wednesday, 31 July 2024, 06:54:43 (1722408883)
Author identity: vlad <vlad.muntoiu@gmail.com>
ff8856891ec842b2a26bed382178273e64b4da61
markdown.py
@@ -2,6 +2,13 @@ import re
import bs4 as beautifulsoup
import sys
def only_chars(string, chars):
chars = set(chars)
all_chars = set(string)
return all_chars.issubset(chars)
inlineRegex = r"""
(?P<em>[*_]{1,7}) (?P<textEm>(?:\\[*]|[^*])*) (?P=em) # emphasis
|
@@ -46,6 +53,30 @@ class Container(Element):
return "Generic container element: " + repr(self.content)
class Rule(Element):
def __init__(self):
super().__init__()
def __repr__(self):
return "Rule"
@property
def tag_name(self):
return "hr"
class HardBreak(Element):
def __init__(self):
super().__init__()
def __repr__(self):
return "Hard break"
@property
def tag_name(self):
return "br"
class Heading(Container):
def __init__(self, content, level):
super().__init__(content)
@@ -170,7 +201,9 @@ class Image(Link):
def parse_line(source):
if trailing(source, "\\") == 1:
source = source.rstrip("\\")
source += "\n"
hard_break = True
else:
hard_break = False
tokens = []
pattern = re.compile(inlineRegex, re.MULTILINE | re.DOTALL | re.VERBOSE)
@@ -200,6 +233,9 @@ def parse_line(source):
tokens.append(source[lookup:])
if hard_break:
tokens.append(HardBreak())
return tokens
@@ -219,6 +255,13 @@ def tokenise(source):
tokens.append(current_block)
current_block = Element()
i += 1
elif only_chars(line.strip(), "-_* ") and len(line.strip()) >= 3:
# Horizontal rule
tokens.append(current_block)
current_block = Rule()
i += 1
elif line.startswith("#") and leading(line.lstrip("#"), " "):
tokens.append(current_block)
@@ -287,7 +330,7 @@ def make_html(ast):
if __name__ == '__main__':
# Generate an AST from a markdown file
ast = tokenise(
"""
r"""
# Hello World!
## Title 1
### Part 1
@@ -297,6 +340,11 @@ if __name__ == '__main__':
Lorem **i`p`sum**
dolor `sit` amet
consectetur \
*adipiscing* elit
* * *
> Make it as simple as possible, [but not simpler](https://wikipedia.org).
> > If you can't explain it simply, you don't understand it well enough.
misc_utils.py
@@ -31,10 +31,9 @@ def git_command(repo, data, *args, return_err=False, return_exit=False):
def only_chars(string, chars):
for i in string:
if i not in chars:
return False
return True
chars = set(chars)
all_chars = set(string)
return all_chars.issubset(chars)
def get_permission_level(logged_in, username, repository):