hurl/bin/release/gen_manpage.py
2024-03-26 15:54:14 +01:00

84 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
"""Build Hurl Man File.
This script creates Hurl man file from a Markdown source.
This tool takes the Hurl man Markdown source file as a first argument.
Examples:
$ python3 bin/release/gen_manpage.py docs/manual/hurl.md > docs/manual/hurl.1
$ python3 bin/release/gen_manpage.py docs/manual/hurlfmt.md > docs/manual/hurlfmt.1
"""
import sys
import re
from datetime import date
from typing import Optional
def header(version: str, today: date) -> str:
today_formatted = today.strftime("%d %b %Y")
return f'.TH hurl 1 "{today_formatted}" "hurl {version}" " Hurl Manual"'
def version() -> Optional[str]:
p = re.compile('version = "(.*)"')
for line in open("packages/hurl/Cargo.toml", "r").readlines():
m = p.match(line)
if m:
return m.group(1)
return None
def process_code_block(s: str) -> str:
output = ""
indent = False
for line in s.split("\n"):
if indent and line.startswith("```"):
indent = False
elif not indent and line.startswith("```"):
indent = True
else:
if line != "":
if indent:
output += " "
output += line
output += "\n"
return output
def convert_md(s) -> str:
p = re.compile(r"^###\s+(.*)")
s = p.sub('.IP "\\1"', s)
p = re.compile(r"^##")
s = p.sub(".SH", s)
p = re.compile(r"\*\*(.*)\*\*\s+")
s = p.sub(".B \\1\n", s)
# Remove link Text
p = re.compile(r"\[`?(.*?)`?\]\(.*?\)")
s = p.sub("\\\\fI\\1\\\\fP", s)
# Remove local anchor
p = re.compile(r"{#.*}")
s = p.sub("", s)
return s
def main():
input_file = sys.argv[1]
data = open(input_file).readlines()
print(header(version(), date.today()))
s = "".join([convert_md(line) for line in data])
s = process_code_block(s)
print(s)
if __name__ == "__main__":
main()