Home | History | Annotate | Download | only in markupsafe
      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 ._compat import text_type
     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(text_type(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, text_type):
     44         s = text_type(s)
     45     return s
     46