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"""
11from ._compat import text_type
12
13
14def 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(text_type(s)
22        .replace('&', '&amp;')
23        .replace('>', '&gt;')
24        .replace('<', '&lt;')
25        .replace("'", '&#39;')
26        .replace('"', '&#34;')
27    )
28
29
30def 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
39def 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, text_type):
44        s = text_type(s)
45    return s
46