#!/usr/bin/perl @lines; while (<>) { push @lines, $_; } $l = 0; $found = 0; while (1) { if ($lines[$l] =~ m{^/\*!}) { last if $found == 2; $found++; } print $lines[$l]; $l++; } $cmdlines = [$line]; %cmds; $cmdname = ""; while (1) { $line = $lines[$l]; if ($line =~ /{ LFUN_NOACTION, "", Noop, Hidden }/) { push @$cmdlines, "\n"; $cmds{$cmdname} = $cmdlines; $cmdlines = [$line]; last; } if ($line =~ m/^\s*{\s*LFUN_([^,]+)/) { $cmdname = $1; push @$cmdlines, $line; } elsif ($line =~ m{^/\*!}) { push @$cmdlines, "\n"; $cmds{$cmdname} = $cmdlines; $cmdlines = [$line]; } else { push @$cmdlines, $line; } $l++; } # Now output those, in order foreach $c (sort keys %cmds) { print @{$cmds{$c}}; } while ($l < scalar @lines) { print $lines[$l]; $l++; }