Add ARM files
[dh-make-perl] / dev / arm / liburi-perl / liburi-perl-1.35.dfsg.1 / debian / liburi-perl / usr / share / perl5 / URI / _query.pm
diff --git a/dev/arm/liburi-perl/liburi-perl-1.35.dfsg.1/debian/liburi-perl/usr/share/perl5/URI/_query.pm b/dev/arm/liburi-perl/liburi-perl-1.35.dfsg.1/debian/liburi-perl/usr/share/perl5/URI/_query.pm
new file mode 100644 (file)
index 0000000..9323893
--- /dev/null
@@ -0,0 +1,81 @@
+package URI::_query;
+
+use strict;
+use URI ();
+use URI::Escape qw(uri_unescape);
+
+sub query
+{
+    my $self = shift;
+    $$self =~ m,^([^?\#]*)(?:\?([^\#]*))?(.*)$,s or die;
+
+    if (@_) {
+       my $q = shift;
+       $$self = $1;
+       if (defined $q) {
+           $q =~ s/([^$URI::uric])/$URI::Escape::escapes{$1}/go;
+           $$self .= "?$q";
+       }
+       $$self .= $3;
+    }
+    $2;
+}
+
+# Handle ...?foo=bar&bar=foo type of query
+sub query_form {
+    my $self = shift;
+    my $old = $self->query;
+    if (@_) {
+        # Try to set query string
+       my @new = @_;
+       if (@new == 1) {
+           my $n = $new[0];
+           if (ref($n) eq "ARRAY") {
+               @new = @$n;
+           }
+           elsif (ref($n) eq "HASH") {
+               @new = %$n;
+           }
+       }
+        my @query;
+        while (my($key,$vals) = splice(@new, 0, 2)) {
+            $key = '' unless defined $key;
+           $key =~ s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
+           $key =~ s/ /+/g;
+           $vals = [ref($vals) eq "ARRAY" ? @$vals : $vals];
+            for my $val (@$vals) {
+                $val = '' unless defined $val;
+               $val =~ s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
+                $val =~ s/ /+/g;
+                push(@query, "$key=$val");
+            }
+        }
+        $self->query(@query ? join('&', @query) : undef);
+    }
+    return if !defined($old) || !length($old) || !defined(wantarray);
+    return unless $old =~ /=/; # not a form
+    map { s/\+/ /g; uri_unescape($_) }
+         map { /=/ ? split(/=/, $_, 2) : ($_ => '')} split(/&/, $old);
+}
+
+# Handle ...?dog+bones type of query
+sub query_keywords
+{
+    my $self = shift;
+    my $old = $self->query;
+    if (@_) {
+        # Try to set query string
+       my @copy = @_;
+       @copy = @{$copy[0]} if @copy == 1 && ref($copy[0]) eq "ARRAY";
+       for (@copy) { s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g; }
+       $self->query(@copy ? join('+', @copy) : undef);
+    }
+    return if !defined($old) || !defined(wantarray);
+    return if $old =~ /=/;  # not keywords, but a form
+    map { uri_unescape($_) } split(/\+/, $old, -1);
+}
+
+# Some URI::URL compatibility stuff
+*equery = \&query;
+
+1;