mirror of
https://github.com/Orange-OpenSource/hurl.git
synced 2024-12-02 15:04:14 +03:00
84 lines
1.9 KiB
Python
Executable File
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()
|