mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-01-20 12:58:00 -05:00
109 lines
2.5 KiB
Python
Executable File
109 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Copyright (C) 2020 Wayne Davison
|
|
#
|
|
# This program is freely redistributable.
|
|
|
|
import os, re, argparse
|
|
|
|
HTML_START = """\
|
|
<html><head>
|
|
<title>%s</title>
|
|
<link href="https://fonts.googleapis.com/css2?family=Roboto&family=Roboto+Mono&display=swap" rel="stylesheet">
|
|
<style>
|
|
body {
|
|
max-width: 50em;
|
|
margin: auto;
|
|
}
|
|
body, b, strong, u {
|
|
font-family: 'Roboto', sans-serif;
|
|
}
|
|
code {
|
|
font-family: 'Roboto Mono', monospace;
|
|
font-weight: bold;
|
|
}
|
|
pre code {
|
|
display: block;
|
|
font-weight: normal;
|
|
}
|
|
blockquote pre code {
|
|
background: #f1f1f1;
|
|
}
|
|
dd p:first-of-type {
|
|
margin-block-start: 0em;
|
|
}
|
|
table {
|
|
border-color: grey;
|
|
border-spacing: 0;
|
|
}
|
|
tr {
|
|
border-top: 1px solid grey;
|
|
}
|
|
tr:nth-child(2n) {
|
|
background-color: #f6f8fa;
|
|
}
|
|
th, td {
|
|
border: 1px solid #dfe2e5;
|
|
text-align: center;
|
|
padding-left: 1em;
|
|
padding-right: 1em;
|
|
}
|
|
</style>
|
|
</head><body>
|
|
"""
|
|
|
|
HTML_END = """\
|
|
</body></html>
|
|
"""
|
|
|
|
md_parser = None
|
|
|
|
def main():
|
|
for mdfn in args.mdfiles:
|
|
if not mdfn.endswith('.md'):
|
|
print('Ignoring non-md input file:', mdfn)
|
|
continue
|
|
title = re.sub(r'.*/', '', mdfn).replace('.md', '')
|
|
htfn = mdfn.replace('.md', '.html')
|
|
|
|
print("Parsing", mdfn, '->', htfn)
|
|
|
|
with open(mdfn, 'r', encoding='utf-8') as fh:
|
|
txt = fh.read()
|
|
|
|
txt = re.sub(r'\s--\s', '\xa0-- ', txt)
|
|
|
|
html = md_parser(txt)
|
|
|
|
html = re.sub(r'(<code>)([\s\S]*?)(</code>)', lambda m: m[1] + re.sub(r'\s', '\xa0', m[2]) + m[3], html)
|
|
html = html.replace('--', '‑‑').replace("\xa0-", ' ‑').replace("\xa0", ' ')
|
|
html = re.sub(r'(\W)-', r'\1‑', html)
|
|
|
|
if os.path.lexists(htfn):
|
|
os.unlink(htfn)
|
|
|
|
with open(htfn, 'w', encoding='utf-8') as fh:
|
|
fh.write(HTML_START % title)
|
|
fh.write(html)
|
|
fh.write(HTML_END)
|
|
|
|
|
|
def html_via_cmarkgfm(txt):
|
|
# Our NEWS.md file has a gfm table in it.
|
|
return cmarkgfm.github_flavored_markdown_to_html(txt)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description='Output html for md pages.', add_help=False)
|
|
parser.add_argument("--help", "-h", action="help", help="Output this help message and exit.")
|
|
parser.add_argument("mdfiles", nargs='+', help="The .md files to turn into .html files.")
|
|
args = parser.parse_args()
|
|
|
|
try:
|
|
import cmarkgfm
|
|
md_parser = html_via_cmarkgfm
|
|
except:
|
|
die("Failed to find cmarkgfm for python3.")
|
|
|
|
main()
|