aboutsummaryrefslogtreecommitdiff
path: root/trac2md.py
diff options
context:
space:
mode:
Diffstat (limited to 'trac2md.py')
-rwxr-xr-xtrac2md.py38
1 files changed, 13 insertions, 25 deletions
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)