aboutsummaryrefslogtreecommitdiff
path: root/trac2md.py
diff options
context:
space:
mode:
Diffstat (limited to 'trac2md.py')
-rwxr-xr-xtrac2md.py28
1 files changed, 15 insertions, 13 deletions
diff --git a/trac2md.py b/trac2md.py
index 2863892..dd519eb 100755
--- a/trac2md.py
+++ b/trac2md.py
@@ -17,8 +17,8 @@ from urllib.parse import quote
image_pattern = re.compile(r"\[\[Image\((.*)\)\]\]")
wikilink_1_pattern = re.compile(r"\[\[(http.*)\]\]|\[(http.*)\]")
-wikilink_2_pattern = re.compile(r"\[\[attachment:([a-zA-Z0-9_/]+)\]\]|\[attachment:(.+)\]")
-wikilink_3_pattern = re.compile(r"\[\[(?:wiki:)?([a-zA-Z0-9_/]+)\]\]|\[wiki:(.+)\]")
+wikilink_2_pattern = re.compile(r"\[\[attachment:([a-zA-Z0-9_/]+)\]\]|\[attachment:([^][]+)\]")
+wikilink_3_pattern = re.compile(r"\[\[(?:wiki:)?([^][]+)\]\]|\[wiki:([^][]+)\]")
strikethrough_pattern = re.compile(r"~~(.*)~~")
camelcase_pattern = re.compile(r"!((?:\w|[#])+)")
@@ -42,11 +42,9 @@ def convert_headers(line):
return line
-def make_mdlink(text, slug):
- for sep in "| ":
- if sep in text:
- parts = text.split(sep, 1)
- break
+def make_mdlink(text, slug, sep):
+ if sep in text:
+ parts = text.split(sep, 1)
else:
parts = [text]
parts = [p.strip() for p in parts]
@@ -60,14 +58,18 @@ def make_mdlink(text, slug):
def convert_wikilinks(line, pattern, slug = None):
- m = pattern.search(line)
- if m:
+ pos = 0
+ while True:
+ m = pattern.search(line, pos)
+ if not m:
+ break
text = m.group(1) or m.group(2)
if text.lower() == "pageoutline":
mdlink = ""
else:
- mdlink = make_mdlink(text, slug)
+ mdlink = make_mdlink(text, slug, "|" if m.group(0).startswith("[[") else " ")
line = line.replace(m.group(0), mdlink)
+ pos = m.start() + len(mdlink)
return line
@@ -193,6 +195,9 @@ def WikiToMD(content, slug):
# Convert headers
line = convert_headers(line)
+ # Convert images
+ line = convert_image(line, slug)
+
# Convert wiki links
line = convert_wikilinks(line, wikilink_1_pattern)
line = convert_wikilinks(line, wikilink_2_pattern, slug)
@@ -201,9 +206,6 @@ def WikiToMD(content, slug):
# Convert striked through text
line = convert_strike(line)
- # Convert images
- line = convert_image(line, slug)
-
# Convert line breaks
line = convert_linebreak(line)