|
|
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 NeboardMarkdown(markdown.Extension):
|
|
|
AUTOLINK_PATTERN = r'(http://\S+)'
|
|
|
QUOTE_PATTERN = r'(>){1}(.+)'
|
|
|
REFLINK_PATTERN = r'((>){2}(\d+))'
|
|
|
|
|
|
def extendMarkdown(self, md, md_globals):
|
|
|
autolink = AutolinkPattern(self.AUTOLINK_PATTERN, md)
|
|
|
quote = QuotePattern(self.QUOTE_PATTERN, md)
|
|
|
reflink = ReflinkPattern(self.REFLINK_PATTERN, md)
|
|
|
|
|
|
md.inlinePatterns[u'autolink_ext'] = autolink
|
|
|
md.inlinePatterns[u'reflink'] = reflink
|
|
|
md.inlinePatterns[u'quote'] = quote
|
|
|
|
|
|
del(md.inlinePatterns[u'entity'])
|
|
|
|
|
|
|
|
|
def makeExtension(configs=None):
|
|
|
return NeboardMarkdown(configs=configs)
|
|
|
|
|
|
neboard_extension = makeExtension()
|
|
|
|
|
|
|
|
|
def markdown_extended(markup):
|
|
|
return markdown.markdown(markup, [neboard_extension])
|
|
|
|