Files
openflow/doc/of-spec/make_latex_input.pl
T
Justin Pettit edf6b85346 Initial checkin of OpenFlow specification LaTeX source.
This version of the specification does not reflect the current checked in
version of OpenFlow.  Checkins that follow should bring them in-line.  The
TeX version of the spec was produced by Brandon Heller.
2008-09-23 15:35:00 -07:00

108 lines
2.2 KiB
Perl
Executable File

#!/usr/bin/perl -w
use strict;
sub handle_comment {
my ($comment) = @_;
my $next_line;
do {
$next_line = <INFILE>;
chomp $next_line;
$comment .= $next_line."\n";
} until ($next_line =~ m/\*\//);
return $comment;
}
sub handle_define {
my ($var, $val) = @_;
open(OUTFILE, ">define/$var");
print OUTFILE $val;
close(OUTFILE);
}
sub handle_multiline {
my ( $dir, $filename, $line_orig, $last_comment) = @_;
open(OUTFILE, ">$dir/$filename");
#print OUTFILE "\\scriptsize\n";
print OUTFILE "\\begin{footnotesize}\n";
print OUTFILE "\\begin{verbatim}\n";
#print OUTFILE "\\begin{lstlisting}[frame=htb]{$filename}\n";
print OUTFILE $last_comment;
print OUTFILE $line_orig;
my $next_line;
do {
$next_line = <INFILE>;
chomp $next_line;
print OUTFILE $next_line."\n";
} until ($next_line eq '};');
# add assertion line for structs
if ($dir eq 'struct') {
$next_line = <INFILE>;
print OUTFILE $next_line;
}
print OUTFILE "\\end{verbatim}\n";
#print OUTFILE "\\end{lstlisting}\n";
print OUTFILE "\\end{footnotesize}\n";
close(OUTFILE);
}
#----------------------------------------
use File::Path;
foreach my $type ('enum', 'struct', 'define') {
if (-d $type) {
rmtree ($type);
}
mkdir $type;
}
open(INFILE, "<../../include/openflow.h");
my $last_comment;
while(<INFILE>)
{
# Good practice to store $_ value because
# subsequent operations may change it.
my($line) = $_;
my $line_orig = $line;
my @line_split = split ' ',$line;
if (not defined($line_split[0])) {
$last_comment = '';
}
# Handle single-line comment
elsif ($line =~ m/^\/\*.*\*\//) {
$last_comment = $line;
#print $last_comment;
}
# Handle multi-line comment
elsif ($line =~ m/^\/\*/) {
$last_comment = handle_comment($line_orig);
#print $last_comment;
}
# Handle define
elsif ($line_split[0] eq '#define') {
handle_define($line_split[1],$line_split[2]);
$last_comment = '';
}
# Handle enum
elsif ($line_split[0] eq 'enum') {
handle_multiline('enum', $line_split[1], $line_orig, $last_comment);
$last_comment = '';
}
# Handle struct
elsif ($line_split[0] eq 'struct') {
handle_multiline('struct', $line_split[1], $line_orig, $last_comment);
$last_comment = '';
}
}
print "completed\n";