summaryrefslogtreecommitdiff
path: root/docutils/parsers/rst
diff options
context:
space:
mode:
authormilde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2012-07-22 21:20:28 +0000
committermilde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2012-07-22 21:20:28 +0000
commitcb45b6032364b499d9dd64604723efcac5f48ade (patch)
tree65f14fdc08dc2a882ffcddeadd90f0b6b5cdac74 /docutils/parsers/rst
parent7863f92169514bfe8edcaafadc7fd9e54a221d6e (diff)
downloaddocutils-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.py19
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)]