diff options
| author | Boulder Sprinters <boulder-sprinters@djangoproject.com> | 2007-04-02 15:36:31 +0000 |
|---|---|---|
| committer | Boulder Sprinters <boulder-sprinters@djangoproject.com> | 2007-04-02 15:36:31 +0000 |
| commit | a3053273c8a5d450a0cd73ee8deebc277d8c4170 (patch) | |
| tree | 040ebe76a8c7814e888c6669deec86d6c7ef8940 /django/utils | |
| parent | b86d69f52920adf8e065bf6952ab6b3814211d4e (diff) | |
boulder-oracle-sprint: Merged to [4905].
git-svn-id: http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint@4906 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/utils')
| -rw-r--r-- | django/utils/html.py | 4 | ||||
| -rw-r--r-- | django/utils/text.py | 5 | ||||
| -rw-r--r-- | django/utils/translation/__init__.py | 98 | ||||
| -rw-r--r-- | django/utils/translation/trans_real.py | 5 |
4 files changed, 97 insertions, 15 deletions
diff --git a/django/utils/html.py b/django/utils/html.py index a0d1e82dcf..baa2fb06fc 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -39,8 +39,8 @@ def strip_tags(value): return re.sub(r'<[^>]*?>', '', value) def strip_spaces_between_tags(value): - "Returns the given HTML with spaces between tags normalized to a single space" - return re.sub(r'>\s+<', '> <', value) + "Returns the given HTML with spaces between tags removed" + return re.sub(r'>\s+<', '><', value) def strip_entities(value): "Returns the given HTML with all entities (&something;) stripped" diff --git a/django/utils/text.py b/django/utils/text.py index faf8705fa9..c73ab908f3 100644 --- a/django/utils/text.py +++ b/django/utils/text.py @@ -191,14 +191,15 @@ def smart_split(text): Supports both single and double quotes, and supports escaping quotes with backslashes. In the output, strings will keep their initial and trailing quote marks. + >>> list(smart_split('This is "a person\'s" test.')) ['This', 'is', '"a person\'s"', 'test.'] """ for bit in smart_split_re.finditer(text): bit = bit.group(0) - if bit[0] == '"': + if bit[0] == '"' and bit[-1] == '"': yield '"' + bit[1:-1].replace('\\"', '"').replace('\\\\', '\\') + '"' - elif bit[0] == "'": + elif bit[0] == "'" and bit[-1] == "'": yield "'" + bit[1:-1].replace("\\'", "'").replace("\\\\", "\\") + "'" else: yield bit diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index 276e59f4bd..39ebd6f75a 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -1,8 +1,94 @@ -from django.conf import settings +""" +Internationalization support. +""" +from django.utils.functional import lazy -if settings.USE_I18N: - from trans_real import * -else: - from trans_null import * +__all__ = ['gettext', 'gettext_noop', 'gettext_lazy', 'ngettext', + 'ngettext_lazy', 'string_concat', 'activate', 'deactivate', + 'get_language', 'get_language_bidi', 'get_date_formats', + 'get_partial_date_formats', 'check_for_language', 'to_locale', + 'get_language_from_request', 'install'] + +# Here be dragons, so a short explanation of the logic won't hurt: +# We are trying to solve two problems: (1) access settings, in particular +# settings.USE_I18N, as late as possible, so that modules can be imported +# without having to first configure Django, and (2) if some other code creates +# a reference to one of these functions, don't break that reference when we +# replace the functions with their real counterparts (once we do access the +# settings). + +def delayed_loader(*args, **kwargs): + """ + Replace each real_* function with the corresponding function from either + trans_real or trans_null (e.g. real_gettext is replaced with + trans_real.gettext or trans_null.gettext). This function is run once, the + first time any i18n method is called. It replaces all the i18n methods at + once at that time. + """ + import traceback + from django.conf import settings + if settings.USE_I18N: + import trans_real as trans + else: + import trans_null as trans + caller = traceback.extract_stack(limit=2)[0][2] + g = globals() + for name in __all__: + if hasattr(trans, name): + g['real_%s' % name] = getattr(trans, name) + + # Make the originally requested function call on the way out the door. + return g[caller](*args, **kwargs) + +g = globals() +for name in __all__: + g['real_%s' % name] = delayed_loader +del g, delayed_loader + +def gettext_noop(message): + return real_gettext_noop(message) + +def gettext(message): + return real_gettext(message) + + +def ngettext(singular, plural, number): + return real_ngettext(singular, plural, number) + +def string_concat(*strings): + return real_string_concat(*strings) + +ngettext_lazy = lazy(ngettext, str, unicode) +gettext_lazy = lazy(gettext, str, unicode) +string_concat = lazy(string_concat, str, unicode) + +def activate(language): + return real_activate(language) + +def deactivate(): + return real_deactivate() + +def get_language(): + return real_get_language() + +def get_language_bidi(): + return real_get_language_bidi() + +def get_date_formats(): + return real_get_date_formats() + +def get_partial_date_formats(): + return real_get_partial_date_formats() + +def check_for_language(lang_code): + return real_check_for_language(lang_code) + +def to_locale(language): + return real_to_locale(language) + +def get_language_from_request(request): + return real_get_language_from_request(request) + +def install(): + return real_install() -del settings diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 94df23a8e9..0c8dcd540f 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -3,7 +3,6 @@ import os, re, sys import gettext as gettext_module from cStringIO import StringIO -from django.utils.functional import lazy try: import threading @@ -277,9 +276,6 @@ def ngettext(singular, plural, number): _default = translation(settings.LANGUAGE_CODE) return _default.ngettext(singular, plural, number) -gettext_lazy = lazy(gettext, str) -ngettext_lazy = lazy(ngettext, str) - def check_for_language(lang_code): """ Checks whether there is a global language file for the given language code. @@ -493,4 +489,3 @@ def string_concat(*strings): """ return ''.join([str(el) for el in strings]) -string_concat = lazy(string_concat, str) |
