nbarth@chromium.org | ba7913b | 2013-09-06 14:19:54 +0900 | [diff] [blame] | 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 markupsafe import Markup |
| 12 | from markupsafe._compat import text_type |
| 13 | |
| 14 | |
| 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('&', '&') |
| 24 | .replace('>', '>') |
| 25 | .replace('<', '<') |
| 26 | .replace("'", ''') |
| 27 | .replace('"', '"') |
| 28 | ) |
| 29 | |
| 30 | |
| 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) |
| 38 | |
| 39 | |
| 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 |