import markdown from markdown.inlinepatterns import Pattern from markdown.util import etree __author__ = 'vurdalak' class AutolinkPattern(Pattern): def handleMatch(self, m): link_element = etree.Element('a') href = m.group(2) link_element.set('href', href) link_element.text = href return link_element class QuotePattern(Pattern): def handleMatch(self, m): quote_element = etree.Element('span') quote_element.set('class', 'quote') quote_element.text = m.group(3) return quote_element class ReflinkPattern(Pattern): def handleMatch(self, m): ref_element = etree.Element('a') post_id = m.group(4) ref_element.set('href', '#' + str(post_id)) ref_element.text = '#' + post_id return ref_element class SpoilerPattern(Pattern): def handleMatch(self, m): quote_element = etree.Element('span') quote_element.set('class', 'spoiler') quote_element.text = m.group(2) return quote_element class CommentPattern(Pattern): def handleMatch(self, m): quote_element = etree.Element('span') quote_element.set('class', 'comment') quote_element.text = '//' + m.group(3) return quote_element class NeboardMarkdown(markdown.Extension): AUTOLINK_PATTERN = r'(https?://\S+)' QUOTE_PATTERN = r'^(>){1}(.+)' REFLINK_PATTERN = r'((>){2}(\d+))' SPOILER_PATTERN = r'%%(.+)%%' COMMENT_PATTERN = r'^(//(.+))' def extendMarkdown(self, md, md_globals): autolink = AutolinkPattern(self.AUTOLINK_PATTERN, md) quote = QuotePattern(self.QUOTE_PATTERN, md) reflink = ReflinkPattern(self.REFLINK_PATTERN, md) spoiler = SpoilerPattern(self.SPOILER_PATTERN, md) comment = CommentPattern(self.COMMENT_PATTERN, md) md.inlinePatterns[u'autolink_ext'] = autolink md.inlinePatterns.add(u'reflink', reflink, '