diff --git a/requirements.txt b/requirements.txt index 8ec22fc..2a1c723 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,3 @@ pyyaml python-slugify[unidecode] peewee - -# pyparsing -# lark diff --git a/spip2md/content.py b/spip2md/content.py index 5fe1d96..5f04b1d 100644 --- a/spip2md/content.py +++ b/spip2md/content.py @@ -1,36 +1,109 @@ import re from os import path -# from lark import Lark -# from pyparsing import Word, alphas - -# larkParser = Lark(open(path.dirname(__file__) + "/spip.lark")) - class content: - _mappings = ( - (re.compile(r"\{\{\{(.*?)\}\}\}", re.S | re.I), r"## \1"), - (re.compile(r"\{\{ \{(.*?)\} \}\}", re.S | re.I), r"***\1***"), - (re.compile(r"\{ \{\{(.*?)\}\} \}", re.S | re.I), r"***\1***"), - (re.compile(r"\{\{(.*?)\}\}", re.S | re.I), r"**\1**"), - (re.compile(r"\{(.*?)\}", re.S | re.I), r"*\1*"), - ) + _mappings = { + "horizontal-rule": ( + re.compile(r"- ?- ?- ?- ?[\- ]*|
\s*(.*?)\s*(?:(?:\r?\n){2,}|<\/code>)",
+ re.S | re.I,
+ ),
+ "`\\1`",
+ ),
+ "fence": (
+ re.compile(
+ r"\s*(.*?)\s*(?:(?:\r?\n){2,}|<\/cadre>)",
+ re.S | re.I,
+ ),
+ "```\n\\1\n\n```",
+ ),
+ "multi-language": ( # Keep only the first language
+ re.compile(
+ r"\s*\[.{2,4}\]\s*(.*?)\s*(?:\s*\[.{2,4}\].*)*<\/multi>",
+ re.S | re.I,
+ ),
+ r"\1",
+ ),
+ }
- def __init__(self, content):
- self.spip = content
+ def __init__(self, spip):
+ self.markup = spip
def get_markdown(self):
- markdown = self.spip
- for spip, md in self._mappings:
- markdown = spip.sub(md, markdown)
- return markdown
- # Parses the body & display parse tree
- try:
- print(f" parse tree :\n")
- print(larkParser.parse(self.spip).pretty())
- except Exception as e:
- print(" PARSING FAILED :\n", e)
- return markdown
+ for spip, markdown in self._mappings.values():
+ self.markup = spip.sub(markdown, self.markup)
+ return self.markup
# Parses a file & display its parse tree
@@ -40,14 +113,12 @@ def test(filename):
print(f"--- Conversion of {filename} ---\n\n")
c = content(raw)
print(c.get_markdown())
- # print(f"--- Parse tree of {filename} ---\n\n")
- # print(larkParser.parse(raw))
if __name__ == "__main__":
# Test
test("../test/0.spip")
- # test("../test/1.spip")
- # test("../test/2.spip")
- # test("../test/3.spip")
- # test("../test/4.spip")
+ test("../test/1.spip")
+ test("../test/2.spip")
+ test("../test/3.spip")
+ test("../test/4.spip")