blob: a0fe34349b24fccd9fb9b8834ea51d3e2d9e155a [file] [log] [blame]
Linus Torvalds7683e9e2017-07-23 16:06:21 -07001#!/usr/bin/perl -w
2
3use strict;
4
5my %map;
6
7# sort comparison function
8sub by_category($$) {
9 my ($a, $b) = @_;
10
11 $a = uc $a;
12 $b = uc $b;
13
14 # This always sorts last
15 $a =~ s/THE REST/ZZZZZZ/g;
16 $b =~ s/THE REST/ZZZZZZ/g;
17
18 $a cmp $b;
19}
20
21sub alpha_output {
22 my $key;
23 my $sort_method = \&by_category;
24 my $sep = "";
25
26 foreach $key (sort $sort_method keys %map) {
27 if ($key ne " ") {
28 print $sep . $key . "\n";
29 $sep = "\n";
30 }
31 print $map{$key};
32 }
33}
34
35sub trim {
36 my $s = shift;
37 $s =~ s/\s+$//;
38 $s =~ s/^\s+//;
39 return $s;
40}
41
42sub file_input {
43 my $lastline = "";
44 my $case = " ";
45 $map{$case} = "";
46
47 while (<>) {
48 my $line = $_;
49
50 # Pattern line?
51 if ($line =~ m/^([A-Z]):\s*(.*)/) {
52 $line = $1 . ":\t" . trim($2) . "\n";
53 if ($lastline eq "") {
54 $map{$case} = $map{$case} . $line;
55 next;
56 }
57 $case = trim($lastline);
58 exists $map{$case} and die "Header '$case' already exists";
59 $map{$case} = $line;
60 $lastline = "";
61 next;
62 }
63
64 if ($case eq " ") {
65 $map{$case} = $map{$case} . $lastline;
66 $lastline = $line;
67 next;
68 }
69 trim($lastline) eq "" or die ("Odd non-pattern line '$lastline' for '$case'");
70 $lastline = $line;
71 }
72 $map{$case} = $map{$case} . $lastline;
73}
74
75&file_input;
76&alpha_output;
77exit(0);