diff options
author | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2012-07-22 21:20:28 +0000 |
---|---|---|
committer | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2012-07-22 21:20:28 +0000 |
commit | cb45b6032364b499d9dd64604723efcac5f48ade (patch) | |
tree | 65f14fdc08dc2a882ffcddeadd90f0b6b5cdac74 /docutils/parsers/rst | |
parent | 7863f92169514bfe8edcaafadc7fd9e54a221d6e (diff) | |
download | docutils-cb45b6032364b499d9dd64604723efcac5f48ade.tar.gz |
Fix [ 3546533 ] unicode error with date directive.
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@7487 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/parsers/rst')
-rw-r--r-- | docutils/parsers/rst/directives/misc.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/docutils/parsers/rst/directives/misc.py b/docutils/parsers/rst/directives/misc.py index 6edaf6fa9..09b7fcdec 100644 --- a/docutils/parsers/rst/directives/misc.py +++ b/docutils/parsers/rst/directives/misc.py @@ -12,6 +12,7 @@ import re import time from docutils import io, nodes, statemachine, utils from docutils.utils.error_reporting import SafeString, ErrorString +from docutils.utils.error_reporting import locale_encoding from docutils.parsers.rst import Directive, convert_directive_function from docutils.parsers.rst import directives, roles, states from docutils.parsers.rst.directives.body import CodeBlock, NumberLines @@ -469,8 +470,22 @@ class Date(Directive): raise self.error( 'Invalid context: the "%s" directive can only be used within ' 'a substitution definition.' % self.name) - format = '\n'.join(self.content) or '%Y-%m-%d' - text = time.strftime(format) + format_str = '\n'.join(self.content) or '%Y-%m-%d' + if sys.version_info< (3, 0): + try: + format_str = format_str.encode(locale_encoding or 'utf-8') + except UnicodeEncodeError: + raise self.warning(u'Cannot encode date format string ' + u'with locale encoding "%s".' % locale_encoding) + text = time.strftime(format_str) + if sys.version_info< (3, 0): + # `text` is a byte string that may contain non-ASCII characters: + try: + text = text.decode(locale_encoding or 'utf-8') + except UnicodeDecodeError: + text = text.decode(locale_encoding or 'utf-8', 'replace') + raise self.warning(u'Error decoding "%s"' + u'with locale encoding "%s".' % (text, locale_encoding)) return [nodes.Text(text)] |