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