+def html_diff_block(old, new, filename, lexer, hide_filename=True, context_len=5, fold_min=5):
+ lexer.stripnl = False # Make pygments preserve leading and trailing empty lines.
+ code = html_diff_content(old, new, lexer, context_len=context_len, fold_min=fold_min)
+ filename = f'
'
+ if hide_filename:
+ filename = ''
+ return textwrap.dedent(f'''
''')
@@ -647,8 +674,11 @@ def cli():
parser.add_argument('-L', '--list-lexers', action='store_true', help='List available lexers for -l/--lexer')
parser.add_argument('-t', '--pagetitle', help='Override page title of output HTML file')
parser.add_argument('-o', '--output', default=sys.stdout, type=argparse.FileType('w'), help='Name of output file (default: stdout)')
+ parser.add_argument('--context-len', type=int, default=5, help='Number of lines to always print around changes without folding')
+ parser.add_argument('--fold-min', type=int, default=5, help='Minimum number of unchanged lines beyond which to fold')
parser.add_argument('--header', action='store_true', help='Only output HTML header with stylesheets and stuff, and no diff')
parser.add_argument('--content', action='store_true', help='Only output HTML content, without header')
+ parser.add_argument('--nofilename', action='store_true', help='Do not output file name headers')
parser.add_argument('old', nargs='?', help='source file or directory to compare ("before" file)')
parser.add_argument('new', nargs='?', help='source file or directory to compare ("after" file)')
args = parser.parse_args()
@@ -666,12 +696,24 @@ def cli():
if args.syntax_css:
syntax_css = Path(args.syntax_css).read_text()
else:
- syntax_css = PYGMENTS_CSS
+ light_css = HtmlFormatter(classprefix='wsd-', style='xcode').get_style_defs()
+ dark_css = HtmlFormatter(classprefix='wsd-', style=witchhazel.WitchHazelStyle).get_style_defs()
+
+ syntax_css = textwrap.dedent(f'''@media print, (prefers-color-scheme: light) {{
+ {light_css}
+ }}
+
+ @media (prefers-color-scheme: dark) {{
+ {dark_css}
+ }}''')
if args.header:
print(string.Template(HTML_TEMPLATE).substitute(
title=pagetitle,
pygments_css=syntax_css,
+ main_css=MAIN_CSS,
+ diff_style_toggle=DIFF_STYLE_TOGGLE,
+ diff_style_script=DIFF_STYLE_SCRIPT,
body='$body'), file=args.output)
sys.exit(0)
@@ -715,16 +757,13 @@ def cli():
if args.lexer:
lexer = get_lexer_by_name(lexer)
else:
- if new.suffix.lower() in ('.kicad_mod', '.kicad_mod', '.kicad_pcb', '.kicad_sch')\
- or new.name == 'sym_lib_table':
- lexer = SexprLexer()
- else:
- try:
- lexer = guess_lexer_for_filename(new, new_text)
- except:
- lexer = get_lexer_by_name('text')
+ try:
+ lexer = guess_lexer_for_filename(new, new_text)
+ except:
+ lexer = get_lexer_by_name('text')
- diff_blocks.append(html_diff_block(old_text, new_text, suffix, lexer))
+ diff_blocks.append(html_diff_block(old_text, new_text, suffix, lexer, hide_filename=args.nofilename,
+ context_len=args.context_len, fold_min=args.fold_min))
body = '\n'.join(diff_blocks)
if args.content:
@@ -733,6 +772,9 @@ def cli():
print(string.Template(HTML_TEMPLATE).substitute(
title=pagetitle,
pygments_css=syntax_css,
+ main_css=MAIN_CSS,
+ diff_style_toggle=DIFF_STYLE_TOGGLE,
+ diff_style_script=DIFF_STYLE_SCRIPT,
body=body), file=args.output)
if args.open: