• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2
3import argparse
4import base64
5import io
6import os
7
8MAGIC = "<!--RESOURCE_EMBED_HINT-->\n"
9
10
11def main(infile, outfile, resources):
12    """Embed resources into infile at the line `<!--RESOURCE_EMBED_HINT-->`."""
13    inlines = infile.readlines()
14    magic = inlines.index(MAGIC)
15
16    outlines = inlines[:magic]
17    for resource_name in resources:
18        outlines.append('<div hidden class="embedded_resource" id="{}-res">\n'.format(os.path.basename(resource_name)))
19        with open(resource_name, 'rb') as resource:
20            # Resources need to be base64 encoded. For example, the resource file may be in
21            # markdown format:
22            #    `<name>`
23            # However, this is not valid HTML. So it cannot be embedded in the HTML file directly.
24            # The HTML renderer converts it to
25            #    <code><name></code>
26            # This is valid HTML. See index.html.
27            outlines.append(base64.b64encode(resource.read()).decode())
28        outlines.append('</div>\n')
29    outlines += inlines[magic:]
30
31    outfile.writelines(outlines)
32
33
34if __name__ == '__main__':
35    parser = argparse.ArgumentParser(description=main.__doc__)
36    parser.add_argument("--infile", required=True, type=argparse.FileType('r'), help="input file")
37    parser.add_argument("--outfile", required=True, type=argparse.FileType('w'), help="output file")
38    parser.add_argument("resources", nargs='+', help="resource files")
39    args = parser.parse_args()
40    main(**vars(args))
41