e4dcf1d852
This method is used to generate headers for embedding files into the binary (think about the new `#embed` feature in C23 and C++26). While the stringification step itself was plenty fast, it then proceeded to wrap everything using the `textwrap` module. `textwrap` is *very* slow, as it's apparently optimized for human text. This patch reimplements the wrapping logic using a simple regex, resulting in a tremendous speed improvement (~6x), and switches to `map` for the stringification itself (thanks Rémi!) It also removes a (practically) unused argument, `initial_indent`. The generated files are pretty much the same, with a tiny difference in line length (for some reason the old logic overshot the requested line length)
22 lines
609 B
Python
22 lines
609 B
Python
"""Functions used to generate source files during build time"""
|
|
|
|
import os
|
|
|
|
import methods
|
|
|
|
|
|
def make_fonts_header(target, source, env):
|
|
with methods.generated_wrapper(str(target[0])) as file:
|
|
for src in map(str, source):
|
|
# Saving uncompressed, since FreeType will reference from memory pointer.
|
|
buffer = methods.get_buffer(src)
|
|
name = os.path.splitext(os.path.basename(src))[0]
|
|
|
|
file.write(f"""\
|
|
inline constexpr int _font_{name}_size = {len(buffer)};
|
|
inline constexpr unsigned char _font_{name}[] = {{
|
|
{methods.format_buffer(buffer, 1)}
|
|
}};
|
|
|
|
""")
|