72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
from abc import ABC
|
|
from re import compile
|
|
|
|
from src.markdown_converter import MarkdownConverter
|
|
|
|
|
|
class NopStyle(ABC):
|
|
def convert(self, text):
|
|
return text
|
|
|
|
|
|
class SimpleReplacementStyle(ABC):
|
|
def __init__(self, markdown_style, dokuwiki_style):
|
|
self.markdown_style = markdown_style
|
|
self.dokuwiki_style = dokuwiki_style
|
|
|
|
def convert(self, text):
|
|
return text.replace(self.dokuwiki_style, self.markdown_style)
|
|
|
|
|
|
class SimpleStyleBetweenTags(ABC):
|
|
def __init__(self, markdown_style, dokuwiki_style_begin, dokuwiki_style_end=None):
|
|
if dokuwiki_style_end is None:
|
|
dokuwiki_style_end = dokuwiki_style_begin
|
|
self.pattern = compile('(' + dokuwiki_style_begin + ')(.*?)(' + dokuwiki_style_end + ')')
|
|
self.markdown_style = markdown_style
|
|
|
|
def convert(self, text):
|
|
result = text
|
|
for regex_head in self.pattern.findall(text):
|
|
orig_header = ''.join(regex_head)
|
|
new_header = self.markdown_style + regex_head[1] + self.markdown_style
|
|
result = result.replace(orig_header, new_header)
|
|
return result
|
|
|
|
|
|
@MarkdownConverter.register
|
|
class MarkdownLineBreak(SimpleReplacementStyle):
|
|
def __init__(self):
|
|
super().__init__('<br/>', '\\')
|
|
|
|
|
|
# inline html is supported with Hugo, don't need the tags.
|
|
@MarkdownConverter.register
|
|
class MarkdownInlineHtml:
|
|
def convert(self, text):
|
|
return text.replace('<html>', '').replace('</html>', '')
|
|
|
|
|
|
# bold in Doku is bold in MD
|
|
@MarkdownConverter.register
|
|
class MarkdownBold(NopStyle):
|
|
pass
|
|
|
|
|
|
@MarkdownConverter.register
|
|
class MarkdownItalic(SimpleStyleBetweenTags):
|
|
def __init__(self):
|
|
super().__init__('*', '//')
|
|
|
|
|
|
@MarkdownConverter.register
|
|
class MarkdownStrikeThrough(SimpleStyleBetweenTags):
|
|
def __init__(self):
|
|
super().__init__('~~', '<del>', '</del>')
|
|
|
|
|
|
@MarkdownConverter.register
|
|
class MarkdownInlineCode(SimpleStyleBetweenTags):
|
|
def __init__(self):
|
|
super().__init__('`', "''", "''")
|