Annotation of embedaddon/rsync/packaging/md2html, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/env python3
                      2: 
                      3: # Copyright (C) 2020 Wayne Davison
                      4: #
                      5: # This program is freely redistributable.
                      6: 
                      7: import os, re, argparse
                      8: 
                      9: HTML_START = """\
                     10: <html><head>
                     11: <title>%s</title>
                     12: <link href="https://fonts.googleapis.com/css2?family=Roboto&family=Roboto+Mono&display=swap" rel="stylesheet">
                     13: <style>
                     14: body {
                     15:   max-width: 50em;
                     16:   margin: auto;
                     17: }
                     18: body, b, strong, u {
                     19:   font-family: 'Roboto', sans-serif;
                     20: }
                     21: code {
                     22:   font-family: 'Roboto Mono', monospace;
                     23:   font-weight: bold;
                     24: }
                     25: pre code {
                     26:   display: block;
                     27:   font-weight: normal;
                     28: }
                     29: blockquote pre code {
                     30:   background: #f1f1f1;
                     31: }
                     32: dd p:first-of-type {
                     33:   margin-block-start: 0em;
                     34: }
                     35: table {
                     36:   border-color: grey;
                     37:   border-spacing: 0;
                     38: }
                     39: tr {
                     40:   border-top: 1px solid grey;
                     41: }
                     42: tr:nth-child(2n) {
                     43:   background-color: #f6f8fa;
                     44: }
                     45: th, td {
                     46:   border: 1px solid #dfe2e5;
                     47:   text-align: center;
                     48:   padding-left: 1em;
                     49:   padding-right: 1em;
                     50: }
                     51: </style>
                     52: </head><body>
                     53: """
                     54: 
                     55: HTML_END = """\
                     56: </body></html>
                     57: """
                     58: 
                     59: md_parser = None
                     60: 
                     61: def main():
                     62:     for mdfn in args.mdfiles:
                     63:         if not mdfn.endswith('.md'):
                     64:             print('Ignoring non-md input file:', mdfn)
                     65:             continue
                     66:         title = re.sub(r'.*/', '', mdfn).replace('.md', '')
                     67:         htfn = mdfn.replace('.md', '.html')
                     68: 
                     69:         print("Parsing", mdfn, '->', htfn)
                     70: 
                     71:         with open(mdfn, 'r', encoding='utf-8') as fh:
                     72:             txt = fh.read()
                     73: 
                     74:         txt = re.sub(r'\s--\s', '\xa0-- ', txt)
                     75: 
                     76:         html = md_parser(txt)
                     77: 
                     78:         html = re.sub(r'(?<!<pre>)(<code>)([\s\S]*?)(</code>)', lambda m: m[1] + re.sub(r'\s', '\xa0', m[2]) + m[3], html)
                     79:         html = html.replace('--', '&#8209;&#8209;').replace("\xa0-", '&nbsp;&#8209;').replace("\xa0", '&nbsp;')
                     80:         html = re.sub(r'(\W)-', r'\1&#8209;', html)
                     81: 
                     82:         if os.path.lexists(htfn):
                     83:             os.unlink(htfn)
                     84: 
                     85:         with open(htfn, 'w', encoding='utf-8') as fh:
                     86:             fh.write(HTML_START % title)
                     87:             fh.write(html)
                     88:             fh.write(HTML_END)
                     89: 
                     90: 
                     91: if __name__ == '__main__':
                     92:     parser = argparse.ArgumentParser(description='Output html for md pages.', add_help=False)
                     93:     parser.add_argument("--help", "-h", action="help", help="Output this help message and exit.")
                     94:     parser.add_argument("mdfiles", nargs='+', help="The .md files to turn into .html files.")
                     95:     args = parser.parse_args()
                     96: 
                     97:     try:
                     98:         import cmarkgfm
                     99:         # Our NEWS.md file has a gfm table in it.
                    100:         md_parser = cmarkgfm.github_flavored_markdown_to_html
                    101:     except:
                    102:         die("Failed to find cmarkgfm for python3.")
                    103: 
                    104:     main()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>