80 lines
3.4 KiB
Python
80 lines
3.4 KiB
Python
#!/usr/bin/env python
|
|
import os
|
|
import re
|
|
|
|
html_files = []
|
|
directory = "lib/ESPMegaPRO/html"
|
|
|
|
for filename in os.listdir(directory):
|
|
if filename.endswith(".html"):
|
|
html_files.append(os.path.join(directory, filename))
|
|
|
|
# Iterate over the list of html files
|
|
for html_file in html_files:
|
|
# Open the html file
|
|
f = open(html_file, "r")
|
|
# Read the content of the html file
|
|
html_content = f.read()
|
|
# Close the html file
|
|
f.close()
|
|
|
|
# Section Disabled, Using client side JS to replace variables
|
|
# First, replace % with %%
|
|
#html_content = html_content.replace("%", "%%")
|
|
# The html file contains placeholders for the variables
|
|
# These placeholders are in the form of $(variable_name)$
|
|
# Replace these with %variable_name%
|
|
#html_content = re.sub(r"\$\((.*?)\)\$", r"%\1%", html_content)
|
|
# Create the temp folder if it doesn't exist
|
|
|
|
|
|
if not os.path.exists("temp"):
|
|
os.makedirs("temp")
|
|
# Save the new content to a new file in the temp directory
|
|
# The new file will have the same name as the original file
|
|
nf = open("temp/" + os.path.basename(html_file), "w")
|
|
nf.write(html_content)
|
|
nf.close()
|
|
# Use xxd to convert the html file to a C++ file
|
|
# The C++ file will have the same name as the original file but with a .h extension
|
|
# Save the C++ file in lib/ESPMegaPRO/html
|
|
os.system("xxd -i temp/" + os.path.basename(html_file) + " > lib/ESPMegaPRO/" + os.path.basename(html_file).replace(".html", "_html.h"))
|
|
# Now delete the temp file
|
|
os.remove("temp/" + os.path.basename(html_file))
|
|
# Next we open the C++ file
|
|
f = open("lib/ESPMegaPRO/" + os.path.basename(html_file).replace(".html", "_html.h"), "r")
|
|
# Read the content of the C++ file
|
|
cpp_content = f.read()
|
|
# Close the C++ file
|
|
f.close()
|
|
# By default, xxd will create a unsigned char array
|
|
# We need to change this to a const char array
|
|
# We also need to add a null terminator at the end of the array
|
|
# Additionally we want to place the array in PROGMEM
|
|
# Ex. From unsigned char index_html[] = { to const char index_html[] PROGMEM = {
|
|
# We will use regex to do this
|
|
cpp_content = re.sub(r"unsigned char (.*?)\[\] = \{", r"const char \1[] PROGMEM = {", cpp_content)
|
|
# Add null terminator
|
|
cpp_content = cpp_content.replace("};", ", 0x00};")
|
|
# Lastly, we do not need the length of the array so we remove it
|
|
# Ex. From unsigned int index_html_len = 1000; to
|
|
cpp_content = re.sub(r"unsigned int (.*?)_len = (.*?);", r"", cpp_content)
|
|
# Change the name of the variable to <filename>_html where <filename> is the name of the html file
|
|
filename = os.path.basename(html_file).replace(".html", "")
|
|
cpp_content = re.sub(r"const char (.*?)\[\] PROGMEM = {", r"const char " + filename + r"_html[] PROGMEM = {", cpp_content)
|
|
# Reopen the C++ file
|
|
f = open("lib/ESPMegaPRO/" + os.path.basename(html_file).replace(".html", "_html.h"), "w")
|
|
# Write the new content to the C++ file
|
|
f.write(cpp_content)
|
|
# Close the C++ file
|
|
f.close()
|
|
|
|
# Lastly, we need to create a header file that includes all the html files
|
|
# Open the header file
|
|
f = open("lib/ESPMegaPRO/all_html.h", "w")
|
|
# Write the pragma once directive
|
|
f.write("#pragma once\n")
|
|
# Write the includes for all the html files
|
|
for html_file in html_files:
|
|
f.write("#include \"" + os.path.basename(html_file).replace(".html", "_html.h") + "\"\n")
|
|
# Close the header file |