mdx_neboard.py
83 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
/ boards / mdx_neboard.py
|
r52 | 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 | ||||
|
r56 | 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 | ||||
|
r52 | class NeboardMarkdown(markdown.Extension): | ||
|
r62 | AUTOLINK_PATTERN = r'(https?://\S+)' | ||
QUOTE_PATTERN = r'^(>){1}(.+)' | ||||
|
r52 | REFLINK_PATTERN = r'((>){2}(\d+))' | ||
|
r56 | SPOILER_PATTERN = r'%%(.+)%%' | ||
|
r62 | COMMENT_PATTERN = r'^(//(.+))' | ||
|
r52 | |||
def extendMarkdown(self, md, md_globals): | ||||
autolink = AutolinkPattern(self.AUTOLINK_PATTERN, md) | ||||
quote = QuotePattern(self.QUOTE_PATTERN, md) | ||||
reflink = ReflinkPattern(self.REFLINK_PATTERN, md) | ||||
|
r56 | spoiler = SpoilerPattern(self.SPOILER_PATTERN, md) | ||
comment = CommentPattern(self.COMMENT_PATTERN, md) | ||||
|
r52 | |||
md.inlinePatterns[u'autolink_ext'] = autolink | ||||
|
r55 | md.inlinePatterns.add(u'reflink', reflink, '<entity') | ||
md.inlinePatterns.add(u'quote', quote, '<entity') | ||||
|
r56 | md.inlinePatterns[u'spoiler'] = spoiler | ||
md.inlinePatterns[u'comment'] = comment | ||||
|
r52 | |||
def makeExtension(configs=None): | ||||
return NeboardMarkdown(configs=configs) | ||||
neboard_extension = makeExtension() | ||||
def markdown_extended(markup): | ||||
return markdown.markdown(markup, [neboard_extension]) | ||||