our @EXPORT = qw(&html_escape &url_escape &url_deescape &url_param_escape &url_param_deescape &self_ref &self_form &http_get);
our @EXPORT_OK = qw();
+our $utf8_mode = 0;
+
### Escaping ###
sub url_escape($) {
my $x = shift @_;
+ utf8::encode($x) if $utf8_mode;
$x =~ s/([^-\$_.!*'(),0-9A-Za-z\x80-\xff])/"%".unpack('H2',$1)/ge;
+ utf8::decode($x) if $utf8_mode;
return $x;
}
sub url_deescape($) {
my $x = shift @_;
+ utf8::encode($x) if $utf8_mode;
$x =~ s/%(..)/pack("H2",$1)/ge;
+ utf8::decode($x) if $utf8_mode;
return $x;
}
my $main_arg_table;
my %raw_args;
+sub parse_raw_args_ll($$) {
+ my ($arg, $s) = @_;
+ $s =~ s/\r\n/\n/g;
+ $s =~ s/\r/\n/g;
+ utf8::decode($s) if $utf8_mode;
+ push @{$raw_args{$arg}}, $s;
+}
+
sub parse_raw_args($) {
my ($s) = @_;
$s =~ s/\s+//;
$_ = $2;
s/\+/ /g;
s/%(..)/pack("H2",$1)/eg;
- s/\r\n/\n/g;
- s/\r/\n/g;
- $raw_args{$arg} = $_;
+ parse_raw_args_ll($arg, $_);
}
}
}
}
- for my $a (values %$args) {
- defined($raw_args{$a}) or next;
- $_ = $raw_args{$a};
- $a->{'multiline'} or s/(\n|\t)/ /g;
- s/^\s+//;
- s/\s+$//;
- if (my $rx = $a->{'check'}) {
- if (!/^$rx$/) { $_ = $a->{'default'}; }
- }
+ for my $arg (keys %$args) {
+ my $a = $args->{$arg};
+ defined($raw_args{$arg}) or next;
+ for (@{$raw_args{$arg}}) {
+ $a->{'multiline'} or s/(\n|\t)/ /g;
+ s/^\s+//;
+ s/\s+$//;
+ if (my $rx = $a->{'check'}) {
+ if (!/^$rx$/) { $_ = $a->{'default'}; }
+ }
- my $v = $a->{'var'};
- my $r = ref($v);
- if ($r eq 'SCALAR') {
- $$v = $_;
- } elsif ($r eq 'ARRAY') {
- push @$v, $_;
+ my $v = $a->{'var'};
+ my $r = ref($v);
+ if ($r eq 'SCALAR') {
+ $$v = $_;
+ } elsif ($r eq 'ARRAY') {
+ push @$v, $_;
+ }
}
}
}
if (defined $a->{"var"}) {
while (defined (my $l = get_mp_line(1))) {
print STDERR "VALUE $l\n" if $debug;
- parse_raw_args("$field=$l");
+ parse_raw_args_ll($field, $l);
}
next PART;
} elsif (defined $a->{"file"}) {
sub make_out_args(@) { # Usage: make_out_args([arg_table, ...] name => value, ...)
my @arg_tables = ( $main_arg_table );
- while (@_ && ref(@_) eq 'HASH') {
+ while (@_ && ref($_[0]) eq 'HASH') {
push @arg_tables, shift @_;
}
my %overrides = @_;
my $arg = $table->{$name};
defined($arg->{'var'}) || next;
defined($arg->{'pass'}) && !$arg->{'pass'} && !exists $overrides{$name} && next;
+ defined $arg->{'default'} or $arg->{'default'} = "";
my $value;
if (!defined($value = $overrides{$name})) {
if (exists $overrides{$name}) {
$value = $arg->{'default'};
} else {
$value = ${$arg->{'var'}};
+ defined $value or $value = $arg->{'default'};
}
}
if ($value ne $arg->{'default'}) {