1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#!/usr/bin/env python3
#
# markdown-preprocess - filter *.md.in files, convert to .md
#
import glob
import os
import sys
def main():
script_dir = os.path.abspath(os.path.dirname(__file__))
man_dir = os.path.join(script_dir,"../docs/source/markdown")
try:
os.chdir(man_dir)
except FileNotFoundError:
raise Exception("Please invoke me from the base repo dir")
# If called with args, process only those files
infiles = [ os.path.basename(x) for x in sys.argv[1:] ]
if len(infiles) == 0:
# Called without args: process all *.md.in files
infiles = glob.glob('*.md.in')
for infile in infiles:
process(infile)
def process(infile):
# Some options are the same between containers and pods; determine
# which description to use from the name of the source man page.
pod_or_container = 'container'
if '-pod-' in infile:
pod_or_container = 'pod'
# Sometimes a man page includes the subcommand.
subcommand = removesuffix(removeprefix(infile,"podman-"),".1.md.in").replace("-", " ")
# foo.md.in -> foo.md -- but always write to a tmpfile
outfile = os.path.splitext(infile)[0]
outfile_tmp = outfile + '.tmp.' + str(os.getpid())
# print("got here: ",infile, " -> ", outfile)
with open(infile, 'r') as fh_in, open(outfile_tmp, 'w') as fh_out:
for line in fh_in:
# '@@option foo' -> include file options/foo.md
if line.startswith('@@option '):
_, optionname = line.strip().split(" ")
optionfile = os.path.join("options", optionname + '.md')
fh_out.write("[//]: # (BEGIN included file " + optionfile + ")\n")
with open(optionfile, 'r') as fh_optfile:
for opt_line in fh_optfile:
opt_line = opt_line.replace('<POD-OR-CONTAINER>', pod_or_container)
opt_line = opt_line.replace('<SUBCOMMAND>', subcommand)
fh_out.write(opt_line)
# Weird special case: options/image-volume.md ends in a
# list, and in markdown lists are continued across lines,
# so without an intervening blank line the '[//]' comment
# becomes part of the final list entry.
if opt_line.startswith('-'):
fh_out.write("\n")
fh_out.write("[//]: # (END included file " + optionfile + ")\n")
else:
fh_out.write(line)
os.chmod(outfile_tmp, 0o444)
os.rename(outfile_tmp, outfile)
# str.removeprefix() is python 3.9+, we need to support older versions on mac
def removeprefix(string: str, prefix: str) -> str:
if string.startswith(prefix):
return string[len(prefix):]
else:
return string[:]
# str.removesuffix() is python 3.9+, we need to support older versions on mac
def removesuffix(string: str, suffix: str) -> str:
# suffix='' should not call self[:-0].
if suffix and string.endswith(suffix):
return string[:-len(suffix)]
else:
return string[:]
if __name__ == "__main__":
main()
|