6b24f153d7
All of those patches are picked from upstream. xbps-src check python3-docutils works fine now!
599 lines
28 KiB
Diff
599 lines
28 KiB
Diff
From ac408c7ed04500c83a47861c5ac88aee246d178c Mon Sep 17 00:00:00 2001
|
||
From: Stephen Finucane <stephen@that.guru>
|
||
Date: Tue, 27 Aug 2019 12:09:19 +0000
|
||
Subject: [PATCH 18/26] py3: Replace 'ur' prefix
|
||
|
||
While the 'u' prefix was backported to Python 3.3 or thereabouts, 'ur'
|
||
remains invalid in Python 3. Just escape all backslashes and use plain
|
||
old 'u'.
|
||
|
||
Based on patch by Stephen Finucane <stephen@that.guru>
|
||
|
||
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@8366 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
|
||
Signed-off-by: Doan Tran Cong Danh <congdanhqx@gmail.com>
|
||
---
|
||
docutils/utils/math/latex2mathml.py | 28 +-
|
||
docutils/utils/math/tex2mathml_extern.py | 3 +-
|
||
docutils/utils/smartquotes.py | 24 +-
|
||
docutils/writers/latex2e/__init__.py | 280 +++++++++---------
|
||
docutils/writers/manpage.py | 8 +-
|
||
.../test_rst/test_east_asian_text.py | 4 +-
|
||
tools/dev/generate_punctuation_chars.py | 10 +-
|
||
7 files changed, 182 insertions(+), 175 deletions(-)
|
||
|
||
diff --git a/docutils/utils/math/latex2mathml.py b/docutils/utils/math/latex2mathml.py
|
||
index b7ba048..1f3bc18 100644
|
||
--- a/docutils/utils/math/latex2mathml.py
|
||
+++ b/docutils/utils/math/latex2mathml.py
|
||
@@ -6,12 +6,12 @@
|
||
# Based on rst2mathml.py from the latex_math sandbox project
|
||
# © 2005 Jens Jørgen Mortensen
|
||
# :License: Released under the terms of the `2-Clause BSD license`_, in short:
|
||
-#
|
||
+#
|
||
# Copying and distribution of this file, with or without modification,
|
||
# are permitted in any medium without royalty provided the copyright
|
||
# notice and this notice are preserved.
|
||
# This file is offered as-is, without any warranty.
|
||
-#
|
||
+#
|
||
# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause
|
||
|
||
|
||
@@ -412,7 +412,7 @@ def parse_latex_math(string, inline=True):
|
||
node = entry
|
||
skip = 2
|
||
else:
|
||
- raise SyntaxError(ur'Syntax error: "%s%s"' % (c, c2))
|
||
+ raise SyntaxError(u'Syntax error: "%s%s"' % (c, c2))
|
||
elif c.isalpha():
|
||
node = node.append(mi(c))
|
||
elif c.isdigit():
|
||
@@ -453,7 +453,7 @@ def parse_latex_math(string, inline=True):
|
||
node.close().append(entry)
|
||
node = entry
|
||
else:
|
||
- raise SyntaxError(ur'Illegal character: "%s"' % c)
|
||
+ raise SyntaxError(u'Illegal character: "%s"' % c)
|
||
string = string[skip:]
|
||
return tree
|
||
|
||
@@ -474,15 +474,15 @@ def handle_keyword(name, node, string):
|
||
node = entry
|
||
elif name == 'end':
|
||
if not string.startswith('{matrix}'):
|
||
- raise SyntaxError(ur'Expected "\end{matrix}"!')
|
||
+ raise SyntaxError(u'Expected "\\end{matrix}"!')
|
||
skip += 8
|
||
node = node.close().close().close()
|
||
elif name in ('text', 'mathrm'):
|
||
if string[0] != '{':
|
||
- raise SyntaxError(ur'Expected "\text{...}"!')
|
||
+ raise SyntaxError(u'Expected "\\text{...}"!')
|
||
i = string.find('}')
|
||
if i == -1:
|
||
- raise SyntaxError(ur'Expected "\text{...}"!')
|
||
+ raise SyntaxError(u'Expected "\\text{...}"!')
|
||
node = node.append(mtext(string[1:i]))
|
||
skip += i + 1
|
||
elif name == 'sqrt':
|
||
@@ -520,7 +520,7 @@ def handle_keyword(name, node, string):
|
||
if string.startswith(operator):
|
||
break
|
||
else:
|
||
- raise SyntaxError(ur'Expected something to negate: "\not ..."!')
|
||
+ raise SyntaxError(u'Expected something to negate: "\\not ..."!')
|
||
node = node.append(mo(negatables[operator]))
|
||
skip += len(operator)
|
||
elif name == 'mathbf':
|
||
@@ -529,12 +529,12 @@ def handle_keyword(name, node, string):
|
||
node = style
|
||
elif name == 'mathbb':
|
||
if string[0] != '{' or not string[1].isupper() or string[2] != '}':
|
||
- raise SyntaxError(ur'Expected something like "\mathbb{A}"!')
|
||
+ raise SyntaxError(u'Expected something like "\\mathbb{A}"!')
|
||
node = node.append(mi(mathbb[string[1]]))
|
||
skip += 3
|
||
elif name in ('mathscr', 'mathcal'):
|
||
if string[0] != '{' or string[2] != '}':
|
||
- raise SyntaxError(ur'Expected something like "\mathscr{A}"!')
|
||
+ raise SyntaxError(u'Expected something like "\\mathscr{A}"!')
|
||
node = node.append(mi(mathscr[string[1]]))
|
||
skip += 3
|
||
elif name == 'colon': # "normal" colon, not binary operator
|
||
@@ -559,12 +559,10 @@ def handle_keyword(name, node, string):
|
||
return node, skip
|
||
|
||
def tex2mathml(tex_math, inline=True):
|
||
- """Return string with MathML code corresponding to `tex_math`.
|
||
-
|
||
+ """Return string with MathML code corresponding to `tex_math`.
|
||
+
|
||
`inline`=True is for inline math and `inline`=False for displayed math.
|
||
"""
|
||
-
|
||
+
|
||
mathml_tree = parse_latex_math(tex_math, inline=inline)
|
||
return ''.join(mathml_tree.xml())
|
||
-
|
||
-
|
||
diff --git a/docutils/utils/math/tex2mathml_extern.py b/docutils/utils/math/tex2mathml_extern.py
|
||
index 3e7f158..ab82a78 100644
|
||
--- a/docutils/utils/math/tex2mathml_extern.py
|
||
+++ b/docutils/utils/math/tex2mathml_extern.py
|
||
@@ -141,7 +141,8 @@ def blahtexml(math_code, inline=True, reporter=None):
|
||
# self-test
|
||
|
||
if __name__ == "__main__":
|
||
- example = ur'\frac{\partial \sin^2(\alpha)}{\partial \vec r} \varpi \, \text{Grüße}'
|
||
+ example = (u'\\frac{\\partial \\sin^2(\\alpha)}{\\partial \\vec r}'
|
||
+ u'\\varpi \\, \\text{Grüße}')
|
||
# print(latexml(example).encode('utf8'))
|
||
# print(ttm(example))
|
||
print(blahtexml(example).encode('utf8'))
|
||
diff --git a/docutils/utils/smartquotes.py b/docutils/utils/smartquotes.py
|
||
index 148a4c9..b38fa47 100644
|
||
--- a/docutils/utils/smartquotes.py
|
||
+++ b/docutils/utils/smartquotes.py
|
||
@@ -658,20 +658,21 @@ def educateQuotes(text, language='en'):
|
||
text = re.sub(r"'(?=\d{2}s)", smart.apostrophe, text)
|
||
|
||
# Get most opening single quotes:
|
||
- opening_single_quotes_regex = re.compile(ur"""
|
||
+ opening_single_quotes_regex = re.compile(u"""
|
||
(# ?<= # look behind fails: requires fixed-width pattern
|
||
- \s | # a whitespace char, or
|
||
+ \\s | # a whitespace char, or
|
||
%s | # another separating char, or
|
||
| # a non-breaking space entity, or
|
||
- [–—] | # literal dashes, or
|
||
+ [\u2013 \u2014 ] | # literal dashes, or
|
||
-- | # dumb dashes, or
|
||
&[mn]dash; | # dash entities (named or
|
||
%s | # decimal or
|
||
- &\#x201[34]; # hex)
|
||
+ &\\#x201[34]; # hex)
|
||
)
|
||
' # the quote
|
||
- (?=\w) # followed by a word character
|
||
- """ % (open_class,dec_dashes), re.VERBOSE | re.UNICODE)
|
||
+ (?=\\w) # followed by a word character
|
||
+ """ % (open_class, dec_dashes), re.VERBOSE | re.UNICODE)
|
||
+
|
||
text = opening_single_quotes_regex.sub(r'\1'+smart.osquote, text)
|
||
|
||
# In many locales, single closing quotes are different from apostrophe:
|
||
@@ -691,20 +692,21 @@ def educateQuotes(text, language='en'):
|
||
text = re.sub(r"""'""", smart.osquote, text)
|
||
|
||
# Get most opening double quotes:
|
||
- opening_double_quotes_regex = re.compile(ur"""
|
||
+ opening_double_quotes_regex = re.compile(u"""
|
||
(
|
||
- \s | # a whitespace char, or
|
||
+ \\s | # a whitespace char, or
|
||
%s | # another separating char, or
|
||
| # a non-breaking space entity, or
|
||
- [–—] | # literal dashes, or
|
||
+ [\u2013 \u2014 ] | # literal dashes, or
|
||
-- | # dumb dashes, or
|
||
&[mn]dash; | # dash entities (named or
|
||
%s | # decimal or
|
||
- &\#x201[34]; # hex)
|
||
+ &\\#x201[34]; # hex)
|
||
)
|
||
" # the quote
|
||
- (?=\w) # followed by a word character
|
||
+ (?=\\w) # followed by a word character
|
||
""" % (open_class,dec_dashes), re.VERBOSE | re.UNICODE)
|
||
+
|
||
text = opening_double_quotes_regex.sub(r'\1'+smart.opquote, text)
|
||
|
||
# Double closing quotes:
|
||
diff --git a/docutils/writers/latex2e/__init__.py b/docutils/writers/latex2e/__init__.py
|
||
index 2c76b0f..636d477 100644
|
||
--- a/docutils/writers/latex2e/__init__.py
|
||
+++ b/docutils/writers/latex2e/__init__.py
|
||
@@ -704,165 +704,165 @@ class CharMaps(object):
|
||
|
||
# characters that need escaping even in `alltt` environments:
|
||
alltt = {
|
||
- ord('\\'): ur'\textbackslash{}',
|
||
- ord('{'): ur'\{',
|
||
- ord('}'): ur'\}',
|
||
+ ord('\\'): u'\\textbackslash{}',
|
||
+ ord('{'): u'\\{',
|
||
+ ord('}'): u'\\}',
|
||
}
|
||
# characters that normally need escaping:
|
||
special = {
|
||
- ord('#'): ur'\#',
|
||
- ord('$'): ur'\$',
|
||
- ord('%'): ur'\%',
|
||
- ord('&'): ur'\&',
|
||
- ord('~'): ur'\textasciitilde{}',
|
||
- ord('_'): ur'\_',
|
||
- ord('^'): ur'\textasciicircum{}',
|
||
+ ord('#'): u'\\#',
|
||
+ ord('$'): u'\\$',
|
||
+ ord('%'): u'\\%',
|
||
+ ord('&'): u'\\&',
|
||
+ ord('~'): u'\\textasciitilde{}',
|
||
+ ord('_'): u'\\_',
|
||
+ ord('^'): u'\\textasciicircum{}',
|
||
# straight double quotes are 'active' in many languages
|
||
- ord('"'): ur'\textquotedbl{}',
|
||
+ ord('"'): u'\\textquotedbl{}',
|
||
# Square brackets are ordinary chars and cannot be escaped with '\',
|
||
# so we put them in a group '{[}'. (Alternative: ensure that all
|
||
# macros with optional arguments are terminated with {} and text
|
||
# inside any optional argument is put in a group ``[{text}]``).
|
||
# Commands with optional args inside an optional arg must be put in a
|
||
# group, e.g. ``\item[{\hyperref[label]{text}}]``.
|
||
- ord('['): ur'{[}',
|
||
- ord(']'): ur'{]}',
|
||
+ ord('['): u'{[}',
|
||
+ ord(']'): u'{]}',
|
||
# the soft hyphen is unknown in 8-bit text
|
||
# and not properly handled by XeTeX
|
||
- 0x00AD: ur'\-', # SOFT HYPHEN
|
||
+ 0x00AD: u'\\-', # SOFT HYPHEN
|
||
}
|
||
# Unicode chars that are not recognized by LaTeX's utf8 encoding
|
||
unsupported_unicode = {
|
||
# TODO: ensure white space also at the beginning of a line?
|
||
- # 0x00A0: ur'\leavevmode\nobreak\vadjust{}~'
|
||
- 0x2000: ur'\enskip', # EN QUAD
|
||
- 0x2001: ur'\quad', # EM QUAD
|
||
- 0x2002: ur'\enskip', # EN SPACE
|
||
- 0x2003: ur'\quad', # EM SPACE
|
||
- 0x2008: ur'\,', # PUNCTUATION SPACE
|
||
- 0x200b: ur'\hspace{0pt}', # ZERO WIDTH SPACE
|
||
- 0x202F: ur'\,', # NARROW NO-BREAK SPACE
|
||
- # 0x02d8: ur'\\u{ }', # BREVE
|
||
- 0x2011: ur'\hbox{-}', # NON-BREAKING HYPHEN
|
||
- 0x212b: ur'\AA', # ANGSTROM SIGN
|
||
- 0x21d4: ur'\ensuremath{\Leftrightarrow}',
|
||
+ # 0x00A0: u'\\leavevmode\\nobreak\\vadjust{}~'
|
||
+ 0x2000: u'\\enskip', # EN QUAD
|
||
+ 0x2001: u'\\quad', # EM QUAD
|
||
+ 0x2002: u'\\enskip', # EN SPACE
|
||
+ 0x2003: u'\\quad', # EM SPACE
|
||
+ 0x2008: u'\\,', # PUNCTUATION SPACE
|
||
+ 0x200b: u'\\hspace{0pt}', # ZERO WIDTH SPACE
|
||
+ 0x202F: u'\\,', # NARROW NO-BREAK SPACE
|
||
+ # 0x02d8: u'\\\u{ }', # BREVE
|
||
+ 0x2011: u'\\hbox{-}', # NON-BREAKING HYPHEN
|
||
+ 0x212b: u'\\AA', # ANGSTROM SIGN
|
||
+ 0x21d4: u'\\ensuremath{\\Leftrightarrow}',
|
||
# Docutils footnote symbols:
|
||
- 0x2660: ur'\ensuremath{\spadesuit}',
|
||
- 0x2663: ur'\ensuremath{\clubsuit}',
|
||
- 0xfb00: ur'ff', # LATIN SMALL LIGATURE FF
|
||
- 0xfb01: ur'fi', # LATIN SMALL LIGATURE FI
|
||
- 0xfb02: ur'fl', # LATIN SMALL LIGATURE FL
|
||
- 0xfb03: ur'ffi', # LATIN SMALL LIGATURE FFI
|
||
- 0xfb04: ur'ffl', # LATIN SMALL LIGATURE FFL
|
||
+ 0x2660: u'\\ensuremath{\\spadesuit}',
|
||
+ 0x2663: u'\\ensuremath{\\clubsuit}',
|
||
+ 0xfb00: u'ff', # LATIN SMALL LIGATURE FF
|
||
+ 0xfb01: u'fi', # LATIN SMALL LIGATURE FI
|
||
+ 0xfb02: u'fl', # LATIN SMALL LIGATURE FL
|
||
+ 0xfb03: u'ffi', # LATIN SMALL LIGATURE FFI
|
||
+ 0xfb04: u'ffl', # LATIN SMALL LIGATURE FFL
|
||
}
|
||
# Unicode chars that are recognized by LaTeX's utf8 encoding
|
||
utf8_supported_unicode = {
|
||
- 0x00A0: ur'~', # NO-BREAK SPACE
|
||
- 0x00AB: ur'\guillemotleft{}', # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||
- 0x00bb: ur'\guillemotright{}', # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||
- 0x200C: ur'\textcompwordmark{}', # ZERO WIDTH NON-JOINER
|
||
- 0x2013: ur'\textendash{}',
|
||
- 0x2014: ur'\textemdash{}',
|
||
- 0x2018: ur'\textquoteleft{}',
|
||
- 0x2019: ur'\textquoteright{}',
|
||
- 0x201A: ur'\quotesinglbase{}', # SINGLE LOW-9 QUOTATION MARK
|
||
- 0x201C: ur'\textquotedblleft{}',
|
||
- 0x201D: ur'\textquotedblright{}',
|
||
- 0x201E: ur'\quotedblbase{}', # DOUBLE LOW-9 QUOTATION MARK
|
||
- 0x2030: ur'\textperthousand{}', # PER MILLE SIGN
|
||
- 0x2031: ur'\textpertenthousand{}', # PER TEN THOUSAND SIGN
|
||
- 0x2039: ur'\guilsinglleft{}',
|
||
- 0x203A: ur'\guilsinglright{}',
|
||
- 0x2423: ur'\textvisiblespace{}', # OPEN BOX
|
||
- 0x2020: ur'\dag{}',
|
||
- 0x2021: ur'\ddag{}',
|
||
- 0x2026: ur'\dots{}',
|
||
- 0x2122: ur'\texttrademark{}',
|
||
+ 0x00A0: u'~', # NO-BREAK SPACE
|
||
+ 0x00AB: u'\\guillemotleft{}', # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||
+ 0x00bb: u'\\guillemotright{}', # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||
+ 0x200C: u'\\textcompwordmark{}', # ZERO WIDTH NON-JOINER
|
||
+ 0x2013: u'\\textendash{}',
|
||
+ 0x2014: u'\\textemdash{}',
|
||
+ 0x2018: u'\\textquoteleft{}',
|
||
+ 0x2019: u'\\textquoteright{}',
|
||
+ 0x201A: u'\\quotesinglbase{}', # SINGLE LOW-9 QUOTATION MARK
|
||
+ 0x201C: u'\\textquotedblleft{}',
|
||
+ 0x201D: u'\\textquotedblright{}',
|
||
+ 0x201E: u'\\quotedblbase{}', # DOUBLE LOW-9 QUOTATION MARK
|
||
+ 0x2030: u'\\textperthousand{}', # PER MILLE SIGN
|
||
+ 0x2031: u'\\textpertenthousand{}', # PER TEN THOUSAND SIGN
|
||
+ 0x2039: u'\\guilsinglleft{}',
|
||
+ 0x203A: u'\\guilsinglright{}',
|
||
+ 0x2423: u'\\textvisiblespace{}', # OPEN BOX
|
||
+ 0x2020: u'\\dag{}',
|
||
+ 0x2021: u'\\ddag{}',
|
||
+ 0x2026: u'\\dots{}',
|
||
+ 0x2122: u'\\texttrademark{}',
|
||
}
|
||
# recognized with 'utf8', if textcomp is loaded
|
||
textcomp = {
|
||
# Latin-1 Supplement
|
||
- 0x00a2: ur'\textcent{}', # ¢ CENT SIGN
|
||
- 0x00a4: ur'\textcurrency{}', # ¤ CURRENCY SYMBOL
|
||
- 0x00a5: ur'\textyen{}', # ¥ YEN SIGN
|
||
- 0x00a6: ur'\textbrokenbar{}', # ¦ BROKEN BAR
|
||
- 0x00a7: ur'\textsection{}', # § SECTION SIGN
|
||
- 0x00a8: ur'\textasciidieresis{}', # ¨ DIAERESIS
|
||
- 0x00a9: ur'\textcopyright{}', # © COPYRIGHT SIGN
|
||
- 0x00aa: ur'\textordfeminine{}', # ª FEMININE ORDINAL INDICATOR
|
||
- 0x00ac: ur'\textlnot{}', # ¬ NOT SIGN
|
||
- 0x00ae: ur'\textregistered{}', # ® REGISTERED SIGN
|
||
- 0x00af: ur'\textasciimacron{}', # ¯ MACRON
|
||
- 0x00b0: ur'\textdegree{}', # ° DEGREE SIGN
|
||
- 0x00b1: ur'\textpm{}', # ± PLUS-MINUS SIGN
|
||
- 0x00b2: ur'\texttwosuperior{}', # ² SUPERSCRIPT TWO
|
||
- 0x00b3: ur'\textthreesuperior{}', # ³ SUPERSCRIPT THREE
|
||
- 0x00b4: ur'\textasciiacute{}', # ´ ACUTE ACCENT
|
||
- 0x00b5: ur'\textmu{}', # µ MICRO SIGN
|
||
- 0x00b6: ur'\textparagraph{}', # ¶ PILCROW SIGN # != \textpilcrow
|
||
- 0x00b9: ur'\textonesuperior{}', # ¹ SUPERSCRIPT ONE
|
||
- 0x00ba: ur'\textordmasculine{}', # º MASCULINE ORDINAL INDICATOR
|
||
- 0x00bc: ur'\textonequarter{}', # 1/4 FRACTION
|
||
- 0x00bd: ur'\textonehalf{}', # 1/2 FRACTION
|
||
- 0x00be: ur'\textthreequarters{}', # 3/4 FRACTION
|
||
- 0x00d7: ur'\texttimes{}', # × MULTIPLICATION SIGN
|
||
- 0x00f7: ur'\textdiv{}', # ÷ DIVISION SIGN
|
||
+ 0x00a2: u'\\textcent{}', # ¢ CENT SIGN
|
||
+ 0x00a4: u'\\textcurrency{}', # ¤ CURRENCY SYMBOL
|
||
+ 0x00a5: u'\\textyen{}', # ¥ YEN SIGN
|
||
+ 0x00a6: u'\\textbrokenbar{}', # ¦ BROKEN BAR
|
||
+ 0x00a7: u'\\textsection{}', # § SECTION SIGN
|
||
+ 0x00a8: u'\\textasciidieresis{}', # ¨ DIAERESIS
|
||
+ 0x00a9: u'\\textcopyright{}', # © COPYRIGHT SIGN
|
||
+ 0x00aa: u'\\textordfeminine{}', # ª FEMININE ORDINAL INDICATOR
|
||
+ 0x00ac: u'\\textlnot{}', # ¬ NOT SIGN
|
||
+ 0x00ae: u'\\textregistered{}', # ® REGISTERED SIGN
|
||
+ 0x00af: u'\\textasciimacron{}', # ¯ MACRON
|
||
+ 0x00b0: u'\\textdegree{}', # ° DEGREE SIGN
|
||
+ 0x00b1: u'\\textpm{}', # ± PLUS-MINUS SIGN
|
||
+ 0x00b2: u'\\texttwosuperior{}', # ² SUPERSCRIPT TWO
|
||
+ 0x00b3: u'\\textthreesuperior{}', # ³ SUPERSCRIPT THREE
|
||
+ 0x00b4: u'\\textasciiacute{}', # ´ ACUTE ACCENT
|
||
+ 0x00b5: u'\\textmu{}', # µ MICRO SIGN
|
||
+ 0x00b6: u'\\textparagraph{}', # ¶ PILCROW SIGN # != \textpilcrow
|
||
+ 0x00b9: u'\\textonesuperior{}', # ¹ SUPERSCRIPT ONE
|
||
+ 0x00ba: u'\\textordmasculine{}', # º MASCULINE ORDINAL INDICATOR
|
||
+ 0x00bc: u'\\textonequarter{}', # 1/4 FRACTION
|
||
+ 0x00bd: u'\\textonehalf{}', # 1/2 FRACTION
|
||
+ 0x00be: u'\\textthreequarters{}', # 3/4 FRACTION
|
||
+ 0x00d7: u'\\texttimes{}', # × MULTIPLICATION SIGN
|
||
+ 0x00f7: u'\\textdiv{}', # ÷ DIVISION SIGN
|
||
# others
|
||
- 0x0192: ur'\textflorin{}', # LATIN SMALL LETTER F WITH HOOK
|
||
- 0x02b9: ur'\textasciiacute{}', # MODIFIER LETTER PRIME
|
||
- 0x02ba: ur'\textacutedbl{}', # MODIFIER LETTER DOUBLE PRIME
|
||
- 0x2016: ur'\textbardbl{}', # DOUBLE VERTICAL LINE
|
||
- 0x2022: ur'\textbullet{}', # BULLET
|
||
- 0x2032: ur'\textasciiacute{}', # PRIME
|
||
- 0x2033: ur'\textacutedbl{}', # DOUBLE PRIME
|
||
- 0x2035: ur'\textasciigrave{}', # REVERSED PRIME
|
||
- 0x2036: ur'\textgravedbl{}', # REVERSED DOUBLE PRIME
|
||
- 0x203b: ur'\textreferencemark{}', # REFERENCE MARK
|
||
- 0x203d: ur'\textinterrobang{}', # INTERROBANG
|
||
- 0x2044: ur'\textfractionsolidus{}', # FRACTION SLASH
|
||
- 0x2045: ur'\textlquill{}', # LEFT SQUARE BRACKET WITH QUILL
|
||
- 0x2046: ur'\textrquill{}', # RIGHT SQUARE BRACKET WITH QUILL
|
||
- 0x2052: ur'\textdiscount{}', # COMMERCIAL MINUS SIGN
|
||
- 0x20a1: ur'\textcolonmonetary{}', # COLON SIGN
|
||
- 0x20a3: ur'\textfrenchfranc{}', # FRENCH FRANC SIGN
|
||
- 0x20a4: ur'\textlira{}', # LIRA SIGN
|
||
- 0x20a6: ur'\textnaira{}', # NAIRA SIGN
|
||
- 0x20a9: ur'\textwon{}', # WON SIGN
|
||
- 0x20ab: ur'\textdong{}', # DONG SIGN
|
||
- 0x20ac: ur'\texteuro{}', # EURO SIGN
|
||
- 0x20b1: ur'\textpeso{}', # PESO SIGN
|
||
- 0x20b2: ur'\textguarani{}', # GUARANI SIGN
|
||
- 0x2103: ur'\textcelsius{}', # DEGREE CELSIUS
|
||
- 0x2116: ur'\textnumero{}', # NUMERO SIGN
|
||
- 0x2117: ur'\textcircledP{}', # SOUND RECORDING COYRIGHT
|
||
- 0x211e: ur'\textrecipe{}', # PRESCRIPTION TAKE
|
||
- 0x2120: ur'\textservicemark{}', # SERVICE MARK
|
||
- 0x2122: ur'\texttrademark{}', # TRADE MARK SIGN
|
||
- 0x2126: ur'\textohm{}', # OHM SIGN
|
||
- 0x2127: ur'\textmho{}', # INVERTED OHM SIGN
|
||
- 0x212e: ur'\textestimated{}', # ESTIMATED SYMBOL
|
||
- 0x2190: ur'\textleftarrow{}', # LEFTWARDS ARROW
|
||
- 0x2191: ur'\textuparrow{}', # UPWARDS ARROW
|
||
- 0x2192: ur'\textrightarrow{}', # RIGHTWARDS ARROW
|
||
- 0x2193: ur'\textdownarrow{}', # DOWNWARDS ARROW
|
||
- 0x2212: ur'\textminus{}', # MINUS SIGN
|
||
- 0x2217: ur'\textasteriskcentered{}', # ASTERISK OPERATOR
|
||
- 0x221a: ur'\textsurd{}', # SQUARE ROOT
|
||
- 0x2422: ur'\textblank{}', # BLANK SYMBOL
|
||
- 0x25e6: ur'\textopenbullet{}', # WHITE BULLET
|
||
- 0x25ef: ur'\textbigcircle{}', # LARGE CIRCLE
|
||
- 0x266a: ur'\textmusicalnote{}', # EIGHTH NOTE
|
||
- 0x26ad: ur'\textmarried{}', # MARRIAGE SYMBOL
|
||
- 0x26ae: ur'\textdivorced{}', # DIVORCE SYMBOL
|
||
- 0x27e8: ur'\textlangle{}', # MATHEMATICAL LEFT ANGLE BRACKET
|
||
- 0x27e9: ur'\textrangle{}', # MATHEMATICAL RIGHT ANGLE BRACKET
|
||
+ 0x0192: u'\\textflorin{}', # LATIN SMALL LETTER F WITH HOOK
|
||
+ 0x02b9: u'\\textasciiacute{}', # MODIFIER LETTER PRIME
|
||
+ 0x02ba: u'\\textacutedbl{}', # MODIFIER LETTER DOUBLE PRIME
|
||
+ 0x2016: u'\\textbardbl{}', # DOUBLE VERTICAL LINE
|
||
+ 0x2022: u'\\textbullet{}', # BULLET
|
||
+ 0x2032: u'\\textasciiacute{}', # PRIME
|
||
+ 0x2033: u'\\textacutedbl{}', # DOUBLE PRIME
|
||
+ 0x2035: u'\\textasciigrave{}', # REVERSED PRIME
|
||
+ 0x2036: u'\\textgravedbl{}', # REVERSED DOUBLE PRIME
|
||
+ 0x203b: u'\\textreferencemark{}', # REFERENCE MARK
|
||
+ 0x203d: u'\\textinterrobang{}', # INTERROBANG
|
||
+ 0x2044: u'\\textfractionsolidus{}', # FRACTION SLASH
|
||
+ 0x2045: u'\\textlquill{}', # LEFT SQUARE BRACKET WITH QUILL
|
||
+ 0x2046: u'\\textrquill{}', # RIGHT SQUARE BRACKET WITH QUILL
|
||
+ 0x2052: u'\\textdiscount{}', # COMMERCIAL MINUS SIGN
|
||
+ 0x20a1: u'\\textcolonmonetary{}', # COLON SIGN
|
||
+ 0x20a3: u'\\textfrenchfranc{}', # FRENCH FRANC SIGN
|
||
+ 0x20a4: u'\\textlira{}', # LIRA SIGN
|
||
+ 0x20a6: u'\\textnaira{}', # NAIRA SIGN
|
||
+ 0x20a9: u'\\textwon{}', # WON SIGN
|
||
+ 0x20ab: u'\\textdong{}', # DONG SIGN
|
||
+ 0x20ac: u'\\texteuro{}', # EURO SIGN
|
||
+ 0x20b1: u'\\textpeso{}', # PESO SIGN
|
||
+ 0x20b2: u'\\textguarani{}', # GUARANI SIGN
|
||
+ 0x2103: u'\\textcelsius{}', # DEGREE CELSIUS
|
||
+ 0x2116: u'\\textnumero{}', # NUMERO SIGN
|
||
+ 0x2117: u'\\textcircledP{}', # SOUND RECORDING COYRIGHT
|
||
+ 0x211e: u'\\textrecipe{}', # PRESCRIPTION TAKE
|
||
+ 0x2120: u'\\textservicemark{}', # SERVICE MARK
|
||
+ 0x2122: u'\\texttrademark{}', # TRADE MARK SIGN
|
||
+ 0x2126: u'\\textohm{}', # OHM SIGN
|
||
+ 0x2127: u'\\textmho{}', # INVERTED OHM SIGN
|
||
+ 0x212e: u'\\textestimated{}', # ESTIMATED SYMBOL
|
||
+ 0x2190: u'\\textleftarrow{}', # LEFTWARDS ARROW
|
||
+ 0x2191: u'\\textuparrow{}', # UPWARDS ARROW
|
||
+ 0x2192: u'\\textrightarrow{}', # RIGHTWARDS ARROW
|
||
+ 0x2193: u'\\textdownarrow{}', # DOWNWARDS ARROW
|
||
+ 0x2212: u'\\textminus{}', # MINUS SIGN
|
||
+ 0x2217: u'\\textasteriskcentered{}', # ASTERISK OPERATOR
|
||
+ 0x221a: u'\\textsurd{}', # SQUARE ROOT
|
||
+ 0x2422: u'\\textblank{}', # BLANK SYMBOL
|
||
+ 0x25e6: u'\\textopenbullet{}', # WHITE BULLET
|
||
+ 0x25ef: u'\\textbigcircle{}', # LARGE CIRCLE
|
||
+ 0x266a: u'\\textmusicalnote{}', # EIGHTH NOTE
|
||
+ 0x26ad: u'\\textmarried{}', # MARRIAGE SYMBOL
|
||
+ 0x26ae: u'\\textdivorced{}', # DIVORCE SYMBOL
|
||
+ 0x27e8: u'\\textlangle{}', # MATHEMATICAL LEFT ANGLE BRACKET
|
||
+ 0x27e9: u'\\textrangle{}', # MATHEMATICAL RIGHT ANGLE BRACKET
|
||
}
|
||
# Unicode chars that require a feature/package to render
|
||
pifont = {
|
||
- 0x2665: ur'\ding{170}', # black heartsuit
|
||
- 0x2666: ur'\ding{169}', # black diamondsuit
|
||
- 0x2713: ur'\ding{51}', # check mark
|
||
- 0x2717: ur'\ding{55}', # check mark
|
||
+ 0x2665: u'\\ding{170}', # black heartsuit
|
||
+ 0x2666: u'\\ding{169}', # black diamondsuit
|
||
+ 0x2713: u'\\ding{51}', # check mark
|
||
+ 0x2717: u'\\ding{55}', # check mark
|
||
}
|
||
# TODO: greek alphabet ... ?
|
||
# see also LaTeX codec
|
||
@@ -1511,14 +1511,14 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
||
# the backslash doesn't work, so we use a mirrored slash.
|
||
# \reflectbox is provided by graphicx:
|
||
self.requirements['graphicx'] = self.graphicx_package
|
||
- table[ord('\\')] = ur'\reflectbox{/}'
|
||
+ table[ord('\\')] = u'\\reflectbox{/}'
|
||
# * ``< | >`` come out as different chars (except for cmtt):
|
||
else:
|
||
- table[ord('|')] = ur'\textbar{}'
|
||
- table[ord('<')] = ur'\textless{}'
|
||
- table[ord('>')] = ur'\textgreater{}'
|
||
+ table[ord('|')] = u'\\textbar{}'
|
||
+ table[ord('<')] = u'\\textless{}'
|
||
+ table[ord('>')] = u'\\textgreater{}'
|
||
if self.insert_non_breaking_blanks:
|
||
- table[ord(' ')] = ur'~'
|
||
+ table[ord(' ')] = u'~'
|
||
# tab chars may occur in included files (literal or code)
|
||
# quick-and-dirty replacement with spaces
|
||
# (for better results use `--literal-block-env=lstlisting`)
|
||
@@ -2618,7 +2618,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
||
math_code = '\n'.join([math_code] + self.ids_to_labels(node))
|
||
if math_env == '$':
|
||
if self.alltt:
|
||
- wrapper = ur'\(%s\)'
|
||
+ wrapper = u'\\(%s\\)'
|
||
else:
|
||
wrapper = u'$%s$'
|
||
else:
|
||
@@ -2769,9 +2769,9 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
||
|
||
def visit_reference(self, node):
|
||
# We need to escape #, \, and % if we use the URL in a command.
|
||
- special_chars = {ord('#'): ur'\#',
|
||
- ord('%'): ur'\%',
|
||
- ord('\\'): ur'\\',
|
||
+ special_chars = {ord('#'): u'\\#',
|
||
+ ord('%'): u'\\%',
|
||
+ ord('\\'): u'\\\\',
|
||
}
|
||
# external reference (URL)
|
||
if 'refuri' in node:
|
||
diff --git a/docutils/writers/manpage.py b/docutils/writers/manpage.py
|
||
index 8bb025c..ed163de 100644
|
||
--- a/docutils/writers/manpage.py
|
||
+++ b/docutils/writers/manpage.py
|
||
@@ -284,10 +284,10 @@ class Translator(nodes.NodeVisitor):
|
||
text = node.astext()
|
||
text = text.replace('\\','\\e')
|
||
replace_pairs = [
|
||
- (u'-', ur'\-'),
|
||
- (u'\'', ur'\(aq'),
|
||
- (u'´', ur'\''),
|
||
- (u'`', ur'\(ga'),
|
||
+ (u'-', u'\\-'),
|
||
+ (u'\'', u'\\(aq'),
|
||
+ (u'´', u"\\'"),
|
||
+ (u'`', u'\\(ga'),
|
||
]
|
||
for (in_char, out_markup) in replace_pairs:
|
||
text = text.replace(in_char, out_markup)
|
||
diff --git a/test/test_parsers/test_rst/test_east_asian_text.py b/test/test_parsers/test_rst/test_east_asian_text.py
|
||
index d819ef8..a13c969 100755
|
||
--- a/test/test_parsers/test_rst/test_east_asian_text.py
|
||
+++ b/test/test_parsers/test_rst/test_east_asian_text.py
|
||
@@ -50,12 +50,12 @@ u"""\
|
||
タイトル2
|
||
========
|
||
"""],
|
||
-[ur"""
|
||
+[u"""
|
||
+-----------------------+
|
||
| * ヒョウ:ダイ1ギョウ |
|
||
| * ダイ2ギョウ |
|
||
+-----------------------+
|
||
-| \* ダイ1ギョウ |
|
||
+| \\* ダイ1ギョウ |
|
||
| * ダイ2ギョウ |
|
||
+-----------------------+
|
||
""",
|
||
diff --git a/tools/dev/generate_punctuation_chars.py b/tools/dev/generate_punctuation_chars.py
|
||
index fbb72c0..cfe97df 100644
|
||
--- a/tools/dev/generate_punctuation_chars.py
|
||
+++ b/tools/dev/generate_punctuation_chars.py
|
||
@@ -375,10 +375,16 @@ if __name__ == '__main__':
|
||
|
||
print_differences(openers, o, 'openers')
|
||
if o_wide:
|
||
- print('+ openers-wide = ur"""%s"""' % o_wide.encode('utf8'))
|
||
+ if sys.version_info < (3, 0):
|
||
+ print('+ openers-wide = ur"""%s"""' % o_wide.encode('utf8'))
|
||
+ else:
|
||
+ print('+ openers-wide = r"""%s"""' % o_wide.encode('utf8'))
|
||
print_differences(closers, c, 'closers')
|
||
if c_wide:
|
||
- print('+ closers-wide = ur"""%s"""' % c_wide.encode('utf8'))
|
||
+ if sys.version_info < (3, 0):
|
||
+ print('+ closers-wide = ur"""%s"""' % c_wide.encode('utf8'))
|
||
+ else:
|
||
+ print('+ closers-wide = r"""%s"""' % c_wide.encode('utf8'))
|
||
|
||
print_differences(delimiters, d + d_wide, 'delimiters')
|
||
print_differences(closing_delimiters, cd, 'closing_delimiters')
|
||
--
|
||
2.24.0.375.geb5ae68d41
|
||
|