|  | #!/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() |