1# markdown is released under the BSD license
2# Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
3# Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
4# Copyright 2004 Manfred Stienstra (the original version)
5#
6# All rights reserved.
7#
8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions are met:
10#
11# *   Redistributions of source code must retain the above copyright
12#     notice, this list of conditions and the following disclaimer.
13# *   Redistributions in binary form must reproduce the above copyright
14#     notice, this list of conditions and the following disclaimer in the
15#     documentation and/or other materials provided with the distribution.
16# *   Neither the name of the <organization> nor the
17#     names of its contributors may be used to endorse or promote products
18#     derived from this software without specific prior written permission.
19#
20# THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
21# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23# DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
24# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30# POSSIBILITY OF SUCH DAMAGE.
31
32
33"""
34NL2BR Extension
35===============
36
37A Python-Markdown extension to treat newlines as hard breaks; like
38GitHub-flavored Markdown does.
39
40Usage:
41
42    >>> import markdown
43    >>> print markdown.markdown('line 1\\nline 2', extensions=['nl2br'])
44    <p>line 1<br />
45    line 2</p>
46
47Copyright 2011 [Brian Neal](http://deathofagremmie.com/)
48
49Dependencies:
50* [Python 2.4+](http://python.org)
51* [Markdown 2.1+](http://packages.python.org/Markdown/)
52
53"""
54
55from __future__ import absolute_import
56from __future__ import unicode_literals
57from . import Extension
58from ..inlinepatterns import SubstituteTagPattern
59
60BR_RE = r'\n'
61
62class Nl2BrExtension(Extension):
63
64    def extendMarkdown(self, md, md_globals):
65        br_tag = SubstituteTagPattern(BR_RE, 'br')
66        md.inlinePatterns.add('nl', br_tag, '_end')
67
68
69def makeExtension(configs=None):
70    return Nl2BrExtension(configs)
71