scripts/make_html_manual_page.py: add macos manpage mirror url

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
pull/320/head
Manos Pitsidianakis 2023-12-06 16:33:19 +02:00
parent da251455a0
commit 3adba40e32
Signed by: Manos Pitsidianakis
GPG Key ID: 7729C7707F7E09D0
1 changed files with 74 additions and 40 deletions

View File

@ -51,17 +51,18 @@ def clear_line(signum, frame):
signal.signal(signal.SIGWINCH, clear_line) signal.signal(signal.SIGWINCH, clear_line)
TEMPLATES = [ MIRRORS = [
"http://linux.die.net/man/%S/%N", "http://linux.die.net/man/%S/%N",
"http://man7.org/linux/man-pages/man%S/%N.%S.html", "http://man7.org/linux/man-pages/man%S/%N.%S.html",
"http://manpages.debian.org/stable/%N.%S.en.html", "http://manpages.debian.org/stable/%N.%S.en.html",
"http://man.bsd.lv/%N.%S",
"http://man.archlinux.org/man/%N.%S", "http://man.archlinux.org/man/%N.%S",
"http://man.voidlinux.org/%N.%S", "http://man.voidlinux.org/%N.%S",
"http://man.bsd.lv/%N.%S",
"http://man.bsd.lv/OpenBSD-7.0/%N.%S", "http://man.bsd.lv/OpenBSD-7.0/%N.%S",
"http://man.bsd.lv/FreeBSD-13.0/%N.%S", "http://man.bsd.lv/FreeBSD-13.0/%N.%S",
"http://man.bsd.lv/POSIX-2013/%N.%S", # last resorts "http://man.bsd.lv/POSIX-2013/%N.%S", # last resorts
"http://man.bsd.lv/UNIX-7/%N.%S", "http://man.bsd.lv/UNIX-7/%N.%S",
"https://www.unix.com/man-page/mojave/%S/%N/",
] ]
@ -135,11 +136,11 @@ def give_me_head(url, url_, name, section):
conn = http.client.HTTPSConnection(o.hostname, timeout=6) conn = http.client.HTTPSConnection(o.hostname, timeout=6)
conn.request(HTTPMethod.HEAD, o.path) conn.request(HTTPMethod.HEAD, o.path)
response = conn.getresponse() response = conn.getresponse()
if ( if response.status in (
response.status == HTTPStatus.FOUND HTTPStatus.FOUND,
or response.status == HTTPStatus.TEMPORARY_REDIRECT HTTPStatus.TEMPORARY_REDIRECT,
or response.status == HTTPStatus.PERMANENT_REDIRECT HTTPStatus.PERMANENT_REDIRECT,
or response.status == HTTPStatus.MOVED_PERMANENTLY HTTPStatus.MOVED_PERMANENTLY,
): ):
# print("for ", url_, "following redirect", response.status) # print("for ", url_, "following redirect", response.status)
give_me_head.redirects += 1 give_me_head.redirects += 1
@ -219,7 +220,7 @@ if __name__ == "__main__":
type=bool, type=bool,
help="find external manpages and hyperlink to them", help="find external manpages and hyperlink to them",
required=False, required=False,
default=False, default=True,
) )
parser.add_argument( parser.add_argument(
"--no-tty", "--no-tty",
@ -228,6 +229,13 @@ if __name__ == "__main__":
default=False, default=False,
action="store_true", action="store_true",
) )
parser.add_argument(
"--include-refs",
type=str,
help="comma separated list of manpages to relatively hyperlink",
required=False,
default="",
)
parser.add_argument( parser.add_argument(
"--exclude-refs", "--exclude-refs",
type=str, type=str,
@ -242,16 +250,28 @@ if __name__ == "__main__":
required=False, required=False,
default="mandoc", default="mandoc",
) )
parser.add_argument(
"--no-css",
type=bool,
help="don't prepend <style> element",
required=False,
action="store_true",
default=False,
)
args = parser.parse_args() args = parser.parse_args()
if args.exclude_refs: if args.exclude_refs:
args.exclude_refs = [s.strip() for s in args.exclude_refs.split(",")] args.exclude_refs = [s.strip() for s in args.exclude_refs.split(",")]
if args.include_refs:
args.include_refs = [s.strip() for s in args.include_refs.split(",")]
if not args.output: if not args.output:
args.output = Path.cwd() / (Path(args.page).name + ".html") args.output = Path.cwd() / (Path(args.page).name + ".html")
if not args.name: if not args.name:
args.name = Path(args.page).name args.name = Path(args.page).name
manpage = open(args.page, "r", encoding="utf-8").read() manpage = None
with open(args.page, "r", encoding="utf-8") as f:
manpage = f.read()
if args.refs: if args.refs:
refs_url = ',man="%N\t%S"' refs_url = ',man="%N\t%S"'
else: else:
@ -312,8 +332,8 @@ if __name__ == "__main__":
) )
continue continue
found = False found = False
for url in TEMPLATES: for url in MIRRORS:
add_progress(1.0 / (len(TEMPLATES) * 1.0)) add_progress(1.0 / (len(MIRRORS) * 1.0))
if found: if found:
continue continue
draw_progress( draw_progress(
@ -330,6 +350,19 @@ if __name__ == "__main__":
except Exception as exc: except Exception as exc:
if "handshake operation timed out" not in str(exc): if "handshake operation timed out" not in str(exc):
print(f"got {exc} for url {url_}") print(f"got {exc} for url {url_}")
if (
not found
and args.include_refs
and (
name in args.include_refs
or f"{name}.{section}" in args.include_refs
)
):
link["href"] = ""
draw_progress(
total,
status=f"{name}.{section}: Excluding ref because it was not found online and is not in --include-refs list. Leaving it empty.",
)
else: else:
add_progress() add_progress()
draw_progress(total) draw_progress(total)
@ -343,35 +376,36 @@ if __name__ == "__main__":
target["id"] = id_ target["id"] = id_
with open(args.output, "w", encoding="utf-8") as f: with open(args.output, "w", encoding="utf-8") as f:
f.write( if not args.no_css:
f.write(
"""
<style>
code.Ic, code.Li, code.Cm, code.Nm, kbd.manpage-kbd{
display: inline-block;
}
kbd {
background-color: #eee;
border-radius: 3px;
border: 1px solid #b4b4b4;
box-shadow:
0 1px 1px rgba(0, 0, 0, 0.2),
0 2px 0 0 rgba(255, 255, 255, 0.7) inset;
color: #333;
display: inline-block;
font-size: 0.85em;
font-weight: 700;
line-height: 1;
padding: 2px 4px;
white-space: nowrap;
}
code {
background-color: #eee;
border-radius: 3px;
font-family: courier, monospace;
padding: 0 3px;
}
</style>
""" """
<style> )
code.Ic, code.Li, code.Cm, code.Nm, kbd.manpage-kbd{
display: inline-block;
}
kbd {
background-color: #eee;
border-radius: 3px;
border: 1px solid #b4b4b4;
box-shadow:
0 1px 1px rgba(0, 0, 0, 0.2),
0 2px 0 0 rgba(255, 255, 255, 0.7) inset;
color: #333;
display: inline-block;
font-size: 0.85em;
font-weight: 700;
line-height: 1;
padding: 2px 4px;
white-space: nowrap;
}
code {
background-color: #eee;
border-radius: 3px;
font-family: courier, monospace;
padding: 0 3px;
}
</style>
"""
)
f.write(soup.prettify()) f.write(soup.prettify())
print("Written to ", args.output) print("Written to ", args.output)