diff options
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/txt2c.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/bin/txt2c.py b/bin/txt2c.py new file mode 100755 index 0000000..1d8ff70 --- /dev/null +++ b/bin/txt2c.py | |||
@@ -0,0 +1,62 @@ | |||
1 | #!/usr/bin/python3 | ||
2 | |||
3 | import fileinput | ||
4 | import os | ||
5 | import sys | ||
6 | |||
7 | |||
8 | def escape_quotes(string): | ||
9 | return string.replace("\"", '\\"') | ||
10 | |||
11 | |||
12 | def escape_newlines(string): | ||
13 | return string.replace("\n", "\\n") | ||
14 | |||
15 | |||
16 | def quote(string): | ||
17 | return "\"" + string + "\"" | ||
18 | |||
19 | |||
20 | def main(): | ||
21 | if len(sys.argv) < 3: | ||
22 | print("Usage: {} [text files...] [C files...]".format(sys.argv[0])) | ||
23 | return 1 | ||
24 | |||
25 | files = sys.argv[1:] | ||
26 | assert(len(files) % 2 == 0) | ||
27 | N = int(len(files) / 2) | ||
28 | text_files = files[:N] | ||
29 | c_files = files[N:] | ||
30 | |||
31 | for i in range(len(text_files)): | ||
32 | text_file = text_files[i] | ||
33 | c_file = c_files[i] | ||
34 | h_file = c_file.replace(".c", ".h") | ||
35 | variable_name = os.path.basename(text_file).replace(".", "_") | ||
36 | |||
37 | os.makedirs(os.path.join(".", os.path.dirname(c_file)), exist_ok=True) | ||
38 | |||
39 | # Create the C file. | ||
40 | with open(c_file, 'w') as out_file: | ||
41 | out_file.write("const char {}[] =\n".format(variable_name)) | ||
42 | pad = " " | ||
43 | with open(text_file, 'r') as in_file: | ||
44 | for line in in_file.readlines(): | ||
45 | line = escape_quotes(line) | ||
46 | line = escape_newlines(line) | ||
47 | line = quote(line) | ||
48 | line = pad + line + "\n" | ||
49 | out_file.write(line) | ||
50 | out_file.write(pad + "\"\";") | ||
51 | |||
52 | # Create the header file. | ||
53 | with open(h_file, 'w') as out_file: | ||
54 | out_file.write("#pragma once\n") | ||
55 | out_file.write("\n") | ||
56 | out_file.write("extern const char {}[];".format(variable_name)) | ||
57 | |||
58 | return 0 | ||
59 | |||
60 | |||
61 | if __name__ == '__main__': | ||
62 | sys.exit(main()) | ||