NAME
URL::Transform - perform URL transformations in various document types
SYNOPSIS
my $output;
my $urlt = URL::Transform->new(
'document_type' => 'text/html;charset=utf-8',
'content_encoding' => 'gzip',
'output_function' => sub { $output .= "@_" },
'transform_function' => sub { return (join '|', @_) },
);
$urlt->parse_file($Bin.'/data/URL-Transform-01.html');
print "and this is the output: ", $output;
DESCRIPTION
URL::Transform is a generic module to perform an url transformation in a documents. Accepts callback function using which the url link can be changed.
There are different modules to handle different document types, elements or attributes:
text/html
,text/vnd.wap.wml
,application/xhtml+xml
,application/vnd.wap.xhtml+xml
-
URL::Transform::using::HTML::Parser, URL::Transform::using::XML::SAX (incomplete was used only to benchmark)
text/css
text/html/meta-content
application/x-javascript
By passing parser
option to the URL::Transform->new()
constructor you can set what library will be used to parse and execute the output and transform functions. Note that the elements inside for example text/html
that are of a different type will be transformed via "default_for($document_type)" modules.
transform_function
is called with following arguments:
transform_function->(
'tag_name' => 'img',
'attribute_name' => 'src',
'url' => 'http://search.cpan.org/s/img/cpan_banner.png',
);
and must return (un)modified url as the return value.
output_function
is called with (already modified) document chunk for outputting.
PROPERTIES
content_encoding
document_type
parser
transform_function
output_function
- parser
-
For HTML/XML can be HTML::Parser, XML::SAX
- document_type
-
text/html - default
- transform_function
-
Function that will be called to make the transformation. The function will receive one argument - url text.
- output_function
-
Reference to function that will receive resulting output. The default one is to use print.
- content_encoding
-
Can be set to
gzip
ordeflate
. By default it isundef
, so there is no content encoding.
METHODS
new
Object constructor.
Requires transform_function
a CODE ref argument.
The rest of the arguments are optional. Here is the list with defaults:
document_type => 'text/html;charset=utf-8',
output_function => sub { print @_ },
parser => 'HTML::Parser',
content_encoding => undef,
default_for($document_type)
Returns default parser for a supplied $document_type.
Can be used also as a set function with additional argument - parser name.
If called as object method set the default parser for the object. If called as module function set the default parser for a whole module.
parse_string($string)
Submit document as a string for parsing.
This some function must be implemented by helper parsing classes.
parse_chunk($chunk)
Submit chunk of a document for parsing.
This some function should be implemented by helper parsing classes.
can_parse_chunks
Return true/false if the parser can parse in chunks.
parse_file($file_name)
Submit file for parsing.
This some function should be implemented by helper parsing classes.
link_tags
# To simplify things, reformat the %HTML::Tagset::linkElements
# hash so that it is always a hash of hashes.
# Construct a hash of tag names that may have links.
js_attributes
# Construct a hash of all possible JavaScript attribute names
decode_string($string)
Will return decoded string suitable for parsing. Decoding is chosen according to the $self->content_encoding.
Decoding is run automatically for every chunk/string/file.
encode_string($string)
Will return encoded string. Encoding is chosen according to the $self->content_encoding.
NOTE if you want to have your content encoded back to the $self->content_encoding you will have to run this method in your code. Argument to the output_function()
are always plain text.
get_supported_content_encodings()
Returns hash reference of supported content encodings.
benchmarks
Benchmark: timing 10000 iterations of HTML::Parser , XML::LibXML::SAX, XML::SAX::PurePerl...
HTML::Parser : 3 wallclock secs ( 2.41 usr + 0.04 sys = 2.45 CPU) @ 4081.63/s (n=10000)
XML::LibXML::SAX : 29 wallclock secs (27.22 usr + 0.11 sys = 27.33 CPU) @ 365.90/s (n=10000)
XML::SAX::PurePerl: 192 wallclock secs (180.62 usr + 0.50 sys = 181.12 CPU) @ 55.21/s (n=10000)
TODO
There are urls in pics
meta tag: <meta http-equiv="pics-label" content=" ...
. See http://www.w3.org/PICS/.
SEE ALSO
HTML::Parser, URL::Transform::using::HTML::Parser
AUTHOR
Jozef Kutej <jkutej at cpan.org>
LICENSE AND COPYRIGHT
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.