mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05: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()
 |