CSS-DOM

 view release on metacpan or  search on metacpan

lib/CSS/DOM/Util.pm  view on Meta::CPAN


use Exporter 5.57 'import';
our @EXPORT_OK = qw '
	unescape     escape
	             escape_ident
	unescape_url
	unescape_str escape_str';
our %EXPORT_TAGS = (all=>\@EXPORT_OK);


sub escape($$) {
	my $str = shift;
	my $hex_or_space = qr/[0-9a-fA-F]|(?!$_[0])[ \t]/;
	$str =~ s/([\n\r\f]|$_[0])/
		my $c = $1;
		$c =~ m'[ -\/:-@[-`{-~]'
		?  "\\$c"
		:  sprintf '\%x' . ' ' x (
		       ord $c < 0x100000 &&
		       (substr $str, $+[0], 1,||'a') =~ $hex_or_space
		   ), ord $c
	/ge;
	$str;
}

sub unescape($) {
	my $val = shift;
	$val =~ s/\\(?:
		([a-fA-F0-9]{1,6})(?:\r\n|[ \n\r\t\f])?
		  |
		([^\n\r\f0-9a-f])
		  |
		(\r\n?|[\n\f])
	)/
		defined $1 ? chr hex $1 :
		defined $2 ? $2 :
		             ''
	/gex;
	$val;
}

sub escape_ident($) {
	my $str = shift;

	# An identifier can’t have [0-9] for the first character, or for
	# the second if
	# the first is [-].
	return escape $str,
		qr/([\0-,.\/:-\@[-^`{-\177]|^[0-9]|(?<=^-)[0-9])/;
}

sub unescape_url($) {
	my $token = shift;
	$token =~ s/^url\([ \t\r\n\f]*//;
	$token =~ s/[ \t\r\n\f]*\)\z//;
	$token =~ s/^['"]// and chop $token;
	return unescape $token
}

sub escape_str($) {
	"'" . escape($_[0],qr/'/) . "'"
}

sub unescape_str($) {
	unescape substr $_[0], 1, -1;
}

                              **__END__**

=head1 NAME

CSS::DOM::Util - Utility functions for dealing with CSS tokens

=head1 VERSION



( run in 0.487 second using v1.01-cache-2.11-cpan-65fba6d93b7 )