1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 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()
|