diff options
Diffstat (limited to 'devscripts/make_readme.py')
-rwxr-xr-x | devscripts/make_readme.py | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/devscripts/make_readme.py b/devscripts/make_readme.py index fd234bf58..15c4a7c7d 100755 --- a/devscripts/make_readme.py +++ b/devscripts/make_readme.py @@ -2,6 +2,7 @@ # yt-dlp --help | make_readme.py # This must be run in a console of correct width +import functools import re import sys @@ -12,19 +13,44 @@ OPTIONS_END = 'CONFIGURATION' EPILOG_START = 'See full documentation' -helptext = sys.stdin.read() -if isinstance(helptext, bytes): - helptext = helptext.decode() +def take_section(text, start=None, end=None, *, shift=0): + return text[ + text.index(start) + shift if start else None: + text.index(end) + shift if end else None + ] -start, end = helptext.index(f'\n {OPTIONS_START}'), helptext.index(f'\n{EPILOG_START}') -options = re.sub(r'(?m)^ (\w.+)$', r'## \1', helptext[start + 1: end + 1]) + +def apply_patch(text, patch): + return re.sub(*patch, text) + + +options = take_section(sys.stdin.read(), f'\n {OPTIONS_START}', f'\n{EPILOG_START}', shift=1) + +switch_col_width = len(re.search(r'(?m)^\s{5,}', options).group()) +delim = f'\n{" " * switch_col_width}' + +PATCHES = ( + ( # Headings + r'(?m)^ (\w.+\n)( (?=\w))?', + r'## \1' + ), + ( # Do not split URLs + rf'({delim[:-1]})? (?P<label>\[\S+\] )?(?P<url>https?({delim})?:({delim})?/({delim})?/(({delim})?\S+)+)\s', + lambda mobj: ''.join((delim, mobj.group('label') or '', re.sub(r'\s+', '', mobj.group('url')), '\n')) + ), + # This creates issues with prepare_manpage + # ( # Avoid newline when a space is available b/w switch and description + # r'(?m)^(\s{4}-.{%d})(%s)' % (switch_col_width - 6, delim), + # r'\1 ' + # ), +) with open(README_FILE, encoding='utf-8') as f: readme = f.read() -header = readme[:readme.index(f'## {OPTIONS_START}')] -footer = readme[readme.index(f'# {OPTIONS_END}'):] - with open(README_FILE, 'w', encoding='utf-8') as f: - for part in (header, options, footer): - f.write(part) + f.write(''.join(( + take_section(readme, end=f'## {OPTIONS_START}'), + functools.reduce(apply_patch, PATCHES, options), + take_section(readme, f'# {OPTIONS_END}'), + ))) |