From b00a4c1cad77193243ca975f06945f45176423c8 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Mon, 15 Feb 2021 02:56:04 +0000 Subject: More cleanup, a few more attachment links --- trac2md.py | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) (limited to 'trac2md.py') diff --git a/trac2md.py b/trac2md.py index 7e3a495..9d002dc 100755 --- a/trac2md.py +++ b/trac2md.py @@ -17,7 +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"\[\[(?: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:)?([a-zA-Z0-9_]+)\]\]|\[wiki:(.+)\]") strikethrough_pattern = re.compile(r"~~(.*)~~") camelcase_pattern = re.compile(r"!((?:\w|[#])+)") @@ -28,8 +29,6 @@ wikiheading_patterns = tuple( def convert_headers(line): - ''' Convert wikiformat headers - ''' for level_count, header in wikiheading_patterns: try: level = header.search(line).group(1) @@ -43,7 +42,7 @@ def convert_headers(line): return line -def make_mdlink(text): +def make_mdlink(text, slug): for sep in "| ": if sep in text: parts = text.split(sep, 1) @@ -53,35 +52,25 @@ def make_mdlink(text): parts = [p.strip() for p in parts] if parts[-1].startswith('"') and parts[-1].endswith('"'): parts[-1] = parts[-1][1:-1] - return "[{}]({})".format(parts[-1], parts[0]) - - -def convert_wikilinks_1(line): - ''' Convert wikiformat links - ''' - m = wikilink_1_pattern.search(line) - if m: - mdlink = make_mdlink(m.group(1) or m.group(2)) - line = line.replace(m.group(0), mdlink) - return line + if slug is None: + return "[{}]({})".format(parts[-1], parts[0]) + else: + return "[{}]({{attach}}{}/{})".format(parts[-1], slug, parts[0]) -def convert_wikilinks_2(line): - ''' Convert more wiki links''' - m = wikilink_2_pattern.search(line) +def convert_wikilinks(line, pattern, slug = None): + m = pattern.search(line) if m: text = m.group(1) or m.group(2) if text.lower() == "pageoutline": mdlink = "" else: - mdlink = make_mdlink(text) + mdlink = make_mdlink(text, slug) line = line.replace(m.group(0), mdlink) return line def convert_strike(line): - ''' Convert wikiformat striked text - ''' striked_result = strikethrough_pattern.search(line) if striked_result: try: @@ -117,8 +106,6 @@ def convert_linebreak(line): return line def WikiToMD(content, slug): - ''' Convert wiki/RST format to Markdown. Code blocks, bold/italics, - wiki links, lists, striked text, and headers. ''' # Line breaks in Markdown must be at end of line, so add newlines as needed content = content.replace("[[br]]", "\\\\").replace("[[BR]]", "\\\\").replace("\\\\", "\\\\\n") @@ -206,8 +193,9 @@ def WikiToMD(content, slug): line = convert_headers(line) # Convert wiki links - line = convert_wikilinks_1(line) - line = convert_wikilinks_2(line) + line = convert_wikilinks(line, wikilink_1_pattern) + line = convert_wikilinks(line, wikilink_2_pattern, slug) + line = convert_wikilinks(line, wikilink_3_pattern) # Convert striked through text line = convert_strike(line) -- cgit v1.2.3