3030 'Differ' ,'IS_CHARACTER_JUNK' , 'IS_LINE_JUNK' , 'context_diff' ,
3131 'unified_diff' , 'diff_bytes' , 'HtmlDiff' , 'Match' ]
3232
33+ from _colorize import can_colorize , get_theme
3334from heapq import nlargest as _nlargest
3435from collections import namedtuple as _namedtuple
3536from types import GenericAlias
@@ -1137,14 +1138,10 @@ def unified_diff(a, b, fromfile='', tofile='', fromfiledate='',
11371138 four
11381139 """
11391140
1140- # {tag: ANSI color escape code}
1141- colors = {
1142- "delete" : "\033 [31m" , # red
1143- "insert" : "\033 [32m" , # green
1144- "header" : "\033 [1m" , # bold / increased intensity
1145- "hunk" : "\033 [36m" , # cyan
1146- }
1147- reset = "\033 [m"
1141+ if color and can_colorize ():
1142+ t = get_theme (force_color = True ).difflib
1143+ else :
1144+ t = get_theme (force_no_color = True ).difflib
11481145
11491146 _check_types (a , b , fromfile , tofile , fromfiledate , tofiledate , lineterm )
11501147 started = False
@@ -1153,16 +1150,13 @@ def unified_diff(a, b, fromfile='', tofile='', fromfiledate='',
11531150 started = True
11541151 fromdate = '\t {}' .format (fromfiledate ) if fromfiledate else ''
11551152 todate = '\t {}' .format (tofiledate ) if tofiledate else ''
1156- _line = '--- {}{}{}' .format (fromfile , fromdate , lineterm )
1157- yield colors ["header" ] + _line + reset if color else _line
1158- _line = '+++ {}{}{}' .format (tofile , todate , lineterm )
1159- yield colors ["header" ] + _line + reset if color else _line
1153+ yield '{}--- {}{}{}{}' .format (t .header , fromfile , fromdate , lineterm , t .reset )
1154+ yield '{}+++ {}{}{}{}' .format (t .header , tofile , todate , lineterm , t .reset )
11601155
11611156 first , last = group [0 ], group [- 1 ]
11621157 file1_range = _format_range_unified (first [1 ], last [2 ])
11631158 file2_range = _format_range_unified (first [3 ], last [4 ])
1164- _line = '@@ -{} +{} @@{}' .format (file1_range , file2_range , lineterm )
1165- yield colors ["hunk" ] + _line + reset if color else _line
1159+ yield '{}@@ -{} +{} @@{}{}' .format (t .hunk , file1_range , file2_range , lineterm , t .reset )
11661160
11671161 for tag , i1 , i2 , j1 , j2 in group :
11681162 if tag == 'equal' :
@@ -1171,12 +1165,10 @@ def unified_diff(a, b, fromfile='', tofile='', fromfiledate='',
11711165 continue
11721166 if tag in {'replace' , 'delete' }:
11731167 for line in a [i1 :i2 ]:
1174- _line = '-' + line
1175- yield colors ["delete" ] + _line + reset if color else _line
1168+ yield f'{ t .delete } -{ line } { t .reset } '
11761169 if tag in {'replace' , 'insert' }:
11771170 for line in b [j1 :j2 ]:
1178- _line = '+' + line
1179- yield colors ["insert" ] + _line + reset if color else _line
1171+ yield f'{ t .insert } +{ line } { t .reset } '
11801172
11811173
11821174########################################################################
0 commit comments