|
@@ -1,48 +1,14 @@
|
|
import re
|
|
import re
|
|
import markdown
|
|
import markdown
|
|
-from HTMLParser import HTMLParser
|
|
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
from django.utils.importlib import import_module
|
|
from django.utils.importlib import import_module
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from misago.utils.strings import random_string
|
|
from misago.utils.strings import random_string
|
|
-
|
|
|
|
-class ClearHTMLParser(HTMLParser):
|
|
|
|
- def __init__(self):
|
|
|
|
- HTMLParser.__init__(self)
|
|
|
|
- self.clean_text = ''
|
|
|
|
- self.lookback = []
|
|
|
|
-
|
|
|
|
- def handle_entityref(self, name):
|
|
|
|
- if name == 'gt':
|
|
|
|
- self.clean_text += '>'
|
|
|
|
- if name == 'lt':
|
|
|
|
- self.clean_text += '<'
|
|
|
|
-
|
|
|
|
- def handle_starttag(self, tag, attrs):
|
|
|
|
- self.lookback.append(tag)
|
|
|
|
-
|
|
|
|
- def handle_endtag(self, tag):
|
|
|
|
- try:
|
|
|
|
- if self.lookback[-1] == tag:
|
|
|
|
- self.lookback.pop()
|
|
|
|
- except IndexError:
|
|
|
|
- pass
|
|
|
|
-
|
|
|
|
- def handle_data(self, data):
|
|
|
|
- # String does not repeat itself
|
|
|
|
- if self.clean_text[-len(data):] != data:
|
|
|
|
- # String is not "QUOTE"
|
|
|
|
- try:
|
|
|
|
- if self.lookback[-1] in ('strong', 'em'):
|
|
|
|
- self.clean_text += data
|
|
|
|
- elif not (data == 'Quote' and self.lookback[-1] == 'h3' and self.lookback[-2] == 'blockquote'):
|
|
|
|
- self.clean_text += data
|
|
|
|
- except IndexError:
|
|
|
|
- self.clean_text += data
|
|
|
|
-
|
|
|
|
|
|
+from misago.markdown.extensions.cleanlinks import CleanLinksExtension
|
|
|
|
+from misago.markdown.parsers import RemoveHTMLParser
|
|
|
|
|
|
def clear_markdown(text):
|
|
def clear_markdown(text):
|
|
- parser = ClearHTMLParser()
|
|
|
|
|
|
+ parser = RemoveHTMLParser()
|
|
parser.feed(text)
|
|
parser.feed(text)
|
|
return parser.clean_text
|
|
return parser.clean_text
|
|
|
|
|
|
@@ -62,6 +28,8 @@ def signature_markdown(acl, text):
|
|
extensions=['nl2br'])
|
|
extensions=['nl2br'])
|
|
|
|
|
|
remove_unsupported(md)
|
|
remove_unsupported(md)
|
|
|
|
+ cleanlinks = CleanLinksExtension()
|
|
|
|
+ cleanlinks.extendMarkdown(md)
|
|
|
|
|
|
if not acl.usercp.allow_signature_links():
|
|
if not acl.usercp.allow_signature_links():
|
|
del md.inlinePatterns['link']
|
|
del md.inlinePatterns['link']
|
|
@@ -96,7 +64,8 @@ def post_markdown(request, text):
|
|
ext = attr()
|
|
ext = attr()
|
|
ext.extendMarkdown(md)
|
|
ext.extendMarkdown(md)
|
|
text = md.convert(text)
|
|
text = md.convert(text)
|
|
- return tidy_markdown(md, text)
|
|
|
|
|
|
+ md, text = tidy_markdown(md, text)
|
|
|
|
+ return md, text
|
|
|
|
|
|
|
|
|
|
def tidy_markdown(md, text):
|
|
def tidy_markdown(md, text):
|