DBIx-Web
view release on metacpan or search on metacpan
lib/DBIx/Web.pm view on Meta::CPAN
sub urlCmd {
my $r =($_[1]||'') .'?';
for (my $i =2; $i <$#_; $i+=2) {
$r .=urlEscape($_[0], $_[$i] =~/^-/ ? '_' .$' : $_[$i])
.'='
.urlEscape($_[0], ref($_[$i+1]) ? strdata($_[0], $_[$i+1]) : $_[$i+1])
.$HS
} chop($r); $r
}
sub xmlEscape {
join '',
map { my $v =$_; return('') if !defined($v);
$v =~s/([\\"<>])/sprintf('\\x%02x',ord($1))/ge;
# $v =~s/([\\"<])/\\$1/g;
# $v =~s/([^\w\d ,<.>\/?:;"'\[\]{}`~!@#$%^&*()-_=+\\|])/ ord($1) < 0x20 ? sprintf('\\x%02x',ord($1)) : $1/ge;
$v =~s/([\x00-\x1F])/sprintf('\\x%02x',ord($1))/ge;
$v
} @_[1..$#_]
}
sub xmlAttrEscape {
xmlEscape(@_)
}
sub xmlTagEscape {
join '',
map { my $v =$_; return('') if !defined($v);
$v =~s/([\\"<>])/sprintf('\\x%02x',ord($1))/ge;
# $v =~s/([\\"<])/\\$1/g;
# $v =~s/([^\w\d\s\n ,<.>\/?:;"'\[\]{}`~!@#$%^&*()-_=+\\|])/ ord($1) < 0x20 ? sprintf('\\x%02x',ord($1)) : $1/eg;
$v =~s/([\x00-\x08\x0B-\x0C\x0E-\x1F]|[&])/sprintf('\\x%02x',ord($1))/eg;
# \t=0x09; \n=0x0A; \r=0x0D;
$v
} @_[1..$#_]
}
sub xmlUnescape {
join '',
map { my $v =$_; return('') if !defined($v);
$v =~s/\\\\/\\/g;
$v =~s|(\\+)([<"])| int(length($1)/2)*2 == length($1) ? ('\\' x (length($1)-1) .$2) : ($1 .$2)|ge;
$v =~s|(\\+)(x\d+)| int(length($1)/2)*2 == length($1) ? ('\\' x (length($1)-1) .chr(hex($2))) : ($1 .$2)|ge;
$v
} @_[1..$#_]
}
sub lsTag { # Attribute list to tag strings list
my($c, $v, $n);# htmlEscape, urlEscape, tagEscape, self, tagname, attr=>value,...
$#_+1 !=2*int(($#_+1)/2)
? 0
: substr($_[$#_],0,1) eq "\n"
? ($n =$_[$#_])
: ($c =$_[$#_]);
((!ref($_[$[+4])
? ('<', $_[$[+4]
,(map {$_[$_]
? (defined($_[$_+1])
? (' ', substr($_[$_],0,1) eq '-' ? substr($_[$_],1) : $_[$_], '="'
, &{$_[$_] ne 'href' ? $_[$[] : $_[$[+1]}
($_[$[+3], !ref($_[$_+1]) ? $_[$_+1] : strdata($_[$[+3], $_[$_+1]))
, '"')
: ())
: eval{$c =$_[$_]; $v =$_[$_+1]; ()}
} map {$_*2+3} $[+1..int(($#_-3)/2) )
,(!defined($c)
? ' />'
: $c eq '0'
? '>'
: ('>'
, (ref($v) eq 'CODE') && ($v =&{$v}) && 0
? ()
: ref($v) eq 'ARRAY'
? &lsTag(@_[$[..$[+3], $v)
: defined($v)
? &{$_[$[+2]}($_[$[+3], $v)
: ()
, '</', $_[$[+4], '>') )
)
: ref($_[$[+4]) eq 'ARRAY'
? (map {ref($_) ne 'ARRAY' ? &{$_[$[+2]}($_[$[+3], $_) : lsTag(@_[$[..$[+3], @$_)} @{$_[$[+4]})
: ref($_[$[+4]) eq 'HASH' && eval{$v =$_[$[+4]; $c =$v->{'-'}||$v->{'-tag'}||'tag'}
? ('<', $c
,(map {defined($v->{$_})
?(' '
, substr($_,0,1) eq '-' ? substr($_, 1) : $_, '="'
, &{$_ ne 'href' ? $_[$[] : $_[$[+1]}
($_[$[+3], !ref($v->{$_}) ? $v->{$_} : strdata($_[$[+3], $v->{$_}))
,'"')
:()
}
sort grep {$_ && $_ !~/^-(tag|data|)$/} keys %$v)
, (grep {exists($v->{$_}) && eval{$v =$v->{$_}}} '', '-data')
? ('>'
,(ref($v) eq 'CODE') && ($v =&{$v}) && 0
? ()
: ref($v) eq 'ARRAY'
? &lsTag(@_[$[..$[+3], $v)
: defined($v)
? &{$_[$[+2]}($_[$[+3], $v)
: ()
,'</',$c,'>')
: exists($v->{0})
? '>'
: ' />'
)
: ()
), !$n ? () : $n)
}
sub htlsTag { # Attribute list to html strings list
lsTag(\&htmlEscape, \&urlEscape, \&htmlEscape, @_)
}
sub xmlsTag { # Attribute list to xml strings list
lsTag(\&xmlAttrEscape, \&xmlAttrEscape, \&xmlTagEscape, @_)
}
sub utf8enc { # Encode to UTF8, see also cptran()
my $r =$_[1];
if (($] >=5.008) && eval("use Encode; 1")) {
# return($r) if Encode::is_utf8($r);
my $cp =eval('!${^ENCODING}') && $_[0]->charpage();
eval("use encoding '$cp', STDIN=>undef, STDOUT=>undef") if $cp;
$r =Encode::encode_utf8($r);
eval('no encoding') if $cp;
return($r);
}
my $t =$LNG->{'utf8enc_' .($_[0]->{-lang}||'')};
return($r) if !$t;
&$t($r);
$r;
}
sub utf8dec { # Decode from UTF8, see also cptran()
my $r =$_[1];
if (($] >=5.008) && eval("use Encode; 1")) {
my $cp =eval('!${^ENCODING}') && $_[0]->charpage();
eval("use encoding '$cp', STDIN=>undef, STDOUT=>undef") if $cp;
$r =Encode::decode_utf8($r,0);
eval('no encoding') if $cp;
$r =Encode::encode($cp,$r,0) if $cp;
return($r);
}
my $t =$LNG->{'utf8dec_' .($_[0]->{-lang}||'')};
return($r) if !$t;
&$t($r);
$r;
}
#########################################################
# Misc Utility methods
#########################################################
( run in 1.366 second using v1.01-cache-2.11-cpan-97f6503c9c8 )