Changeset 267:60d6c3bc8992
- Timestamp:
- 18.08.2010 14:20:52 (21 months ago)
- Branch:
- default
- File:
-
- 1 edited
-
djangobb/djangobb_forum/markups/bbmarkup.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
djangobb/djangobb_forum/markups/bbmarkup.py
r237 r267 7 7 8 8 __all__ = ('BBCODE_RULES', 'bbcode') 9 10 BBCODE_RULES = [ (r'\[url\](.*?)\[/url\]', r'<a href="\1">\1</a>'),11 (r'\[url=(.*?)\](.*?)\[/url\]', r'<a href="\1">\2</a>'),12 (r'\[link\](.*?)\[/link\]', r'<a href="\1">\1</a>'),13 (r'\[link=(.*?)\](.*?)\[/link\]', r'<a href="\1">\2</a>'),14 (r'\[email\](.*?)\[/email\]', r'<a href="mailto:\1">\1</a>'),15 (r'\[email=(.*?)\](.*?)\[/email\]', r'<a href="mailto:\1">\2</a>'),16 (r'\[img\](.*?)\[/img\]', r'<img src="\1">'),17 (r'\[img=(.*?)\](.*?)\[/img\]', r'<img src="\1" alt="\2">'),18 (r'\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})\](.*?)\[/color\]', r'<span style="color:\1">\2</span>'),19 (r'\[b\](.*?)\[/b\]', r'<strong>\1</strong>'),20 (r'\[i\](.*?)\[/i\]', r'<em>\1</em>'),21 (r'\[u\](.*?)\[/u\]', r'<u>\1</u>'),22 (r'\[s\](.*?)\[/s\]', r'<strike>\1</strike>'),23 (r'\[quote\](.*?)\[/quote\]', r'<blockquote>\1</blockquote>'),24 (r'\[quote=(.*?)\](.*?)\[/quote\]', r'<blockquote><em>\1</em> <br /> \2</blockquote>'),25 (r'\[center\](.*?)\[/center\]', r'<div style="text-align: center;">\1</div>'),26 (r'\[big\](.*?)\[/big\]', r'<big>\1</big>'),27 (r'\[small\](.*?)\[/small\]', r'<small>\1</small>'),28 (r'\[list\](.*?)\[/list\]', r'<ul>\1</ul>'),29 (r'\[list\=(\d+)\](.*?)\[/list\]', r'<ol start="\1">\2</ol>'),30 (r'\[\*\](.*?)<br./>', r'<li>\1</li>'),31 (r'\[br\]', r'<br />') ]32 33 BBCODE_RULES += getattr(settings, 'BBMARKUP_EXTRA_RULES', [])34 35 36 BBCODE_RULES_COMPILED = []37 for bbset in (getattr(settings, 'BBMARKUP_CUSTOM_RULES', []) or BBCODE_RULES):38 p = re.compile(bbset[0], re.DOTALL)39 BBCODE_RULES_COMPILED.append((p, bbset[1]))40 41 9 42 10 def code_parser(matchobj): … … 51 19 return "<pre><code>%s</code></pre>" % value 52 20 21 """ 22 BBcode rule format: 23 'pattern' and 'repl'' - params for re.sub(); 'repl' can be function 24 'sortkey' - used to sort rules from highest to lowest; default value: 0 25 'nested' - show how many time tag can be nested to itself; only for [quote] now 26 """ 27 28 BBCODE_RULES = [ 29 {'pattern': r'\[code\](.*?)\[/code\]', 'repl': code_parser, 'sortkey': 100}, 30 {'pattern': r'\[url\](.*?)\[/url\]', 'repl': r'<a href="\1">\1</a>'}, 31 {'pattern': r'\[url=(.*?)\](.*?)\[/url\]', 'repl': r'<a href="\1">\2</a>'}, 32 {'pattern': r'\[link\](.*?)\[/link\]', 'repl': r'<a href="\1">\1</a>'}, 33 {'pattern': r'\[link=(.*?)\](.*?)\[/link\]', 'repl': r'<a href="\1">\2</a>'}, 34 {'pattern': r'\[email\](.*?)\[/email\]', 'repl': r'<a href="mailto:\1">\1</a>'}, 35 {'pattern': r'\[email=(.*?)\](.*?)\[/email\]', 'repl': r'<a href="mailto:\1">\2</a>'}, 36 {'pattern': r'\[img\](.*?)\[/img\]', 'repl': r'<img src="\1">'}, 37 {'pattern': r'\[img=(.*?)\](.*?)\[/img\]', 'repl': r'<img src="\1" alt="\2">'}, 38 {'pattern': r'\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})\](.*?)\[/color\]', 'repl': r'<span style="color:\1">\2</span>'}, 39 {'pattern': r'\[b\](.*?)\[/b\]', 'repl': r'<strong>\1</strong>'}, 40 {'pattern': r'\[i\](.*?)\[/i\]', 'repl': r'<em>\1</em>'}, 41 {'pattern': r'\[u\](.*?)\[/u\]', 'repl': r'<u>\1</u>'}, 42 {'pattern': r'\[s\](.*?)\[/s\]', 'repl': r'<strike>\1</strike>'}, 43 {'pattern': r'\[quote\](.*?)\[/quote\]', 'repl': r'<blockquote>\1</blockquote>', 'nested': 5}, 44 {'pattern': r'\[quote=(.*?)\](.*?)\[/quote\]', 'repl': r'<blockquote><em>\1</em> <br /> \2</blockquote>', 'nested': 5}, 45 {'pattern': r'\[center\](.*?)\[/center\]', 'repl': r'<div style="text-align: center;">\1</div>'}, 46 {'pattern': r'\[big\](.*?)\[/big\]', 'repl': r'<big>\1</big>'}, 47 {'pattern': r'\[small\](.*?)\[/small\]', 'repl': r'<small>\1</small>'}, 48 {'pattern': r'\[list\](.*?)\[/list\]', 'repl': r'<ul>\1</ul>'}, 49 {'pattern': r'\[list\=(\d+)\](.*?)\[/list\]', 'repl': r'<ol start="\1">\2</ol>'}, 50 {'pattern': r'\[\*\](.*?)<br./>', 'repl': r'<li>\1</li>'}, 51 {'pattern': r'\[br\]', 'repl': r'<br />'}, 52 ] 53 54 BBCODE_RULES += getattr(settings, 'BBMARKUP_EXTRA_RULES', []) 55 BBCODE_RULES.sort(key=lambda r: r.get('sortkey', 0), reverse=True) 56 57 BBCODE_RULES_COMPILED = [] 58 for bbset in (getattr(settings, 'BBMARKUP_CUSTOM_RULES', []) or BBCODE_RULES): 59 bbset['pattern'] = re.compile(bbset['pattern'], re.DOTALL) 60 bbset.setdefault('sortkey', 0) 61 bbset.setdefault('nested', 0) 62 BBCODE_RULES_COMPILED.append(bbset) 53 63 54 64 def bbcode(value, code_parser=code_parser): … … 59 69 >>> bbcode('[i]Lorem[/i] \\n [s]imsum[/s]') 60 70 u'<em>Lorem</em> <br /> <strike>imsum</strike>' 61 >>> bb markup.bbcode('[list] [*] 1\n [*]2\n [*] 3\n[/list]')62 u'<ul> <li> 1</li> <li>2</li> <li>3</li></ul>'63 >>> bb markup.bbcode('[list=2] [*] a\n [*]b\n [*] c\n[/list]')64 u'<ol start="2"> <li> a</li> <li>b</li> <li>c</li></ol>'65 >>> bb markup.bbcode("[code]print 123\nprint '<br/>'[/code]")66 u'<pre><code>print 123\ nprint '<br/>'</code></pre>'67 >>> bb markup.bbcode('[quote=test user]Test quote text[/quote]')71 >>> bbcode('[list] [*] 1\\n [*]2\\n [*] 3\\n[/list]') 72 u'<ul> <li> 1</li> <li>2</li> <li> 3</li></ul>' 73 >>> bbcode('[list=2] [*] a\\n [*]b\\n [*] c\\n[/list]') 74 u'<ol start="2"> <li> a</li> <li>b</li> <li> c</li></ol>' 75 >>> bbcode("[code]print 123\\nprint '<br/>'[/code]") 76 u'<pre><code>print 123\\nprint '<br/>'</code></pre>' 77 >>> bbcode('[quote=test user]Test quote text[/quote]') 68 78 u'<blockquote><em>test user</em> <br /> Test quote text</blockquote>' 69 >>> bbmarkup.bbcode('[color=red]Lorem[/color]') 79 >>> bbcode("[quote]Lorem [quote=sl]imsum[/quote] blabla [/quote]") 80 u'<blockquote>Lorem <blockquote><em>sl</em> <br /> imsum</blockquote> blabla </blockquote>' 81 >>> bbcode('[color=red]Lorem[/color]') 70 82 u'<span style="color:red">Lorem</span>' 71 >>> bb markup.bbcode('[color=#FAaF12]Lorem[/color]')83 >>> bbcode('[color=#FAaF12]Lorem[/color]') 72 84 u'<span style="color:#FAaF12">Lorem</span>' 73 >>> bb markup.bbcode('[color=#FAaF121]Lorem[/color]')85 >>> bbcode('[color=#FAaF121]Lorem[/color]') 74 86 u'[color=#FAaF121]Lorem[/color]' 75 87 … … 78 90 value = escape(value) 79 91 value = linebreaksbr(value) 80 value = re.sub(re.compile(r'\[code\](.*?)\[/code\]', re.DOTALL), code_parser, value)81 92 for bbset in BBCODE_RULES_COMPILED: 82 value = bbset[0].sub(bbset[1], value) 93 for _ in xrange(bbset['nested'] + 1): 94 value = bbset['pattern'].sub(bbset['repl'], value) 83 95 84 96 return mark_safe(value)
Note: See TracChangeset
for help on using the changeset viewer.
