| #!/usr/bin/env python3 | 
 | # Copyright lowRISC contributors. | 
 | # Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
 | # SPDX-License-Identifier: Apache-2.0 | 
 | r"""Command-line tool to convert i2c to svg | 
 | """ | 
 |  | 
 | import argparse | 
 | import logging as log | 
 | import sys | 
 | from pathlib import PurePath | 
 |  | 
 | import pkg_resources  # part of setuptools | 
 |  | 
 | from i2csvg import convert | 
 | from reggen import version | 
 |  | 
 | ep = """defaults or the filename - can be used for stdin/stdout | 
 | By default all input files are concatenated into a single output file | 
 | this can be changed with the --multiout flag. | 
 | """ | 
 |  | 
 |  | 
 | def main(): | 
 |     done_stdin = False | 
 |     parser = argparse.ArgumentParser( | 
 |         prog="i2csvg.py", | 
 |         formatter_class=argparse.RawDescriptionHelpFormatter, | 
 |         description=__doc__, | 
 |         epilog=ep) | 
 |     parser.add_argument('--version', | 
 |                         action='store_true', | 
 |                         help='Show version and exit') | 
 |     parser.add_argument('-v', | 
 |                         '--verbose', | 
 |                         action='store_true', | 
 |                         help='Verbose output during processing') | 
 |     parser.add_argument('-d', | 
 |                         '--debug', | 
 |                         action='store_true', | 
 |                         help='Include internal representation in output file') | 
 |     parser.add_argument('-t', | 
 |                         '--text', | 
 |                         action='store_true', | 
 |                         help='Include text output in output file') | 
 |     parser.add_argument('-n', | 
 |                         '--nosvg', | 
 |                         action='store_true', | 
 |                         help="Don't include svg in output") | 
 |  | 
 |     parser.add_argument('-f', | 
 |                         '--fifodata', | 
 |                         action='store_true', | 
 |                         help='Data is hexdump of writes to FDATA fifo') | 
 |     parser.add_argument( | 
 |         '-p', | 
 |         '--prefix', | 
 |         action='store', | 
 |         help='Only process lines with this prefix (the prefix is removed)') | 
 |     parser.add_argument( | 
 |         '-m', | 
 |         '--multiout', | 
 |         action='store_true', | 
 |         help='Generate separate output file with .svg extension from inputs') | 
 |     parser.add_argument('-o', | 
 |                         '--output', | 
 |                         type=argparse.FileType('w'), | 
 |                         default=sys.stdout, | 
 |                         metavar='file', | 
 |                         help='Output file (default stdout)') | 
 |     parser.add_argument('srcfile', | 
 |                         nargs='*', | 
 |                         metavar='input', | 
 |                         default='-', | 
 |                         help='source i2c file (default stdin)') | 
 |     args = parser.parse_args() | 
 |  | 
 |     if args.version: | 
 |         version.show_and_exit(__file__, ["Hjson"]) | 
 |  | 
 |     if (args.verbose): | 
 |         log.basicConfig(format="%(levelname)s: %(message)s", level=log.DEBUG) | 
 |     else: | 
 |         log.basicConfig(format="%(levelname)s: %(message)s") | 
 |  | 
 |     outfile = args.output | 
 |     # output will be: | 
 |     # .svg if a single input file and no additional details (debug/text) | 
 |     #      or --multiout and no additional details | 
 |     # .html if combining multiple files (not --multiout) or additional details | 
 |     # .txt if --nosvg | 
 |     combiningfiles = (len(args.srcfile) > 1) and not args.multiout | 
 |     extrainfo = args.debug or args.text or combiningfiles | 
 |  | 
 |     if args.nosvg: | 
 |         makehtml = False | 
 |         outext = '.txt' | 
 |     elif extrainfo: | 
 |         makehtml = True | 
 |         outext = '.html' | 
 |     else: | 
 |         makehtml = False | 
 |         outext = '.svg' | 
 |  | 
 |     with outfile: | 
 |         for filename in args.srcfile: | 
 |             if (filename == '-'): | 
 |                 if (done_stdin): | 
 |                     log.warn("Ignore stdin after first use\n") | 
 |                     continue | 
 |                 done_stdin = True | 
 |                 infile = sys.stdin | 
 |             else: | 
 |                 infile = open(filename, 'r', encoding='UTF-8') | 
 |             with infile: | 
 |                 log.info("\nFile now " + filename) | 
 |                 if args.multiout: | 
 |                     outfname = str(PurePath(filename).with_suffix('.svg')) | 
 |                     outf = open(outfname, 'w', encoding='UTF-8') | 
 |                 else: | 
 |                     outf = outfile | 
 |                 if makehtml: | 
 |                     outf.write("<H2>" + filename + "</H2>") | 
 |                 tr = convert.parse_file(infile, args.fifodata, args.prefix) | 
 |                 if args.debug: | 
 |                     convert.output_debug(outf, tr, | 
 |                                          '<br>\n' if makehtml else '\n') | 
 |                     outf.write('<br>\n' if makehtml else '\n') | 
 |                 if args.text: | 
 |                     if makehtml: | 
 |                         outf.write("<pre>\n") | 
 |                     convert.output_text(outf, tr, | 
 |                                         '<br>\n' if makehtml else '\n') | 
 |                     if makehtml: | 
 |                         outf.write("</pre>\n") | 
 |                 if not args.nosvg: | 
 |                     convert.output_svg(outf, tr, makehtml) | 
 |  | 
 |                 if args.multiout: | 
 |                     outf.close() | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     main() |