##// END OF EJS Templates
Fixed quotes parsing
neko259 -
r303:db328c65 default
parent child Browse files
Show More
@@ -1,96 +1,96 b''
1 1 from django.core.urlresolvers import reverse
2 2 import markdown
3 3 from markdown.inlinepatterns import Pattern
4 4 from markdown.util import etree
5 5 import boards
6 6
7 7 __author__ = 'neko259'
8 8
9 9
10 10 AUTOLINK_PATTERN = r'(https?://\S+)'
11 QUOTE_PATTERN = r'^(?<!>)(>[^>]+)$'
11 QUOTE_PATTERN = r'^(?<!>)(>[^>].+)$'
12 12 REFLINK_PATTERN = r'((>>)(\d+))'
13 13 SPOILER_PATTERN = r'%%(.+)%%'
14 14 COMMENT_PATTERN = r'^(//(.+))'
15 15
16 16 class AutolinkPattern(Pattern):
17 17 def handleMatch(self, m):
18 18 link_element = etree.Element('a')
19 19 href = m.group(2)
20 20 link_element.set('href', href)
21 21 link_element.text = href
22 22
23 23 return link_element
24 24
25 25
26 26 class QuotePattern(Pattern):
27 27 def handleMatch(self, m):
28 28 quote_element = etree.Element('span')
29 29 quote_element.set('class', 'quote')
30 30 quote_element.text = m.group(2)
31 31
32 32 return quote_element
33 33
34 34
35 35 class ReflinkPattern(Pattern):
36 36 def handleMatch(self, m):
37 37 ref_element = etree.Element('a')
38 38 post_id = m.group(4)
39 39 ref_element.set('href', reverse(boards.views.jump_to_post,
40 40 kwargs={'post_id': post_id}))
41 41 ref_element.text = m.group(2)
42 42
43 43 return ref_element
44 44
45 45
46 46 class SpoilerPattern(Pattern):
47 47 def handleMatch(self, m):
48 48 quote_element = etree.Element('span')
49 49 quote_element.set('class', 'spoiler')
50 50 quote_element.text = m.group(2)
51 51
52 52 return quote_element
53 53
54 54
55 55 class CommentPattern(Pattern):
56 56 def handleMatch(self, m):
57 57 quote_element = etree.Element('span')
58 58 quote_element.set('class', 'comment')
59 59 quote_element.text = '//' + m.group(3)
60 60
61 61 return quote_element
62 62
63 63
64 64 class NeboardMarkdown(markdown.Extension):
65 65 def extendMarkdown(self, md, md_globals):
66 66 self._add_neboard_patterns(md)
67 67 self._delete_patterns(md)
68 68
69 69 def _delete_patterns(self, md):
70 70 del md.parser.blockprocessors['quote']
71 71
72 72 del md.inlinePatterns['image_link']
73 73 del md.inlinePatterns['image_reference']
74 74
75 75 def _add_neboard_patterns(self, md):
76 76 autolink = AutolinkPattern(AUTOLINK_PATTERN, md)
77 77 quote = QuotePattern(QUOTE_PATTERN, md)
78 78 reflink = ReflinkPattern(REFLINK_PATTERN, md)
79 79 spoiler = SpoilerPattern(SPOILER_PATTERN, md)
80 80 comment = CommentPattern(COMMENT_PATTERN, md)
81 81
82 82 md.inlinePatterns[u'autolink_ext'] = autolink
83 83 md.inlinePatterns[u'spoiler'] = spoiler
84 84 md.inlinePatterns[u'comment'] = comment
85 85 md.inlinePatterns[u'reflink'] = reflink
86 86 md.inlinePatterns[u'quote'] = quote
87 87
88 88
89 89 def makeExtension(configs=None):
90 90 return NeboardMarkdown(configs=configs)
91 91
92 92 neboard_extension = makeExtension()
93 93
94 94
95 95 def markdown_extended(markup):
96 96 return markdown.markdown(markup, [neboard_extension], safe_mode=True)
@@ -1,21 +1,20 b''
1 1 = Features =
2 2 [DONE] Connecting tags to each other
3 3 [DONE] Connect posts to the replies (in messages), get rid of the JS reply map
4 4
5 5 [NOT STARTED] Tree view (JS)
6 6 [NOT STARTED] Adding tags to images filename
7 7 [NOT STARTED] Federative network for s2s communication
8 8 [NOT STARTED] XMPP gate
9 9 [NOT STARTED] Bitmessage gate
10 10 [NOT STARTED] Notification engine
11 11 [NOT STARTED] Javascript disabling engine
12 12 [NOT STARTED] Thread autoupdate (JS + API)
13 13 [NOT STARTED] Better django admin pages to simplify admin operations
14 14 [NOT STARTED] Regen script to update all posts
15 15 [NOT STARTED] Group tags by first letter in all tags list
16 16 [NOT STARTED] Show board speed in the lower panel (posts per day)
17 17
18 18 = Bugs =
19 19 [DONE] Fix bug with creating threads from tag view
20
21 [NOT STARTED] Quote characters within quote causes quote parsing to fail
20 [DONE] Quote characters within quote causes quote parsing to fail
General Comments 0
You need to be logged in to leave comments. Login now