1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# -*- coding: utf-8 -*-
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez"""
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    markupsafe._native
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    ~~~~~~~~~~~~~~~~~~
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    Native Python implementation the C module is not compiled.
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    :copyright: (c) 2010 by Armin Ronacher.
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    :license: BSD, see LICENSE for more details.
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez"""
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom markupsafe import Markup
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom markupsafe._compat import text_type
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef escape(s):
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    """Convert the characters &, <, >, ' and " in string s to HTML-safe
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    sequences.  Use this if you need to display text that might contain
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    such characters in HTML.  Marks return value as markup string.
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    """
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    if hasattr(s, '__html__'):
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        return s.__html__()
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return Markup(text_type(s)
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        .replace('&', '&amp;')
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        .replace('>', '&gt;')
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        .replace('<', '&lt;')
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        .replace("'", '&#39;')
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        .replace('"', '&#34;')
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    )
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef escape_silent(s):
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    """Like :func:`escape` but converts `None` into an empty
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    markup string.
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    """
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    if s is None:
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        return Markup()
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return escape(s)
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef soft_unicode(s):
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    """Make a string unicode if it isn't already.  That way a markup
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    string is not converted back to unicode.
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    """
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    if not isinstance(s, text_type):
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        s = text_type(s)
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return s
47