summaryrefslogtreecommitdiff
path: root/doc/extract-man-list.py
diff options
context:
space:
mode:
Diffstat (limited to 'doc/extract-man-list.py')
-rwxr-xr-xdoc/extract-man-list.py90
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)