#!/usr/bin/env python3 import sys ## ## Convert ANSI art files to C++ header file. ## filenames = sys.argv filenames.pop(0) if not filenames: print("I need filename(s) to convert.") sys.exit(0) def my_repr(line): """ Given a latin1 line, output valid C++ string. if the character is < 0x20 or > 0x7e, output in hex format. if the character is ', " or ?, output \', \", or \?. """ r = "" for c in line: o = ord(c) if ((o< 0x20) or (o > 0x7e)): r += "\\x{0:02x}".format(o) else: if c == "'": r += "\\'" elif c == '"': r += '\\"' elif c == '?': r += '\\?' elif c == '\\': r += '\\\\' else: r += c return r def readfile(filename): """ Reads the given ANSI file and outputs valid C++ code. """ # basename will be the name of the array defined in the headerfile. basename = filename pos = basename.find('.') if pos != -1: basename = basename[:pos] pos = basename.rfind('/') if pos != -1: basename = basename[pos+1:] # Read the file into lines lines = [] with open(filename, "r", encoding="latin1") as fp: for line in fp: line = line.rstrip("\r\n") lines.append(line) print("std::array {0} = {{".format(basename, len(lines))) first = True for line in lines: if not first: print(",") else: first = False print(" \"{0}\"".format(my_repr(line)), end='') print(" };\n") # Begin the output process print("#include \n") # Process each file given for filename in filenames: readfile(filename)