diff --git a/spip2md/convert.py b/spip2md/convert.py
index 9b63080..116ee4b 100644
--- a/spip2md/convert.py
+++ b/spip2md/convert.py
@@ -1,101 +1,106 @@
import re
-mappings = {
- "horizontal-rule": (
+mappings = (
+ ( # horizontal-rule
re.compile(r"- ?- ?- ?- ?[\- ]*|
", re.S | re.I),
- r"---",
+ # r"---",
+ r"***",
),
- "line-break": (
+ ( # line-break
re.compile(r"\r?\n_ *(?=\r?\n)|
", re.S | re.I),
"\n",
),
- "heading": (
+ ( # heading
re.compile(r"\{\{\{ *(.*?) *\}\}\}", re.S | re.I),
r"## \1",
),
- "strong": (
+ ( # strong
re.compile(r"\{\{ *(.*?) *\}\}", re.S | re.I),
r"**\1**",
),
- "emphasis": (
+ ( # emphasis
re.compile(r"\{ *(.*?) *\}", re.S | re.I),
r"*\1*",
),
- "strikethrough": (
+ ( # strikethrough
re.compile(
r"\s*(.*?)\s*(?:(\r?\n){2,}|<\/del>)",
re.S | re.I,
),
r"~\1~",
),
- "anchor": (
+ ( # anchor
re.compile(r"\[ *(.*?) *-> *(.*?) *\]", re.S | re.I),
r"[\1](\2)",
),
- "image": (
+ ( # image
re.compile(r"<(?:img|image)(.*?)(\|.*?)*>", re.S | re.I),
r"![image](\1)",
),
- "document-anchors": (
+ ( # document-anchors
re.compile(r"<(?:doc|emb)(.*?)(\|.*?)*>", re.S | re.I),
r"[document](\1)",
),
- "wikilink": (
+ ( # wikilink
re.compile(r"\[\? *(.*?) *\]", re.S | re.I),
r"[\1](https://wikipedia.org/wiki/\1)",
),
- "footnote": (
+ ( # footnote
re.compile(r"\[\[ *(.*?) *\]\]", re.S | re.I),
r"",
),
- "unordered-list": (
+ ( # unordered list
re.compile(r"(\r?\n)-(?!#|-)\*? *", re.S | re.I),
r"\1- ",
),
- "wrong-unordered-list": (
+ ( # wrong unordered list
re.compile(r"(\r?\n)\* +", re.S | re.I),
r"\1- ",
),
- "ordered-list": (
+ ( # wrong unordered list WARNING suppresses preceding tag
+ re.compile(r"(\r?\n)<.*?>\* +", re.I),
+ r"\1- ",
+ ),
+ ( # ordered-list
re.compile(r"(\r?\n)-# *", re.S | re.I),
r"\g<1>1. ",
),
- "table-metadata": (
+ ( # table-metadata
re.compile(r"(\r?\n)\|\|(.*?)\|(.*?)\|\|", re.S | re.I),
r"",
),
- "quote": (
+ ( # quote
re.compile(
r"<(?:quote|poesie)>\s*(.*?)\s*(?:(\r?\n){2,}|<\/(?:quote|poesie)>)",
re.S | re.I,
),
r"> \1\2\2",
),
- "box": (
+ ( # box
re.compile(
r"\s*(.*?)\s*(?:(?:\r?\n){2,}|<\/code>)",
re.S | re.I,
),
"`\\1`",
),
- "fence": (
+ ( # 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
+ ( # Keep only the first language in multi-language blocks
re.compile(
r"\s*\[.{2,4}\]\s*(.*?)\s*(?:\s*\[.{2,4}\].*)*<\/multi>",
re.S | re.I,
),
r"\1",
),
-}
+)
def convert(markup):
- for spip, markdown in mappings.values():
+ for spip, markdown in mappings:
markup = spip.sub(markdown, markup)
return markup.encode("utf-8").decode("utf-8")