diff --git a/bin/doc/getparameterlist.py b/bin/doc/getparameterlist.py index b085eaaf4d0a2aa4b1af37881c35a1a4de98ce27..9a3509b4c4c45491a8015c5e10cb55095dae2fc0 100644 --- a/bin/doc/getparameterlist.py +++ b/bin/doc/getparameterlist.py @@ -80,7 +80,7 @@ def getParamsFromFile(file): # print encountered errors if errors: - print('\n\n{} paramter{} in file {} could not be retrieved automatically. Please check them yourself:'.format(len(errors), 's' if len(errors) > 1 else '', file)) + print('\n\n{} parameter{} in file {} could not be retrieved automatically. Please check them yourself:'.format(len(errors), 's' if len(errors) > 1 else '', file)) for lineIdx in errors: print("\n\t-> line {}: {}".format(lineIdx, errors[lineIdx]['line'])) print("\t\t-> error message: {}".format(errors[lineIdx]['message'])) @@ -108,15 +108,19 @@ for params in parameters: parameterDict[key] = params parameterDict[key]['defaultValue'] = [params['defaultValue']] parameterDict[key]['paramType'] = [params['paramType']] -sortedParameterDict = {key: value for key, value in sorted(parameterDict.items())} +parameterDict = {key: value for key, value in sorted(parameterDict.items())} -tableEntriesWithGroup = [] -tableEntriesWithoutGroup = [] -previousGroupEntry = None +# determine actual entries (from duplicates) +# and determine maximum occurring column widths +maxGroupWidth = 0 +maxParamWidth = 0 +maxTypeWidth = 0 +maxDefaultWidth = 0 -for key in sortedParameterDict: +tableEntryData = [] +for key in parameterDict: - entry = sortedParameterDict[key] + entry = parameterDict[key] hasGroup = True if entry['paramName'].count('.') != 0 else False groupEntry = '-' if not hasGroup else entry['paramName'].split('.')[0] paramName = entry['paramName'] if not hasGroup else entry['paramName'].partition('.')[2] @@ -125,13 +129,34 @@ for key in sortedParameterDict: paramType = entry['paramType'][0] defaultValue = entry['defaultValue'][0] if entry['defaultValue'][0] != None else '' + maxGroupWidth = max(maxGroupWidth, len(groupEntry)+3) # +3 because \b will be added later + maxParamWidth = max(maxParamWidth, len(paramName)) + maxTypeWidth = max(maxTypeWidth, len(paramType)) + maxDefaultWidth = max(maxDefaultWidth, len(defaultValue)) + tableEntryData.append({'group': groupEntry, 'name': paramName, 'type': paramType, 'default': defaultValue}) + +# generate actual table entries +tableEntriesWithGroup = [] +tableEntriesWithoutGroup = [] +previousGroupEntry = None + +for data in tableEntryData: + + groupEntry = data['group'] + paramName = data['name'] + paramType = data['type'] + defaultValue = data['default'] + if groupEntry != previousGroupEntry: previousGroupEntry = groupEntry - if hasGroup: groupEntry = '\\b ' + groupEntry + if groupEntry != '-': groupEntry = '\\b ' + groupEntry - tableEntry = ' * | {} | {} | {} | {} | TODO: explanation |'.format(groupEntry, paramName , paramType , defaultValue) + tableEntry = ' * | {} | {} | {} | {} | TODO: explanation |'.format(groupEntry.ljust(maxGroupWidth), + paramName.ljust(maxParamWidth), + paramType.ljust(maxTypeWidth), + defaultValue.ljust(maxDefaultWidth)) - if hasGroup: tableEntriesWithGroup.append(tableEntry) + if groupEntry != '-': tableEntriesWithGroup.append(tableEntry) else: tableEntriesWithoutGroup.append(tableEntry) # combine entries @@ -146,11 +171,24 @@ header = """/*! * The listed run-time parameters are available in general, * but we point out that a certain model might not be able * to use every parameter! - * - * | Group | Parameter | Type | Default Value | Explanation | - * | :- | :- | :- | :- | :- | - * | - | ParameterFile | std::string| executable.input | name of the parameter file | -""" + *\n""" +header += " * | " + "Group".ljust(maxGroupWidth) +header += " | " + "Parameter".ljust(maxParamWidth) +header += " | " + "Type".ljust(maxTypeWidth) +header += " | " + "Default Value".ljust(maxDefaultWidth) +header += " | Explanation |\n" + +header += " * | " + ":-".ljust(maxGroupWidth) +header += " | " + ":-".ljust(maxParamWidth) +header += " | " + ":-".ljust(maxTypeWidth) +header += " | " + ":-".ljust(maxDefaultWidth) +header += " | :- |\n" + +header += " * | " + "".ljust(maxGroupWidth) +header += " | " + "ParameterFile".ljust(maxParamWidth) +header += " | " + "std::string".ljust(maxTypeWidth) +header += " | " + "executable.input".ljust(maxDefaultWidth) +header += " | :- |\n" # overwrite the old parameterlist.txt file with open(rootDir + '/../doc/doxygen/extradoc/parameterlist.txt', "w") as outputfile: