view release on metacpan or search on metacpan
```perl
xxS # -> 255
```
## to_str (;$scalar)
Converts to string perl without interpolation.
```perl
to_str "a'\n" # => 'a\\'\n'
[map to_str, "a'\n"] # --> ["'a\\'\n'"]
```
## from_str (;$one_quote_str)
Converts from string perl without interpolation.
```perl
from_str "'a\\'\n'" # => a'\n
[map from_str, "'a\\'\n'"] # --> ["a'\n"]
```
# SUBROUTINES/METHODS
# AUTHOR
Yaroslav O. Kosmina <dart@cpan.org>
# LICENSE
lib/Aion/Format.md view on Meta::CPAN
```perl
xxS # -> 255
```
## to_str (;$scalar)
Converts to string perl without interpolation.
```perl
to_str "a'\n" # => 'a\\'\n'
[map to_str, "a'\n"] # --> ["'a\\'\n'"]
```
## from_str (;$one_quote_str)
Converts from string perl without interpolation.
```perl
from_str "'a\\'\n'" # => a'\n
[map from_str, "'a\\'\n'"] # --> ["a'\n"]
```
# SUBROUTINES/METHODS
# AUTHOR
Yaroslav O. Kosmina <dart@cpan.org>
# LICENSE
lib/Aion/Format.pm view on Meta::CPAN
#@category ÐÑеобÑазованиÑ
# ÐÑÐ¾Ð²Ð¾Ð´Ð¸Ñ ÑооÑвеÑÑÑвиÑ
#
# matches "...", qr/.../ => sub {...}, ...
#
sub matches($@) {
my $s = shift;
my $i = 0;
my $re = join "\n| ", map { $i++ % 2 == 0? "(?<I$i> $_ )": () } @_;
my $arg = \@_;
my $fn = sub {
for my $k (keys %+) {
return $arg->[$k]->() if do { $k =~ /^I(\d+)\z/ and $k = $1 }
}
};
$s =~ s/$re/$fn->()/gex;
$s
lib/Aion/Format.pm view on Meta::CPAN
sub from_str(;$) {
my ($s) = @_ == 0? $_: @_;
$s =~ s/^'(.*)'\z/$1/s;
$s =~ s/\\([\\'])/$1/g;
$s
}
# УпÑоÑÑннÑй ÑзÑк ÑегÑлÑÑок
sub nous($) {
my ($templates) = @_;
my $x = join "|", map {
matches $_,
# СÑезаем вÑе пÑÐ¾Ð±ÐµÐ»Ñ Ñ ÐºÐ¾Ð½Ñа:
qr!\s*$! => sub {},
# СÑезаем вÑе наÑалÑнÑе ÑÑÑоки:
qr!^([ \t]*\n)*! => sub {},
# С наÑала каждой ÑÑÑоки 4 пÑобела или 0-3 пÑобела и ÑабÑлÑÑиÑ:
qr!^( {4}| {0,3}\t)!m => sub {},
# ÐÑÐ¾Ð±ÐµÐ»Ñ Ð² конÑе ÑÑÑоки и пÑобелÑнÑе ÑÑÑоки заÑем заменÑем на \s*
qr!([ \t]*\n)+! => sub { "\\s*" },
# ÐаменÑем вÑе пеÑеменнÑе {{}}:
lib/Aion/Format.pm view on Meta::CPAN
}
}
$s //= "N";
$s =~ s/ \z//;
$s
}
# ÐÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸Ð· кодиÑовки cp1251, ÑÑо нÑжно Ð´Ð»Ñ ÐºÐ¾ÑÑекÑной запиÑи в ÑаблиÑÑ
our $CIF = join "", "0".."9", "A".."Z", "a".."z", "_-", # 64 Ñимвола Ð´Ð»Ñ 64-ÑиÑной ÑиÑÑÐµÐ¼Ñ ÑÑиÑлениÑ
(map chr, ord "Ð" .. ord "Я"), "ÐÐÐÐÐÐÐÐÐÐÒÐÐÐÐ
",
(map chr, ord "а" .. ord "Ñ"), "ÑÑÑÑÑÑÑÑÑÑÒÑÑÑÑ",
"âââ¦â â¡â¬â°â¹âââââ¢âââ¢âºÂ¤Â¦Â§Â©Â«Â¬Â®°±µ¶·â»", do { no utf8; chr 0xa0 }, # небÑквеннÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸Ð· cp1251
"!\"#\$%&'()*+,./:;<=>?\@[\\]^`{|}~", # ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿ÑнкÑÑаÑии ASCII
" ", # пÑобел
(map chr, 0 .. 0x1F, 0x7F), # ÑпÑавлÑÑÑие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ASCII
# Ñимвол 152 (0x98) в cp1251 оÑÑÑÑÑÑвÑеÑ.
;
# ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð½Ð°ÑÑÑалÑное ÑиÑло в заданнÑÑ ÑиÑÑÐµÐ¼Ñ ÑÑиÑлениÑ
sub to_radix($;$) {
use bigint;
my ($n, $radix) = @_;
$radix //= 64;
die "to_radix: The number system $radix is too large. Use NS before " . (1 + length $CIF) if $radix > length $CIF;
$n+=0; $radix+=0;
my $x = "";
lib/Aion/Format.pm view on Meta::CPAN
Maximum length in data TinyText mysql and mariadb.
S - small.
xxS # -> 255
=head2 to_str (;$scalar)
Converts to string perl without interpolation.
to_str "a'\n" # => 'a\\'\n'
[map to_str, "a'\n"] # --> ["'a\\'\n'"]
=head2 from_str (;$one_quote_str)
Converts from string perl without interpolation.
from_str "'a\\'\n'" # => a'\n
[map from_str, "'a\\'\n'"] # --> ["a'\n"]
=head1 SUBROUTINES/METHODS
=head1 AUTHOR
Yaroslav O. Kosmina L<mailto:dart@cpan.org>
=head1 LICENSE
â B<GPLv3>
lib/Aion/Format/Html.pm view on Meta::CPAN
# â «пики» (каÑÑоÑÐ½Ð°Ñ Ð¼Ð°ÑÑÑ) ♠ ♠
spades => 9824,
# ⣠«ÑÑеÑÑ» (каÑÑоÑÐ½Ð°Ñ Ð¼Ð°ÑÑÑ) ♣ ♣
clubs => 9827,
# ⥠«ÑеÑвÑ» (каÑÑоÑÐ½Ð°Ñ Ð¼Ð°ÑÑÑ) ♥ ♥
hearts => 9829,
# ⦠«бÑбнÑ» (каÑÑоÑÐ½Ð°Ñ Ð¼Ð°ÑÑÑ) ♦ ♦
diams => 9830,
);
sub _set(@) { +{ map { $_ => 1 } @_ } }
# Теги не имеÑÑие закÑÑваÑÑего Ñега
our %SINGLE_TAG = %{ _set qw/area base br col embed hr img input link meta param source track wbr/ };
# <li> закÑÑваеÑÑÑ, еÑли пÑиÑ
Ð¾Ð´Ð¸Ñ </ol> или </ul>
our %TOP_CLOSE_TAG = (
li => _set(qw/ol ul/),
caption => _set(qw/table/),
thead => _set(qw/table/),
tbody => _set(qw/table/),
lib/Aion/Format/Html.pm view on Meta::CPAN
my @page; # маÑÑив ÑлеменÑов ÑекÑÑа и Ñегов ÑекÑÑей ÑÑÑаниÑÑ
my $c = 0; # колиÑеÑÑво Ñимволов в ÑекÑÑей ÑÑÑаниÑе
my $i_page = 0; # Ð¸Ð½Ð´ÐµÐºÑ ÑлеменÑа @page коÑоÑÑй пÑивÑÑил ÑÐ°Ð·Ð¼ÐµÑ ÑÑÑаниÑÑ
my $c_page = 0; # колиÑеÑÑво Ñимволов @page по $i_page
my $is_proposal = 0; # РконÑе ÑекÑÑей ÑÑÑаниÑÑ Ð¾Ð±Ð½Ð°ÑÑжен ÐºÐ¾Ð½ÐµÑ Ð¿ÑедложениÑ
my $re_proposal = qr/[.?!â¦]/;
my @S; # маÑÑив оÑкÑÑваÑÑиÑ
Ñегов [tag, '<tag ...>']
# ФÑнкÑÐ¸Ñ ÑикÑиÑÑÐµÑ ÑÑÑаниÑÑ Ð¸ ÑбÑаÑÑÐ²Ð°ÐµÑ ÑÑÑÑÑики
my $make_page = sub {
push @pages, join "", @page, map { "</$_->[0]>" } reverse @S;
$i_page = $c = $is_proposal = 0;
@page = map $_->[1], @S;
};
for(grep length, split m{(
<[a-z] [^<>]* >
| </ \s* [a-z]\w* \s* >
| &(?: [a-z]\w* | \# \d+ | \#x[0-9a-f]+ ) ;?
| \n # ÐбзаÑ
| $re_proposal+ # ÐÑедложение
| \b # Слово
)}xiu, $html) {
lib/Aion/Format/Html.pm view on Meta::CPAN
$_
}
# ÐÑе, кÑоме запÑеÑÑннÑÑ
:
# applet, script, style, embed, object, param,
# video, audio, source, track, frame, frameset, iframe, comment
# html, head, body, title, meta, base, basefont, bgsound, link
# form, keygen, output, textarea, select, option, optgroup, legend, label, input
# plaintext, xmp
# Ð Ñак же ÑдалÑÐµÑ Ð°ÑÑибÑÑÑ Ð½Ð°ÑинаÑÑиеÑÑ Ð½Ð° "on", name, for, formaction и дÑ..
my %SAFE_TAG = map {$_=>1} qw/
a
abbr
acronym
address
area
article
aside
b
lib/Aion/Format/Html.pm view on Meta::CPAN
ins
isindex
kbd
keygen
li
main
map
marquee
mark
menu
meter
nav
nobr
noembed
noframes
lib/Aion/Format/Html.pm view on Meta::CPAN
tt
u
ul
var
wbr
/;
my %SAFE_ATTR = map {$_=>1} qw/
pubdate datetime
open optimum
dir lang language style tabindex title high low hreflang icon
max min
href media ping rel rev name type
class
lib/Aion/Format/Json.md view on Meta::CPAN
to_json # -> $result
```
## from_json (;$string)
Parse string in json format to perl structure.
```perl
from_json '{"a": 10}' # --> {a => 10}
[map from_json, "{}", "2"] # --> [{}, 2]
```
# AUTHOR
Yaroslav O. Kosmina [darviarush@mail.ru](darviarush@mail.ru)
# LICENSE
â **GPLv3**
lib/Aion/Format/Json.pm view on Meta::CPAN
local $_ = $data;
to_json # -> $result
=head2 from_json (;$string)
Parse string in json format to perl structure.
from_json '{"a": 10}' # --> {a => 10}
[map from_json, "{}", "2"] # --> [{}, 2]
=head1 AUTHOR
Yaroslav O. Kosmina LL<mailto:darviarush@mail.ru>
=head1 LICENSE
â B<GPLv3>
=head1 COPYRIGHT
lib/Aion/Format/Url.md view on Meta::CPAN
# SUBROUTINES
## to_url_param (;$scalar)
Escape scalar to part of url search.
```perl
to_url_param "a b" # => a+b
[map to_url_param, "a b", "ð¦"] # --> [qw/a+b %1F981/]
```
## to_url_params (;$hash_ref)
Generates the search part of the url.
```perl
local $_ = {a => 1, b => [[1,2],3,{x=>10}]};
to_url_params # => a&b[][]&b[][]=2&b[]=3&b[][x]=10
```
lib/Aion/Format/Url.pm view on Meta::CPAN
$param =~ s/${\ UNSAFE_RFC3986}/$& eq " "? "+": sprintf "%%%02X", ord $&/age;
$param
}
sub _escape_url_params {
my ($key, $param) = @_;
!defined($param)? ():
$param eq 1? $key:
ref $param eq "HASH"? do {
join "&", map _escape_url_params("${key}[$_]", $param->{$_}), sort keys %$param
}:
ref $param eq "ARRAY"? do {
join "&", map _escape_url_params("${key}[]", $_), @$param
}:
join "", $key, "=", to_url_param $param
}
sub to_url_params(;$) {
my ($param) = @_ == 0? $_: @_;
if(ref $param eq "HASH") {
join "&", map _escape_url_params($_, $param->{$_}), sort keys %$param
}
else {
join "&", List::Util::pairmap { _escape_url_params($a, $b) } @$param
}
}
# #@see https://habr.com/ru/articles/63432/
# # Ð multipart/form-data
# sub to_multipart(;$) {
# my ($param) = @_ == 0? $_: @_;
# $param =~ s/[&=?#+\s]/$& eq " "? "+": sprintf "%%%02X", ord $&/ge;
# $param
# }
lib/Aion/Format/Url.pm view on Meta::CPAN
The utitlities for encode and decode the urls.
=head1 SUBROUTINES
=head2 to_url_param (;$scalar)
Escape scalar to part of url search.
to_url_param "a b" # => a+b
[map to_url_param, "a b", "ð¦"] # --> [qw/a+b %1F981/]
=head2 to_url_params (;$hash_ref)
Generates the search part of the url.
local $_ = {a => 1, b => [[1,2],3,{x=>10}]};
to_url_params # => a&b[][]&b[][]=2&b[]=3&b[][x]=10
=over
t/aion/format.t view on Meta::CPAN
done_testing; }; subtest 'xxS ()' => sub {
::is scalar do {xxS}, scalar do{255}, 'xxS # -> 255';
#
# ## to_str (;$scalar)
#
# Converts to string perl without interpolation.
#
done_testing; }; subtest 'to_str (;$scalar)' => sub {
::is scalar do {to_str "a'\n"}, "'a\\'\n'", 'to_str "a\'\n" # => \'a\\\'\n\'';
::is_deeply scalar do {[map to_str, "a'\n"]}, scalar do {["'a\\'\n'"]}, '[map to_str, "a\'\n"] # --> ["\'a\\\'\n\'"]';
#
# ## from_str (;$one_quote_str)
#
# Converts from string perl without interpolation.
#
done_testing; }; subtest 'from_str (;$one_quote_str)' => sub {
::is scalar do {from_str "'a\\'\n'"}, "a'\n", 'from_str "\'a\\\'\n\'" # => a\'\n';
::is_deeply scalar do {[map from_str, "'a\\'\n'"]}, scalar do {["a'\n"]}, '[map from_str, "\'a\\\'\n\'"] # --> ["a\'\n"]';
#
# # SUBROUTINES/METHODS
#
# # AUTHOR
#
# Yaroslav O. Kosmina <dart@cpan.org>
#
# # LICENSE
#
t/aion/format/json.t view on Meta::CPAN
::is scalar do {to_json}, scalar do{$result}, 'to_json # -> $result';
#
# ## from_json (;$string)
#
# Parse string in json format to perl structure.
#
done_testing; }; subtest 'from_json (;$string)' => sub {
::is_deeply scalar do {from_json '{"a": 10}'}, scalar do {{a => 10}}, 'from_json \'{"a": 10}\' # --> {a => 10}';
::is_deeply scalar do {[map from_json, "{}", "2"]}, scalar do {[{}, 2]}, '[map from_json, "{}", "2"] # --> [{}, 2]';
#
# # AUTHOR
#
# Yaroslav O. Kosmina [darviarush@mail.ru](darviarush@mail.ru)
#
# # LICENSE
#
# â **GPLv3**
#
t/aion/format/url.t view on Meta::CPAN
#
# # SUBROUTINES
#
# ## to_url_param (;$scalar)
#
# Escape scalar to part of url search.
#
done_testing; }; subtest 'to_url_param (;$scalar)' => sub {
::is scalar do {to_url_param "a b"}, "a+b", 'to_url_param "a b" # => a+b';
::is_deeply scalar do {[map to_url_param, "a b", "ð¦"]}, scalar do {[qw/a+b %1F981/]}, '[map to_url_param, "a b", "ð¦"] # --> [qw/a+b %1F981/]';
#
# ## to_url_params (;$hash_ref)
#
# Generates the search part of the url.
#
done_testing; }; subtest 'to_url_params (;$hash_ref)' => sub {
local $_ = {a => 1, b => [[1,2],3,{x=>10}]};
::is scalar do {to_url_params}, "a&b[][]&b[][]=2&b[]=3&b[][x]=10", 'to_url_params # => a&b[][]&b[][]=2&b[]=3&b[][x]=10';