diff options
Diffstat (limited to 'trac2md.py')
-rwxr-xr-x | trac2md.py | 28 |
1 files changed, 15 insertions, 13 deletions
@@ -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) |