comex wrote:
>Anyone have the script for FLR-->SLR?

Attached.

-zefram
#!/usr/bin/perl

use warnings;
use strict;

use IO::Handle;

{
        my $peeked_line;
        sub peekline() {
                unless(defined $peeked_line) {
                        local $/ = "\n";
                        $peeked_line = STDIN->getline;
                        die "hit EOF unexpectedly" unless defined $peeked_line;
                        die "incomplete line" unless $peeked_line =~ /\n\z/;
                }
                return $peeked_line;
        }
        sub getline() {
                my $line = peekline();
                $peeked_line = undef;
                return $line;
        }
}

getline eq "THE FULL LOGICAL RULESET\n" or die;
print "THE SHORT LOGICAL RULESET\n";
until(peekline =~ /\A---/) {
        print getline;
}
getline until peekline =~ /\A===/;


CATEGORY: while(1) {
        print getline, getline;
        getline until peekline =~ /\A---/;
        print getline;
        while(1) {
                die unless getline eq "\n";
                if(peekline =~ /\A===/) {
                        print "\n";
                        next CATEGORY;
                }
                last CATEGORY unless peekline =~
                        m#\ARule (\d+)/(\d+) \(Power=(\d(?:\.\d+)?)\)\n\z#;
                print "\n", getline, getline;
                die unless getline eq "\n";
                my $had_any_text = 0;
                my $had_non_text = 0;
                while(1) {
                        last if peekline =~ /\A---/;
                        my $para = "";
                        $para .= getline while peekline ne "\n";
                        getline;
                        if($para =~ /\A /) {
                                die if $had_non_text;
                                $had_any_text = 1;
                                print "\n", $para;
                        } elsif($para =~ /\ACFJ /) {
                                $had_non_text = 1;
                                print "\n", $para;
                        } elsif($para =~ /\A\[|\AHistory:/) {
                                $had_non_text = 1;
                        } else {
                                die;
                        }
                }
                die unless $had_any_text;
                print "\n", getline;
        }
}

die unless peekline eq "END OF THE FULL LOGICAL RULESET\n";
print "\nEND OF THE SHORT LOGICAL RULESET\n";
die if defined STDIN->getline;
exit 0;

Reply via email to