mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-19 10:29:30 +01:00
Channels: Properly check for arguments to chanadd/chanrem
HashObject: Fix potential divide by zero compiler_vm: Limit cpu usage and kill processes using excess cpu Unbuffer stdout
This commit is contained in:
parent
65660625c2
commit
f61bb61aeb
@ -379,7 +379,6 @@ sub prune_message_history {
|
|||||||
foreach my $mask (keys %{ $self->{message_history} }) {
|
foreach my $mask (keys %{ $self->{message_history} }) {
|
||||||
foreach my $channel (keys %{ $self->{message_history}->{$mask}->{channels} }) {
|
foreach my $channel (keys %{ $self->{message_history}->{$mask}->{channels} }) {
|
||||||
|
|
||||||
$self->{pbot}->logger->log("Checking [$mask][$channel]\n");
|
|
||||||
my $length = $#{ $self->{message_history}->{$mask}->{channels}->{$channel}{messages} } + 1;
|
my $length = $#{ $self->{message_history}->{$mask}->{channels}->{$channel}{messages} } + 1;
|
||||||
next unless $length > 0;
|
next unless $length > 0;
|
||||||
my %last = %{ @{ $self->{message_history}->{$mask}->{channels}->{$channel}{messages} }[$length - 1] };
|
my %last = %{ @{ $self->{message_history}->{$mask}->{channels}->{$channel}{messages} }[$length - 1] };
|
||||||
|
@ -70,7 +70,7 @@ sub unset {
|
|||||||
sub add {
|
sub add {
|
||||||
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||||
|
|
||||||
if(not defined $arguments) {
|
if(not defined $arguments or not length $arguments) {
|
||||||
return "/msg $nick Usage: chanadd <channel>";
|
return "/msg $nick Usage: chanadd <channel>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ sub add {
|
|||||||
sub remove {
|
sub remove {
|
||||||
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||||
|
|
||||||
if(not defined $arguments) {
|
if(not defined $arguments or not length $arguments) {
|
||||||
return "/msg $nick Usage: chanrem <channel>";
|
return "/msg $nick Usage: chanrem <channel>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ sub levenshtein_matches {
|
|||||||
|
|
||||||
# print "Percentage: ", $distance / $length, "\n";
|
# print "Percentage: ", $distance / $length, "\n";
|
||||||
|
|
||||||
if($distance / $length < 0.50) {
|
if($length != 0 && $distance / $length < 0.50) {
|
||||||
$result .= $comma . $index;
|
$result .= $comma . $index;
|
||||||
$comma = ", ";
|
$comma = ", ";
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,8 @@ use warnings;
|
|||||||
# These are set automatically by the build/commit script
|
# These are set automatically by the build/commit script
|
||||||
use constant {
|
use constant {
|
||||||
BUILD_NAME => "PBot",
|
BUILD_NAME => "PBot",
|
||||||
BUILD_REVISION => 385,
|
BUILD_REVISION => 386,
|
||||||
BUILD_DATE => "2012-09-17",
|
BUILD_DATE => "2012-10-04",
|
||||||
};
|
};
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -101,7 +101,7 @@ sub execute {
|
|||||||
} else {
|
} else {
|
||||||
waitpid($child, 0);
|
waitpid($child, 0);
|
||||||
my $result = $? >> 8;
|
my $result = $? >> 8;
|
||||||
print "child exited, parent continuing\n";
|
print "child exited, parent continuing [result = $result]\n";
|
||||||
return (undef, $result);
|
return (undef, $result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -117,7 +117,8 @@ sub compiler_server {
|
|||||||
my $hostinfo = gethostbyaddr($client->peeraddr);
|
my $hostinfo = gethostbyaddr($client->peeraddr);
|
||||||
print '-' x 20, "\n";
|
print '-' x 20, "\n";
|
||||||
printf "[Connect from %s]\n", $client->peerhost;
|
printf "[Connect from %s]\n", $client->peerhost;
|
||||||
my $timed_out;
|
my $timed_out = 0;
|
||||||
|
my $killed = 0;
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
my $lang;
|
my $lang;
|
||||||
@ -144,19 +145,29 @@ sub compiler_server {
|
|||||||
|
|
||||||
if(not defined $ret) {
|
if(not defined $ret) {
|
||||||
#print "parent continued\n";
|
#print "parent continued\n";
|
||||||
|
print "parent continued [$result]\n";
|
||||||
$timed_out = 1 if $result == 243; # -13 == 243
|
$timed_out = 1 if $result == 243; # -13 == 243
|
||||||
|
$killed = 1 if $result == 242; # -14 = 242
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
|
|
||||||
$result =~ s/\s+$//;
|
$result =~ s/\s+$//;
|
||||||
print "Ret: $ret; result: [$result]\n";
|
print "Ret: $ret; result: [$result]\n";
|
||||||
|
|
||||||
|
if($result =~ m/Killed$/) {
|
||||||
|
print "Processed was killed\n";
|
||||||
|
$killed = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if($ret == -13) {
|
if($ret == -13) {
|
||||||
print $client "$nick: ";
|
print $client "$nick: ";
|
||||||
}
|
}
|
||||||
|
|
||||||
print $client $result . "\n";
|
print $client $result . "\n";
|
||||||
close $client;
|
close $client;
|
||||||
|
|
||||||
|
$ret = -14 if $killed;
|
||||||
|
|
||||||
# child exit
|
# child exit
|
||||||
# print "child exit\n";
|
# print "child exit\n";
|
||||||
exit $ret;
|
exit $ret;
|
||||||
@ -170,7 +181,6 @@ sub compiler_server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$code .= $line . "\n";
|
$code .= $line . "\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alarm 0;
|
alarm 0;
|
||||||
@ -180,7 +190,7 @@ sub compiler_server {
|
|||||||
|
|
||||||
close $client;
|
close $client;
|
||||||
|
|
||||||
next unless $timed_out;
|
next unless ($timed_out or $killed);
|
||||||
|
|
||||||
print "stopping vm $vm_pid\n";
|
print "stopping vm $vm_pid\n";
|
||||||
vm_stop $vm_pid;
|
vm_stop $vm_pid;
|
||||||
|
@ -728,8 +728,6 @@ if($lang eq 'C' or $lang eq 'C99' or $lang eq 'C11' or $lang eq 'C++') {
|
|||||||
$prelude .= $1;
|
$prelude .= $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#$prelude = "$1" if $precode =~ s/^\s*(#.*\n)//s;
|
|
||||||
|
|
||||||
print "*** prelude: [$prelude]\n precode: [$precode]\n" if $debug;
|
print "*** prelude: [$prelude]\n precode: [$precode]\n" if $debug;
|
||||||
|
|
||||||
# strip C and C++ style comments
|
# strip C and C++ style comments
|
||||||
@ -806,7 +804,7 @@ if($lang eq 'C' or $lang eq 'C99' or $lang eq 'C11' or $lang eq 'C++') {
|
|||||||
$precode =~ s/^{(.*)}$/$1/s;
|
$precode =~ s/^{(.*)}$/$1/s;
|
||||||
|
|
||||||
if(not $has_main) {
|
if(not $has_main) {
|
||||||
$code = "$prelude\n\n$code\n\nint main(int argc, char **argv) {\n$precode\n;\nreturn 0;\n}\n";
|
$code = "$prelude\n\n$code\n\nint main(void) {\n$precode\n;\nreturn 0;\n}\n";
|
||||||
$nooutput = "No warnings, errors or output.";
|
$nooutput = "No warnings, errors or output.";
|
||||||
} else {
|
} else {
|
||||||
print "code: [$code]; precode: [$precode]\n" if $debug;
|
print "code: [$code]; precode: [$precode]\n" if $debug;
|
||||||
@ -897,7 +895,8 @@ if($output =~ m/^\s*$/) {
|
|||||||
$output =~ s/, <incomplete sequence >//g;
|
$output =~ s/, <incomplete sequence >//g;
|
||||||
$output =~ s/\s*warning: shadowed declaration is here \[-Wshadow\]//g;
|
$output =~ s/\s*warning: shadowed declaration is here \[-Wshadow\]//g;
|
||||||
$output =~ s/preprocessor macro>\s+<at\s+>/preprocessor macro>/g;
|
$output =~ s/preprocessor macro>\s+<at\s+>/preprocessor macro>/g;
|
||||||
$output =~ s/<No symbol table is loaded. Use the "file" command.>\s*//;
|
$output =~ s/<No symbol table is loaded. Use the "file" command.>\s*//g;
|
||||||
|
$output =~ s/cc1: all warnings being treated as; errors//g;
|
||||||
|
|
||||||
# remove duplicate warnings/infos
|
# remove duplicate warnings/infos
|
||||||
$output =~ s/(\[*.*warning:.*?\s*)\1/$1/g;
|
$output =~ s/(\[*.*warning:.*?\s*)\1/$1/g;
|
||||||
|
@ -358,6 +358,11 @@ sub execute {
|
|||||||
exit 0;
|
exit 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($line =~ m/Program terminated with signal SIGKILL/) {
|
||||||
|
print "Killed\n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if($line =~ m/Program received signal SIGTRAP/) {
|
if($line =~ m/Program received signal SIGTRAP/) {
|
||||||
my $output = "";
|
my $output = "";
|
||||||
my $line = <$out>;
|
my $line = <$out>;
|
||||||
|
@ -83,6 +83,7 @@ static int printf_binary_arginfo(const struct printf_info *info, size_t n, int *
|
|||||||
|
|
||||||
__attribute__ (( constructor )) static void printf_binary_register(void)
|
__attribute__ (( constructor )) static void printf_binary_register(void)
|
||||||
{
|
{
|
||||||
|
setvbuf(stdout, NULL, _IONBF, 0);
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
register_printf_specifier('b', printf_binary_handler, printf_binary_arginfo);
|
register_printf_specifier('b', printf_binary_handler, printf_binary_arginfo);
|
||||||
}
|
}
|
||||||
@ -92,7 +93,7 @@ __attribute__ (( constructor )) static void printf_binary_register(void)
|
|||||||
#define STR(s) #s
|
#define STR(s) #s
|
||||||
#define REVEAL(s) STR(s)
|
#define REVEAL(s) STR(s)
|
||||||
|
|
||||||
void gdb() { asm(""); }
|
void gdb() { __asm__(""); }
|
||||||
#define dump(expression) gdb("print " #expression)
|
#define dump(expression) gdb("print " #expression)
|
||||||
#define print(expression) gdb("print " #expression)
|
#define print(expression) gdb("print " #expression)
|
||||||
#define ptype(expression) gdb("ptype " #expression)
|
#define ptype(expression) gdb("ptype " #expression)
|
||||||
|
@ -8,7 +8,7 @@ use strict;
|
|||||||
use HTML::Entities;
|
use HTML::Entities;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
|
||||||
my $debug = 9999;
|
my $debug = 1000;
|
||||||
|
|
||||||
sub gen_data;
|
sub gen_data;
|
||||||
sub gen_txt;
|
sub gen_txt;
|
||||||
@ -34,8 +34,8 @@ my $footnote = 0;
|
|||||||
my $last_footnote = 0;
|
my $last_footnote = 0;
|
||||||
|
|
||||||
gen_data;
|
gen_data;
|
||||||
gen_txt;
|
#gen_txt;
|
||||||
#gen_html;
|
gen_html;
|
||||||
|
|
||||||
sub gen_data {
|
sub gen_data {
|
||||||
while($text =~ m/^\s{0,5}([0-9A-Z]+\.[0-9\.]*)/msg) {
|
while($text =~ m/^\s{0,5}([0-9A-Z]+\.[0-9\.]*)/msg) {
|
||||||
@ -45,11 +45,11 @@ sub gen_data {
|
|||||||
|
|
||||||
($section_number) = $this_section =~ /([^.]+)\./;
|
($section_number) = $this_section =~ /([^.]+)\./;
|
||||||
|
|
||||||
print STDERR "----------------------------------\n" if $debug >= 2;
|
print STDERR "----------------------------------\n" if $debug;
|
||||||
print STDERR "Processing section [$this_section]; number [$section_number]\n" if $debug;
|
print STDERR "Processing section [$this_section]; number [$section_number]\n" if $debug;
|
||||||
|
|
||||||
print STDERR "this_section: [$this_section]; last_section: [$last_section]\n";
|
print STDERR "this_section: [$this_section]; last_section: [$last_section]\n" if $debug >= 2;
|
||||||
print STDERR "Section diff: ", ($this_section - $last_section), "\n";
|
print STDERR "Section diff: ", ($this_section - $last_section), "\n" if $debug >= 2;
|
||||||
|
|
||||||
my $diff = $section_number - $last_section_number;
|
my $diff = $section_number - $last_section_number;
|
||||||
print STDERR "Diff: $diff\n" if $debug >= 2;
|
print STDERR "Diff: $diff\n" if $debug >= 2;
|
||||||
@ -64,7 +64,7 @@ sub gen_data {
|
|||||||
if($text =~ m/(.*?)^(?=\s{0,4}[0-9A-Z]+\.)/msg) {
|
if($text =~ m/(.*?)^(?=\s{0,4}[0-9A-Z]+\.)/msg) {
|
||||||
$section_text = $1;
|
$section_text = $1;
|
||||||
} else {
|
} else {
|
||||||
print STDERR "No section text, end of file marker found.\n" if $debug >= 4;
|
print STDERR "No section text, end of file marker found.\n";
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,12 +100,12 @@ sub gen_data {
|
|||||||
$footnote = $2;
|
$footnote = $2;
|
||||||
my $middle_spaces = $3;
|
my $middle_spaces = $3;
|
||||||
my $footnote_text = "$4\n";
|
my $footnote_text = "$4\n";
|
||||||
print STDERR "1st footnote\n";
|
print STDERR "1st footnote\n" if $debug;
|
||||||
print STDERR "processing footnote $footnote [last: $last_footnote]\n" if $debug >= 2;
|
print STDERR "processing footnote $footnote [last: $last_footnote]\n" if $debug >= 2;
|
||||||
if($last_footnote - $footnote != -1) {
|
if($last_footnote - $footnote != -1) {
|
||||||
print STDERR "footnotes dump: \n";
|
print STDERR "footnotes dump: \n" if $debug > 5;
|
||||||
shift @footnotes;
|
shift @footnotes;
|
||||||
my $dump = Dumper(@footnotes);
|
my $dump = Dumper(@footnotes) if $debug > 5;
|
||||||
#print STDERR "$dump\n";
|
#print STDERR "$dump\n";
|
||||||
die "Footnote diff invalid";
|
die "Footnote diff invalid";
|
||||||
}
|
}
|
||||||
@ -118,26 +118,26 @@ sub gen_data {
|
|||||||
|
|
||||||
while ($t =~ m/^(.*?)$/msgc) {
|
while ($t =~ m/^(.*?)$/msgc) {
|
||||||
my $line = $1;
|
my $line = $1;
|
||||||
print STDERR "processing [$line]\n";
|
print STDERR "processing [$line]\n" if $debug;
|
||||||
|
|
||||||
if($line =~ m/^(\s*)(\d+)\)(\s*)(.*?)$/msg) {
|
if($line =~ m/^(\s*)(\d+)\)(\s*)(.*?)$/msg) {
|
||||||
print STDERR "----------------\n" if $debug >= 10;
|
print STDERR "----------------\n" if $debug >= 1;
|
||||||
print STDERR "footnote $footnote: [$footnote_text]\n" if $debug >= 5;
|
print STDERR "footnote $footnote: [$footnote_text]\n" if $debug >= 1;
|
||||||
$footnotes[$footnote] = $footnote_text;
|
$footnotes[$footnote] = $footnote_text;
|
||||||
print STDERR "----------------\n" if $debug >= 10;
|
print STDERR "----------------\n" if $debug >= 1;
|
||||||
|
|
||||||
$leading_spaces = $1;
|
$leading_spaces = $1;
|
||||||
$footnote = $2;
|
$footnote = $2;
|
||||||
$middle_spaces = $3;
|
$middle_spaces = $3;
|
||||||
$footnote_text = "$4\n";
|
$footnote_text = "$4\n";
|
||||||
|
|
||||||
print STDERR "2nd footnote\n";
|
print STDERR "2nd footnote\n" if $debug >= 2;
|
||||||
print STDERR "processing footnote $footnote [last: $last_footnote]\n" if $debug >= 2;
|
print STDERR "processing footnote $footnote [last: $last_footnote]\n" if $debug >= 2;
|
||||||
if($last_footnote - $footnote != -1) {
|
if($last_footnote - $footnote != -1) {
|
||||||
print STDERR "footnotes dump: \n";
|
print STDERR "footnotes dump: \n";
|
||||||
shift @footnotes;
|
shift @footnotes;
|
||||||
my $dump = Dumper(@footnotes);
|
my $dump = Dumper(@footnotes);
|
||||||
#print STDERR "$dump\n";
|
print STDERR "$dump\n" if $debug >= 3;
|
||||||
die "Footnote diff invalid";
|
die "Footnote diff invalid";
|
||||||
}
|
}
|
||||||
$last_footnote = $footnote;
|
$last_footnote = $footnote;
|
||||||
@ -157,10 +157,10 @@ sub gen_data {
|
|||||||
print STDERR "footnote $footnote text: appending [$line]\n" if $debug >= 3;
|
print STDERR "footnote $footnote text: appending [$line]\n" if $debug >= 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
print STDERR "----------------\n" if $debug >= 10;
|
print STDERR "----------------\n" if $debug >= 1;
|
||||||
print STDERR "footnote $footnote: [$footnote_text]\n" if $debug >= 5;
|
print STDERR "footnote $footnote: [$footnote_text]\n" if $debug >= 1;
|
||||||
$footnotes[$footnote] = $footnote_text;
|
$footnotes[$footnote] = $footnote_text;
|
||||||
print STDERR "----------------\n" if $debug >= 10;
|
print STDERR "----------------\n" if $debug >= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sections{$this_section . "p$p"}{text} = "$p $t";
|
$sections{$this_section . "p$p"}{text} = "$p $t";
|
||||||
@ -171,7 +171,7 @@ sub gen_data {
|
|||||||
|
|
||||||
sub bysection {
|
sub bysection {
|
||||||
my $inverse = 1;
|
my $inverse = 1;
|
||||||
print STDERR "section cmp $a <=> $b\n";
|
print STDERR "section cmp $a <=> $b\n" if $debug > 10;
|
||||||
|
|
||||||
my ($a1, $p1) = split /p/, $a;
|
my ($a1, $p1) = split /p/, $a;
|
||||||
my ($b1, $p2) = split /p/, $b;
|
my ($b1, $p2) = split /p/, $b;
|
||||||
@ -210,22 +210,22 @@ sub bysection {
|
|||||||
if(not defined $k2[$i]) {
|
if(not defined $k2[$i]) {
|
||||||
$r[$i] = 1;
|
$r[$i] = 1;
|
||||||
} else {
|
} else {
|
||||||
print STDERR " cmp k1[$i] ($k1[$i]) vs k2[$i] ($k2[$i])\n";
|
print STDERR " cmp k1[$i] ($k1[$i]) vs k2[$i] ($k2[$i])\n" if $debug >= 5;
|
||||||
if($i == 0) {
|
if($i == 0) {
|
||||||
$r[$i] = $k1[$i] cmp $k2[$i];
|
$r[$i] = $k1[$i] cmp $k2[$i];
|
||||||
} else {
|
} else {
|
||||||
$r[$i] = $k1[$i] <=> $k2[$i];
|
$r[$i] = $k1[$i] <=> $k2[$i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print STDERR " r[$i] = $r[$i]\n";
|
print STDERR " r[$i] = $r[$i]\n" if $debug >= 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
$r[$i] = ($p1 <=> $p2);
|
$r[$i] = ($p1 <=> $p2);
|
||||||
print STDERR " $p1 <=> $p2 => r[$i] = $r[$i]\n";
|
print STDERR " $p1 <=> $p2 => r[$i] = $r[$i]\n" if $debug >= 5;
|
||||||
|
|
||||||
my $ret = 0;
|
my $ret = 0;
|
||||||
foreach my $rv (@r) {
|
foreach my $rv (@r) {
|
||||||
print STDERR " checking r: $rv\n";
|
print STDERR " checking r: $rv\n" if $debug >= 5;
|
||||||
if($rv != 0) {
|
if($rv != 0) {
|
||||||
$ret = $rv;
|
$ret = $rv;
|
||||||
last;
|
last;
|
||||||
@ -234,7 +234,7 @@ sub bysection {
|
|||||||
|
|
||||||
$ret = $ret * $inverse;
|
$ret = $ret * $inverse;
|
||||||
|
|
||||||
print STDERR "ret $ret\n";
|
print STDERR "ret $ret\n" if $debug >= 5;
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ sub gen_txt {
|
|||||||
my $section_title;
|
my $section_title;
|
||||||
|
|
||||||
foreach my $this_section (sort bysection keys %sections) {
|
foreach my $this_section (sort bysection keys %sections) {
|
||||||
print STDERR "writing section $this_section\n";
|
print STDERR "writing section $this_section\n" if $debug;
|
||||||
if(not $this_section =~ m/p/) {
|
if(not $this_section =~ m/p/) {
|
||||||
print " $this_section $sections{$this_section}{title}\n";
|
print " $this_section $sections{$this_section}{title}\n";
|
||||||
$section_head = $this_section;
|
$section_head = $this_section;
|
||||||
@ -264,7 +264,7 @@ sub gen_txt {
|
|||||||
while($section_text =~ m/^(.*?)$/msg) {
|
while($section_text =~ m/^(.*?)$/msg) {
|
||||||
my $line = $1;
|
my $line = $1;
|
||||||
|
|
||||||
print STDERR "paren reset, line [$line]\n";
|
print STDERR "paren reset, line [$line]\n" if $debug >= 8;
|
||||||
my $number = "";
|
my $number = "";
|
||||||
while($line =~ m/(.)/g) {
|
while($line =~ m/(.)/g) {
|
||||||
my $c = $1;
|
my $c = $1;
|
||||||
@ -275,14 +275,14 @@ sub gen_txt {
|
|||||||
$number = "";
|
$number = "";
|
||||||
} elsif($c eq '(') {
|
} elsif($c eq '(') {
|
||||||
$paren++;
|
$paren++;
|
||||||
print STDERR "got $paren (\n";
|
print STDERR "got $paren (\n" if $debug >= 8;
|
||||||
} elsif($c eq ')') {
|
} elsif($c eq ')') {
|
||||||
$paren--;
|
$paren--;
|
||||||
print STDERR "got $paren )\n";
|
print STDERR "got $paren )\n" if $debug >= 8;
|
||||||
|
|
||||||
if($paren == -1) {
|
if($paren == -1) {
|
||||||
if(length $number and defined $footnotes[$number]) {
|
if(length $number and defined $footnotes[$number]) {
|
||||||
print STDERR "Got footnote $number here!\n";
|
print STDERR "Got footnote $number here!\n" if $debug;
|
||||||
$footer .= " FOOTNOTE.$number\n $footnotes[$number]\n";
|
$footer .= " FOOTNOTE.$number\n $footnotes[$number]\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,7 +310,7 @@ sub gen_html {
|
|||||||
my $paren = 0;
|
my $paren = 0;
|
||||||
|
|
||||||
foreach my $this_section (sort bysection keys %sections) {
|
foreach my $this_section (sort bysection keys %sections) {
|
||||||
print STDERR "writing section $this_section\n";
|
print STDERR "writing section $this_section\n" if $debug;
|
||||||
print "<a name='", encode_entities $this_section, "'>\n";
|
print "<a name='", encode_entities $this_section, "'>\n";
|
||||||
print "<hr>\n<h3>", encode_entities $this_section, " [", encode_entities $sections{$this_section}{title}, "]</h3>\n" if not $this_section =~ m/p/;
|
print "<hr>\n<h3>", encode_entities $this_section, " [", encode_entities $sections{$this_section}{title}, "]</h3>\n" if not $this_section =~ m/p/;
|
||||||
|
|
||||||
@ -323,10 +323,12 @@ sub gen_html {
|
|||||||
$section_text =~ s/^\s*$footnote\)\s*$sub//ms;
|
$section_text =~ s/^\s*$footnote\)\s*$sub//ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$section_text = encode_entities $section_text;
|
||||||
|
|
||||||
while($section_text =~ m/^(.*?)$/msg) {
|
while($section_text =~ m/^(.*?)$/msg) {
|
||||||
my $line = $1;
|
my $line = $1;
|
||||||
|
|
||||||
print STDERR "paren reset, line [$line]\n";
|
print STDERR "paren reset, line [$line]\n" if $debug >= 8;
|
||||||
my $number = "";
|
my $number = "";
|
||||||
while($line =~ m/(.)/g) {
|
while($line =~ m/(.)/g) {
|
||||||
my $c = $1;
|
my $c = $1;
|
||||||
@ -337,14 +339,15 @@ sub gen_html {
|
|||||||
$number = "";
|
$number = "";
|
||||||
} elsif($c eq '(') {
|
} elsif($c eq '(') {
|
||||||
$paren++;
|
$paren++;
|
||||||
print STDERR "got $paren (\n";
|
print STDERR "got $paren (\n" if $debug >= 8;
|
||||||
} elsif($c eq ')') {
|
} elsif($c eq ')') {
|
||||||
$paren--;
|
$paren--;
|
||||||
print STDERR "got $paren )\n";
|
print STDERR "got $paren )\n" if $debug >= 8;
|
||||||
|
|
||||||
if($paren == -1) {
|
if($paren == -1) {
|
||||||
if(length $number and defined $footnotes[$number]) {
|
if(length $number and defined $footnotes[$number]) {
|
||||||
print STDERR "Got footnote $number here!\n";
|
print STDERR "Got footnote $number here!\n" if $debug;
|
||||||
|
$section_text =~ s/$number\)/<sup>[$number]<\/sup>/;
|
||||||
$footer .= "<a name='FOOTNOTE.$number'>\n<pre><i><b>Footnote $number)</b> ", encode_entities $footnotes[$number], "</i></pre>\n</a>\n";
|
$footer .= "<a name='FOOTNOTE.$number'>\n<pre><i><b>Footnote $number)</b> ", encode_entities $footnotes[$number], "</i></pre>\n</a>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,7 +359,10 @@ sub gen_html {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print "<pre>", encode_entities $section_text, "</pre>\n";
|
$section_text =~ s/\(([0-9.]+)\)/(<a href="#$1">$1<\/a>)/g;
|
||||||
|
$footer =~ s/\(([0-9.]+)\)/(<a href="#$1">$1<\/a>)/g;
|
||||||
|
|
||||||
|
print "<pre>", $section_text, "</pre>\n";
|
||||||
print "</a>\n";
|
print "</a>\n";
|
||||||
|
|
||||||
if(length $footer) {
|
if(length $footer) {
|
||||||
|
Loading…
Reference in New Issue
Block a user