mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/python3
 | |
| # -*- mode: python; coding: utf-8; eval: (blacken-mode); -*-
 | |
| r"""
 | |
| Fetch right Doxygen man file, replace dummy parts, and fixup nroff
 | |
| """
 | |
| import argparse
 | |
| import re
 | |
| import sys
 | |
| from subprocess import call
 | |
| from pathlib import Path
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     p = argparse.ArgumentParser(description=__doc__.strip())
 | |
|     p.add_argument("htmldir", type=Path)
 | |
|     p.add_argument("page")
 | |
|     p.add_argument("name")
 | |
|     p.add_argument("section")
 | |
|     p.add_argument("version")
 | |
|     args = p.parse_args()
 | |
| 
 | |
|     page, name, section, version = args.page, args.name, args.section, args.version
 | |
| 
 | |
|     mandir = args.htmldir / ".." / "man" / "man3"
 | |
|     fn = mandir / f"{page}.3"
 | |
| 
 | |
|     # Doxygen < 1.9.7 names .md file output differently...
 | |
|     if not fn.exists():
 | |
|         page2 = page.replace("page_man_", "md_doc_dox_programs_").replace("-", "_")
 | |
|         fn = mandir / f"{page2}.3"
 | |
|         if not fn.exists():
 | |
|             page2 = page.replace("page_man_", "md_doc_dox_config_").replace("-", "_")
 | |
|             fn = mandir / f"{page2}.3"
 | |
|     else:
 | |
|         page2 = None
 | |
| 
 | |
|     try:
 | |
|         with open(fn, "r") as f:
 | |
|             text = f.read()
 | |
|     except:
 | |
|         print(f"ERROR: man file {fn} missing!", file=sys.stderr)
 | |
|         call(["ls", "-R", str(args.htmldir / ".." / "man")], stdout=sys.stderr)
 | |
|         raise
 | |
| 
 | |
|     text = text.replace(page, name)
 | |
|     if page2 is not None:
 | |
|         text = text.replace(page2, name)
 | |
| 
 | |
|     # Replace bad nroff header
 | |
|     text = re.sub(
 | |
|         r"^(\.TH[^\n]*)\n",
 | |
|         rf'.TH "{name}" {section} "{version}" "PipeWire" \\" -*- nroff -*-\n',
 | |
|         text,
 | |
|     )
 | |
| 
 | |
|     # Fixup name field (can't be done in Doxygen, otherwise HTML looks bac)
 | |
|     text = re.sub(
 | |
|         rf"^\.SH NAME\s*\n{name} \\- {name}\s*\n\.PP\n *",
 | |
|         rf".SH NAME\n{name} \\- ",
 | |
|         text,
 | |
|         count=1,
 | |
|         flags=re.M,
 | |
|     )
 | |
| 
 | |
|     # Add DESCRIPTION section if missing and NAME field has extra stuff
 | |
|     if not re.search(r"^\.SH DESCRIPTION\s*\n", text):
 | |
|         text = re.sub(
 | |
|             r"^(.SH NAME\s*\n[^\.].*\n)\.PP\s*\n([^\.\n ]+)",
 | |
|             r"\1.SH DESCRIPTION\n.PP\n\2",
 | |
|             text,
 | |
|             count=1,
 | |
|             flags=re.M,
 | |
|         )
 | |
| 
 | |
|     # Upcase titles
 | |
|     def upcase(m):
 | |
|         return m.group(0).upper()
 | |
| 
 | |
|     text = re.sub(r"^\.SH .*?$", upcase, text, flags=re.M)
 | |
| 
 | |
|     # Replace PW_KEY_*, SPA_KEY_* by their values
 | |
|     def pw_key(m):
 | |
|         key = m.group(0)
 | |
|         key = key.replace("PW_KEY_", "").lower().replace("_", ".")
 | |
|         if key in ("protocol", "access", "client.access") or key.startswith("sec."):
 | |
|             return f"pipewire.{key}"
 | |
|         return key
 | |
| 
 | |
|     def spa_key(m):
 | |
|         key = m.group(0)
 | |
|         return key.replace("SPA_KEY_", "").lower().replace("_", ".")
 | |
| 
 | |
|     text = re.sub(r"PW_KEY_[A-Z_]+", pw_key, text, flags=re.S)
 | |
|     text = re.sub(r"SPA_KEY_[A-Z_]+", spa_key, text, flags=re.S)
 | |
| 
 | |
|     print(text)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 | 
