--- a
+++ b/ForgeWiki/forgewiki/converters.py
@@ -0,0 +1,46 @@
+#-*- python -*-
+import html2text
+import re
+
+html2text.BODY_WIDTH = 0
+
+_inline_img = re.compile(r'\[\[(File|Image):([^\]|]+).*\]\]', re.UNICODE)
+_inline_img_markdown = r'[[img src=\2]]'
+_link_to_attach = re.compile(r'\[\[Media:([^\]|]+)\|?(.*)\]\]', re.UNICODE)
+
+
+def _link_to_attach_markdown(page_title):
+ pattern = r'[%s](%s/attachment/%s)'
+
+ def replacement(match):
+ if match.group(2):
+ return pattern % (match.group(2), page_title, match.group(1))
+ return pattern % (match.group(1), page_title, match.group(1))
+
+ return replacement
+
+
+def mediawiki2markdown(source):
+ try:
+ from mediawiki import wiki2html
+ except ImportError:
+ raise ImportError('GPL library "mediawiki" from https://github.com/zikzakmedia/python-mediawiki.git '
+ 'is required for this operation')
+
+
+ wiki_content = wiki2html(source, True)
+ markdown_text = html2text.html2text(wiki_content)
+ return markdown_text
+
+
+def mediawiki_internal_links2markdown(markdown_text, page_title):
+ """Convert MediaWiki internal links to attachments to ForgeWiki format.
+
+ args:
+ markdown_text - text, converted by mediawiki2markdown convertor.
+ page_title - title of ForgeWiki page.
+ Used for constructing proper links to attachments.
+ """
+ output = _inline_img.sub(_inline_img_markdown, markdown_text)
+ output = _link_to_attach.sub(_link_to_attach_markdown(page_title), output)
+ return output