Ticket #14288: 14288.linebreaksbr-normalized-newlines.2.diff

File 14288.linebreaksbr-normalized-newlines.2.diff, 3.0 KB (added by Julien Phalip, 8 years ago)
  • django/template/defaultfilters.py

    diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py
    index 60fa59e..07fcebc 100644
    a b from django.utils.encoding import force_unicode, iri_to_uri 
    1212from django.utils.html import conditional_escape
    1313from django.utils.safestring import mark_safe, SafeData
    1414from django.utils.translation import ugettext, ungettext
     15from django.utils.text import normalize_newlines
    1516
    1617register = Library()
    1718
    def linebreaksbr(value, autoescape=None): 
    414415    Converts all newlines in a piece of plain text to HTML line breaks
    415416    (``<br />``).
    416417    """
    417     if autoescape and not isinstance(value, SafeData):
     418    autoescape = autoescape and not isinstance(value, SafeData)
     419    value = normalize_newlines(value)
     420    if autoescape:
    418421        from django.utils.html import escape
    419422        value = escape(value)
    420423    return mark_safe(value.replace('\n', '<br />'))
  • django/utils/html.py

    diff --git a/django/utils/html.py b/django/utils/html.py
    index 7fda015..2687eb5 100644
    a b from django.utils.safestring import SafeData, mark_safe 
    77from django.utils.encoding import force_unicode
    88from django.utils.functional import allow_lazy
    99from django.utils.http import urlquote
     10from django.utils.text import normalize_newlines
    1011
    1112# Configuration for urlize() function.
    1213LEADING_PUNCTUATION  = ['(', '<', '&lt;']
    def conditional_escape(html): 
    7071
    7172def linebreaks(value, autoescape=False):
    7273    """Converts newlines into <p> and <br />s."""
    73     value = re.sub(r'\r\n|\r|\n', '\n', force_unicode(value)) # normalize newlines
     74    value = normalize_newlines(value)
    7475    paras = re.split('\n{2,}', value)
    7576    if autoescape:
    7677        paras = [u'<p>%s</p>' % escape(p).replace('\n', '<br />') for p in paras]
  • tests/regressiontests/defaultfilters/tests.py

    diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py
    index 77bd2ba..b471205 100644
    a b class DefaultFiltersTests(TestCase): 
    266266        self.assertEqual(linebreaks(u'line 1'), u'<p>line 1</p>')
    267267        self.assertEqual(linebreaks(u'line 1\nline 2'),
    268268                          u'<p>line 1<br />line 2</p>')
     269        self.assertEqual(linebreaks(u'line 1\rline 2'),
     270                          u'<p>line 1<br />line 2</p>')
     271        self.assertEqual(linebreaks(u'line 1\r\nline 2'),
     272                          u'<p>line 1<br />line 2</p>')
     273   
     274    def test_linebreaksbr(self):
     275        self.assertEqual(linebreaksbr(u'line 1\nline 2'),
     276                          u'line 1<br />line 2')
     277        self.assertEqual(linebreaksbr(u'line 1\rline 2'),
     278                          u'line 1<br />line 2')
     279        self.assertEqual(linebreaksbr(u'line 1\r\nline 2'),
     280                          u'line 1<br />line 2')
    269281
    270282    def test_removetags(self):
    271283        self.assertEqual(removetags(u'some <b>html</b> with <script>alert'\
Back to Top