diff options
-rwxr-xr-x | tools/reformat.py | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/tools/reformat.py b/tools/reformat.py deleted file mode 100755 index 61306d0..0000000 --- a/tools/reformat.py +++ /dev/null @@ -1,132 +0,0 @@ -#! /usr/bin/python -######################################################################## -# -# reorder and reformat a file in columns -# -# this utility takes lines from its standard input and reproduces them, -# partially reordered and reformatted, on its standard output. -# -# It has the same effect as a 'sort | column -t', with the exception -# that empty lines, as well as lines which start with a '#' sign, are -# not affected, i.e. they keep their position and formatting, and act -# as separators, i.e. the parts before and after them are each sorted -# separately (but overall field widths are computed across the whole -# input). -# -# Options: -# -i: -# --ignore-case: -# Do not consider case when sorting. -# -d: -# --default: -# What to chage empty fields to. -# -s <N>: -# --split=<N>: -# Treat only the first N whitespace sequences as separators. -# line content after the Nth separator will count as only one -# field even if it contains whitespace. -# Example : '-s 2' causes input 'a b c d e' to be split into -# three fields, 'a', 'b', and 'c d e'. -# -# boards.cfg requires -ids 6. -# -######################################################################## - -import sys, getopt, locale - -# ensure we sort using the C locale. - -locale.setlocale(locale.LC_ALL, 'C') - -# check options - -maxsplit = 0 -ignore_case = 0 -default_field ='' - -try: - opts, args = getopt.getopt(sys.argv[1:], "id:s:", - ["ignore-case","default","split="]) -except getopt.GetoptError as err: - print str(err) # will print something like "option -a not recognized" - sys.exit(2) - -for o, a in opts: - if o in ("-s", "--split"): - maxsplit = eval(a) - elif o in ("-i", "--ignore-case"): - ignore_case = 1 - elif o in ("-d", "--default"): - default_field = a - else: - assert False, "unhandled option" - -# collect all lines from standard input and, for the ones which must be -# reformatted and sorted, count their fields and compute each field's -# maximum size - -input_lines = [] -field_width = [] - -for line in sys.stdin: - # remove final end of line - input_line = line.strip('\n') - if (len(input_line)>0) and (input_line[0] != '#'): - # sortable line: split into fields - fields = input_line.split(None,maxsplit) - # if there are new fields, top up field_widths - for f in range(len(field_width), len(fields)): - field_width.append(0) - # compute the maximum witdh of each field - for f in range(len(fields)): - field_width[f] = max(field_width[f],len(fields[f])) - # collect the line for next stage - input_lines.append(input_line) - -# run through collected input lines, collect the ones which must be -# reformatted and sorted, and whenever a non-reformattable, non-sortable -# line is met, sort the collected lines before it and append them to the -# output lines, then add the non-sortable line too. - -output_lines = [] -sortable_lines = [] -for input_line in input_lines: - if (len(input_line)>0) and (input_line[0] != '#'): - # this line should be reformatted and sorted - input_fields = input_line.split(None,maxsplit) - output_fields = []; - # reformat each field to this field's column width - for f in range(len(input_fields)): - output_field = input_fields[f]; - output_fields.append(output_field.ljust(field_width[f])) - # any missing field is set to default if it exists - if default_field != '': - for f in range(len(input_fields),len(field_width)): - output_fields.append(default_field.ljust(field_width[f])) - # join fields using two spaces, like column -t would - output_line = ' '.join(output_fields); - # collect line for later - sortable_lines.append(output_line) - else: - # this line is non-sortable - # sort collected sortable lines - if ignore_case!=0: - sortable_lines.sort(key=lambda x: str.lower(locale.strxfrm(x))) - else: - sortable_lines.sort(key=lambda x: locale.strxfrm(x)) - # append sortable lines to the final output - output_lines.extend(sortable_lines) - sortable_lines = [] - # append non-sortable line to the final output - output_lines.append(input_line) -# maybe we had sortable lines pending, so append them to the final output -if ignore_case!=0: - sortable_lines.sort(key=lambda x: str.lower(locale.strxfrm(x))) -else: - sortable_lines.sort(key=lambda x: locale.strxfrm(x)) -output_lines.extend(sortable_lines) - -# run through output lines and print them, except rightmost whitespace - -for output_line in output_lines: - print output_line.rstrip() |