diff options
Diffstat (limited to 'doc/extract-man-list.py')
-rwxr-xr-x | doc/extract-man-list.py | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/doc/extract-man-list.py b/doc/extract-man-list.py new file mode 100755 index 0000000..9298041 --- /dev/null +++ b/doc/extract-man-list.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +# +# fontconfig/doc/extract-man-list.py +# +# Parses .fncs files and extracts list of man pages that will be generated +# +# Copyright © 2020 Tim-Philipp Müller +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +import sys +import re + +replacement_sets = [] + +# ------------------------------------- +# Read replacement sets from .fncs file +# ------------------------------------- + +def read_fncs_file(fn): + global replacement_sets + + with open(fn, 'r', encoding='utf8') as f: + fncs_text = f.read() + + # split into replacement sets + fncs_chunks = fncs_text.strip().split('@@') + + for chunk in fncs_chunks: + # get rid of any preamble such as license and FcFreeTypeQueryAll decl in fcfreetype.fncs + start = chunk.find('@') + if start: + chunk = chunk[start:] + + # split at '@' and remove empty lines (keep it simple instead of doing fancy + # things with regular expression matches, we control the input after all) + lines = [line for line in chunk.split('@') if line.strip()] + + replacement_set = {} + + while lines: + tag = lines.pop(0).strip() + # FIXME: this hard codes the tag used in funcs.sgml - we're lazy + if tag.startswith('PROTOTYPE'): + text = '' + else: + text = lines.pop(0).strip() + if text.endswith('%'): + text = text[:-1] + ' ' + + replacement_set[tag] = text + + if replacement_set: + replacement_sets += [replacement_set] + +# ---------------------------------------------------------------------------- +# Main +# ---------------------------------------------------------------------------- + +if len(sys.argv) < 2: + sys.exit('Usage: {} FILE1.FNCS [FILE2.FNCS...]'.format(sys.argv[0])) + +fout = sys.stdout + +for input_fn in sys.argv[1:]: + read_fncs_file(input_fn) + +# process template for each replacement set +for rep in replacement_sets: + if 'FUNC+' in rep: + man_page_title = rep.get('TITLE', rep['FUNC']) + else: + man_page_title = rep['FUNC'] + print(man_page_title) |