summaryrefslogtreecommitdiffstats
path: root/bin/list-dispatch-commands.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbin/list-dispatch-commands.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/bin/list-dispatch-commands.py b/bin/list-dispatch-commands.py
new file mode 100755
index 000000000..0b13f89e8
--- /dev/null
+++ b/bin/list-dispatch-commands.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python3
+
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""
+Script to generate https://wiki.documentfoundation.org/Development/DispatchCommands
+"""
+
+import argparse
+import os
+import sys
+
+
+def get_files_list(directory, extension):
+ array_items = []
+
+ dh = os.scandir(directory)
+ for entry in dh:
+ if entry.is_dir():
+ array_items += get_files_list(entry.path, extension)
+ elif entry.is_file():
+ if entry.name.endswith(extension):
+ array_items.append(entry.path)
+
+ return array_items
+
+
+def analyze_file(filename, all_slots):
+ with open(filename) as fh:
+ for line in fh:
+ if not line.startswith('// Slot Nr. '):
+ continue
+
+ tmp = line.split(':')
+ slot_id = tmp[1].strip()
+
+ line = next(fh)
+ tmp = line.split(',')
+ slot_rid = tmp[1]
+
+ next(fh)
+ next(fh)
+ line = next(fh)
+ mode = 'C' if 'CACHABLE' in line else ' '
+ mode += 'U' if 'AUTOUPDATE' in line else ' '
+ mode += 'M' if 'MENUCONFIG' in line else ' '
+ mode += 'T' if 'TOOLBOXCONFIG' in line else ' '
+ mode += 'A' if 'ACCELCONFIG' in line else ' '
+
+ next(fh)
+ next(fh)
+ line = next(fh)
+ if '"' not in line:
+ line = next(fh)
+ tmp = line.split('"')
+ try:
+ slot_name = '.uno:' + tmp[1]
+ except IndexError:
+ print("Warning: expected \" in line '%s' from file %s" % (line.strip(), filename),
+ file=sys.stderr)
+ slot_name = '.uno:'
+
+ if slot_name not in all_slots:
+ all_slots[slot_name] = {'slot_id': slot_id,
+ 'slot_rid': slot_rid,
+ 'mode': mode,
+ 'slot_description': ''}
+
+
+def analyze_xcu(filename, all_slots):
+ with open(filename) as fh:
+ for line in fh:
+ if '<node oor:name=".uno:' not in line:
+ continue
+
+ tmp = line.split('"')
+ slot_name = tmp[1]
+
+ while '<value xml:lang="en-US">' not in line:
+ try:
+ line = next(fh)
+ except StopIteration:
+ print("Warning: couldn't find '<value xml:lang=\"en-US\">' line in %s" % filename,
+ file=sys.stderr)
+ break
+
+ line = line.replace('<value xml:lang="en-US">', '')
+ line = line.replace('</value>', '').strip()
+
+ if slot_name in all_slots:
+ all_slots[slot_name]['slot_description'] = line.replace('~', '')
+
+
+def main():
+ modules = ['basslots', 'scslots', 'sdgslots', 'sdslots', 'sfxslots', 'smslots', 'svxslots', 'swslots']
+ sdi_dir = './workdir/SdiTarget'
+ sdi_ext = '.hxx'
+ xcu_dir = 'officecfg/registry/data/org/openoffice/Office/UI'
+ xcu_ext = '.xcu'
+ all_slots = {}
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('module', choices=modules)
+ args = parser.parse_args()
+
+ module_filename = args.module + sdi_ext
+
+ sdi_files = get_files_list(sdi_dir, sdi_ext)
+ for sdi_file in sdi_files:
+ sdi_file_basename = os.path.basename(sdi_file)
+ if sdi_file_basename == module_filename:
+ analyze_file(sdi_file, all_slots)
+
+ xcu_files = get_files_list(xcu_dir, xcu_ext)
+ for xcu_file in xcu_files:
+ analyze_xcu(xcu_file, all_slots)
+
+ for name in sorted(all_slots.keys()):
+ props = all_slots[name]
+ print('|-\n| %s' % name)
+ print('| %(slot_rid)s\n| %(slot_id)s\n| %(mode)s\n| %(slot_description)s' % props)
+
+ print("|-")
+
+if __name__ == '__main__':
+ main()