embed_as_string.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/env python3
  2. r"""
  3. Embeds a file into a String, a la #embed from C++23
  4. """
  5. import argparse
  6. import sys
  7. def main():
  8. parser = argparse.ArgumentParser(
  9. epilog=__doc__,
  10. formatter_class=argparse.RawDescriptionHelpFormatter)
  11. parser.add_argument('input', help='input file to stringify')
  12. parser.add_argument('-o', '--output', required=True,
  13. help='output file')
  14. parser.add_argument('-n', '--variable-name', required=True,
  15. help='name of the C++ variable')
  16. parser.add_argument('-s', '--namespace', required=False,
  17. help='C++ namespace to put the string into')
  18. args = parser.parse_args()
  19. with open(args.output, 'w') as f:
  20. f.write("#include <AK/String.h>\n")
  21. if args.namespace:
  22. f.write(f"namespace {args.namespace} {{\n")
  23. f.write(f"extern String {args.variable_name};\n")
  24. f.write(f"String {args.variable_name} = R\"~~~(")
  25. with open(args.input, 'r') as input:
  26. for line in input.readlines():
  27. f.write(f"{line}")
  28. f.write(")~~~\"_string;\n")
  29. if args.namespace:
  30. f.write("}\n")
  31. if __name__ == '__main__':
  32. sys.exit(main())