#!/usr/bin/env python3 """ Translate Trac wiki markup to Markdown Emmanuel Viennet for ScoDoc, Sept 2020 Nota: far from complete, based on a set of regexps tables are *not translated*. = ... = == ... == === ... === ==== ''...'' : *...* """ import sys import re SRC = sys.argv[1] f = open(SRC, encoding="utf-8") data = f.read() EXPRS = ( # Attachements: [[attachment:...]] (r'\[\[attachment:(?P.*?)\]\]', r'\g', 0), (r'^====(.*?)====\s*\n', r'\n#### \1\n', re.MULTILINE), (r'^===(.*?)===\s*\n', r'\n### \1\n', re.MULTILINE), (r'^==(.*?)==\s*\n', r'\n## \1\n', re.MULTILINE), (r'^=(.*?)=\s*\n', r'\n# \1\n', re.MULTILINE), (r'^====([^=]*?)$', r'#### \1', re.MULTILINE), (r'^===([^=]*?)$', r'### \1', re.MULTILINE), (r'^==([^=]*?)$', r'## \1', re.MULTILINE), (r'^=([^=]*?)$', r'# \1', re.MULTILINE), # Links: [[...]] (r'\[\[([A-Za-z0-9\s.:/]*?)\]\]', r'[\1](\1.md)', 0), # Links [[ url | text ]] (r"\[\[(?Phttp(s)?://[A-Za-z0-9\s.:/-]*?)\|(?P[\w\s-]*)\]\]", r'[\g](\g)', 0), # external link (r"\[\[([A-Za-z0-9\s.:/-]*?)\|([\w\s-]*)\]\]", r'[\2](\1.md)', 0), # internal (.md) # Les references intrawiki PascalCased (upper CamelCase) (r'\s([A-Z]([A-Z0-9]*[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Za-z0-9]*)', r' [\1](\1.md)', 0), # Pour Sco``Doc (r'\`\`', '', 0), # Blocks (r'\{\{\{(.*?)\}\}\}', r'```\1```', re.DOTALL|re.MULTILINE), # {{{...}}} # Images (dans /trunk/doc/images/ ou /branches/ScoDoc7/doc/images/) (r'\[\[Image\(source:/.*?/doc/images/(?P.*?)(,.*?)?\)\]\]', r'![\g](screens/\g)', 0), # Tables (r'^\|\|(.*?)\|\|(.*?)\|\|$', r'\1|\2', re.MULTILINE), # /!\ (r'/!\\', r'/!\', 0), # bolds & italics: (r"'''(.*?)'''", r'**\1**', re.DOTALL), # '''...''' bold (r'\'\'(.*?)\'\'', r'*\1*', re.DOTALL), # ''...'' (r'\s//(.*?)//', r'*\1*', 0), # //...// ) for pattern, subst, flags in EXPRS: data = re.sub( pattern, subst, data, flags=flags ) print(data)