With number of course. Jinja2.pdf not Jinja.pdf
[jinja2.git] / jinja2 / _markupsafe / _native.py
1 # -*- coding: utf-8 -*-
2 """
3     markupsafe._native
4     ~~~~~~~~~~~~~~~~~~
5
6     Native Python implementation the C module is not compiled.
7
8     :copyright: (c) 2010 by Armin Ronacher.
9     :license: BSD, see LICENSE for more details.
10 """
11 from jinja2._markupsafe import Markup
12
13
14 def escape(s):
15     """Convert the characters &, <, >, ' and " in string s to HTML-safe
16     sequences.  Use this if you need to display text that might contain
17     such characters in HTML.  Marks return value as markup string.
18     """
19     if hasattr(s, '__html__'):
20         return s.__html__()
21     return Markup(unicode(s)
22         .replace('&', '&amp;')
23         .replace('>', '&gt;')
24         .replace('<', '&lt;')
25         .replace("'", '&#39;')
26         .replace('"', '&#34;')
27     )
28
29
30 def escape_silent(s):
31     """Like :func:`escape` but converts `None` into an empty
32     markup string.
33     """
34     if s is None:
35         return Markup()
36     return escape(s)
37
38
39 def soft_unicode(s):
40     """Make a string unicode if it isn't already.  That way a markup
41     string is not converted back to unicode.
42     """
43     if not isinstance(s, unicode):
44         s = unicode(s)
45     return s