mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #2052: Add charset parameter to HtmlDiff.make_file().
This commit is contained in:
parent
fbd011dd49
commit
102029dfd6
6 changed files with 63 additions and 10 deletions
|
@ -104,7 +104,8 @@ diffs. For comparing directories and files, see also, the :mod:`filecmp` module.
|
||||||
|
|
||||||
The following methods are public:
|
The following methods are public:
|
||||||
|
|
||||||
.. method:: make_file(fromlines, tolines, fromdesc='', todesc='', context=False, numlines=5)
|
.. method:: make_file(fromlines, tolines, fromdesc='', todesc='', context=False, \
|
||||||
|
numlines=5, *, charset='utf-8')
|
||||||
|
|
||||||
Compares *fromlines* and *tolines* (lists of strings) and returns a string which
|
Compares *fromlines* and *tolines* (lists of strings) and returns a string which
|
||||||
is a complete HTML file containing a table showing line by line differences with
|
is a complete HTML file containing a table showing line by line differences with
|
||||||
|
@ -123,6 +124,10 @@ diffs. For comparing directories and files, see also, the :mod:`filecmp` module.
|
||||||
the next difference highlight at the top of the browser without any leading
|
the next difference highlight at the top of the browser without any leading
|
||||||
context).
|
context).
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
*charset* keyword-only argument was added. The default charset of
|
||||||
|
HTML document changed from ``'ISO-8859-1'`` to ``'utf-8'``.
|
||||||
|
|
||||||
.. method:: make_table(fromlines, tolines, fromdesc='', todesc='', context=False, numlines=5)
|
.. method:: make_table(fromlines, tolines, fromdesc='', todesc='', context=False, numlines=5)
|
||||||
|
|
||||||
Compares *fromlines* and *tolines* (lists of strings) and returns a string which
|
Compares *fromlines* and *tolines* (lists of strings) and returns a string which
|
||||||
|
|
|
@ -225,6 +225,14 @@ contextlib
|
||||||
don't provide any options to redirect it.
|
don't provide any options to redirect it.
|
||||||
(Contributed by Berker Peksag in :issue:`22389`.)
|
(Contributed by Berker Peksag in :issue:`22389`.)
|
||||||
|
|
||||||
|
difflib
|
||||||
|
-------
|
||||||
|
|
||||||
|
* The charset of the HTML document generated by :meth:`difflib.HtmlDiff.make_file`
|
||||||
|
can now be customized by using *charset* keyword-only parameter. The default
|
||||||
|
charset of HTML document changed from ``'ISO-8859-1'`` to ``'utf-8'``.
|
||||||
|
(Contributed by Berker Peksag in :issue:`2052`.)
|
||||||
|
|
||||||
distutils
|
distutils
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
|
|
@ -1598,7 +1598,7 @@ _file_template = """
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type"
|
<meta http-equiv="Content-Type"
|
||||||
content="text/html; charset=ISO-8859-1" />
|
content="text/html; charset=%(charset)s" />
|
||||||
<title></title>
|
<title></title>
|
||||||
<style type="text/css">%(styles)s
|
<style type="text/css">%(styles)s
|
||||||
</style>
|
</style>
|
||||||
|
@ -1685,8 +1685,8 @@ class HtmlDiff(object):
|
||||||
self._linejunk = linejunk
|
self._linejunk = linejunk
|
||||||
self._charjunk = charjunk
|
self._charjunk = charjunk
|
||||||
|
|
||||||
def make_file(self,fromlines,tolines,fromdesc='',todesc='',context=False,
|
def make_file(self, fromlines, tolines, fromdesc='', todesc='',
|
||||||
numlines=5):
|
context=False, numlines=5, *, charset='utf-8'):
|
||||||
"""Returns HTML file of side by side comparison with change highlights
|
"""Returns HTML file of side by side comparison with change highlights
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
@ -1701,13 +1701,16 @@ class HtmlDiff(object):
|
||||||
When context is False, controls the number of lines to place
|
When context is False, controls the number of lines to place
|
||||||
the "next" link anchors before the next change (so click of
|
the "next" link anchors before the next change (so click of
|
||||||
"next" link jumps to just before the change).
|
"next" link jumps to just before the change).
|
||||||
|
charset -- charset of the HTML document
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return self._file_template % dict(
|
return (self._file_template % dict(
|
||||||
styles = self._styles,
|
styles=self._styles,
|
||||||
legend = self._legend,
|
legend=self._legend,
|
||||||
table = self.make_table(fromlines,tolines,fromdesc,todesc,
|
table=self.make_table(fromlines, tolines, fromdesc, todesc,
|
||||||
context=context,numlines=numlines))
|
context=context, numlines=numlines),
|
||||||
|
charset=charset
|
||||||
|
)).encode(charset, 'xmlcharrefreplace').decode(charset)
|
||||||
|
|
||||||
def _tab_newline_replace(self,fromlines,tolines):
|
def _tab_newline_replace(self,fromlines,tolines):
|
||||||
"""Returns from/to line lists with tabs expanded and newlines removed.
|
"""Returns from/to line lists with tabs expanded and newlines removed.
|
||||||
|
|
|
@ -107,6 +107,20 @@ patch914575_to1 = """
|
||||||
5. Flat is better than nested.
|
5. Flat is better than nested.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
patch914575_nonascii_from1 = """
|
||||||
|
1. Beautiful is beTTer than ugly.
|
||||||
|
2. Explicit is better than ımplıcıt.
|
||||||
|
3. Simple is better than complex.
|
||||||
|
4. Complex is better than complicated.
|
||||||
|
"""
|
||||||
|
|
||||||
|
patch914575_nonascii_to1 = """
|
||||||
|
1. Beautiful is better than ügly.
|
||||||
|
3. Sımple is better than complex.
|
||||||
|
4. Complicated is better than cömplex.
|
||||||
|
5. Flat is better than nested.
|
||||||
|
"""
|
||||||
|
|
||||||
patch914575_from2 = """
|
patch914575_from2 = """
|
||||||
\t\tLine 1: preceeded by from:[tt] to:[ssss]
|
\t\tLine 1: preceeded by from:[tt] to:[ssss]
|
||||||
\t\tLine 2: preceeded by from:[sstt] to:[sssst]
|
\t\tLine 2: preceeded by from:[sstt] to:[sssst]
|
||||||
|
@ -223,6 +237,27 @@ class TestSFpatches(unittest.TestCase):
|
||||||
new = [(i%2 and "K:%d" or "V:B:%d") % i for i in range(limit*2)]
|
new = [(i%2 and "K:%d" or "V:B:%d") % i for i in range(limit*2)]
|
||||||
difflib.SequenceMatcher(None, old, new).get_opcodes()
|
difflib.SequenceMatcher(None, old, new).get_opcodes()
|
||||||
|
|
||||||
|
def test_make_file_default_charset(self):
|
||||||
|
html_diff = difflib.HtmlDiff()
|
||||||
|
output = html_diff.make_file(patch914575_from1.splitlines(),
|
||||||
|
patch914575_to1.splitlines())
|
||||||
|
self.assertIn('content="text/html; charset=utf-8"', output)
|
||||||
|
|
||||||
|
def test_make_file_iso88591_charset(self):
|
||||||
|
html_diff = difflib.HtmlDiff()
|
||||||
|
output = html_diff.make_file(patch914575_from1.splitlines(),
|
||||||
|
patch914575_to1.splitlines(),
|
||||||
|
charset='iso-8859-1')
|
||||||
|
self.assertIn('content="text/html; charset=iso-8859-1"', output)
|
||||||
|
|
||||||
|
def test_make_file_usascii_charset_with_nonascii_input(self):
|
||||||
|
html_diff = difflib.HtmlDiff()
|
||||||
|
output = html_diff.make_file(patch914575_nonascii_from1.splitlines(),
|
||||||
|
patch914575_nonascii_to1.splitlines(),
|
||||||
|
charset='us-ascii')
|
||||||
|
self.assertIn('content="text/html; charset=us-ascii"', output)
|
||||||
|
self.assertIn('ımplıcıt', output)
|
||||||
|
|
||||||
|
|
||||||
class TestOutputFormat(unittest.TestCase):
|
class TestOutputFormat(unittest.TestCase):
|
||||||
def test_tab_delimiter(self):
|
def test_tab_delimiter(self):
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type"
|
<meta http-equiv="Content-Type"
|
||||||
content="text/html; charset=ISO-8859-1" />
|
content="text/html; charset=utf-8" />
|
||||||
<title></title>
|
<title></title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
table.diff {font-family:Courier; border:medium;}
|
table.diff {font-family:Courier; border:medium;}
|
||||||
|
|
|
@ -18,6 +18,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #2052: Add charset parameter to HtmlDiff.make_file().
|
||||||
|
|
||||||
- Issue #23138: Fixed parsing cookies with absent keys or values in cookiejar.
|
- Issue #23138: Fixed parsing cookies with absent keys or values in cookiejar.
|
||||||
Patch by Demian Brecht.
|
Patch by Demian Brecht.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue