# $Id: RFC1738.pm,v 2.104 2003/03/25 23:09:59 abigail Exp $ package Regexp::Common::URI::RFC1738; use strict; local $^W = 1; use Regexp::Common qw /pattern clean no_defaults/; use vars qw /$VERSION @EXPORT @EXPORT_OK %EXPORT_TAGS @ISA/; use Exporter (); @ISA = qw /Exporter/; ($VERSION) = q $Revision: 2.104 $ =~ /[\d.]+/g; my %vars; BEGIN { $vars {low} = [qw /$digit $digits $hialpha $lowalpha $alpha $alphadigit $safe $extra $national $punctuation $unreserved $unreserved_range $reserved $uchar $uchars $xchar $xchars $hex $escape/]; $vars {connect} = [qw /$port $hostnumber $toplabel $domainlabel $hostname $host $hostport $user $password $login/]; $vars {parts} = [qw /$fsegment $fpath $group $article $grouppart $search $database $wtype $wpath $psegment $fieldname $fieldvalue $fieldspec $ppath/]; } use vars map {@$_} values %vars; @EXPORT = qw /$host/; @EXPORT_OK = map {@$_} values %vars; %EXPORT_TAGS = (%vars, ALL => [@EXPORT_OK]); # RFC 1738, base definitions. # Lowlevel definitions. $digit = '[0-9]'; $digits = '[0-9]+'; $hialpha = '[A-Z]'; $lowalpha = '[a-z]'; $alpha = '[a-zA-Z]'; # lowalpha | hialpha $alphadigit = '[a-zA-Z0-9]'; # alpha | digit $safe = '[-$_.+]'; $extra = "[!*'(),]"; $national = '[][{}|\\^~`]'; $punctuation = '[<>#%"]'; $unreserved_range = q [-a-zA-Z0-9$_.+!*'(),]; # alphadigit | safe | extra $unreserved = "[$unreserved_range]"; $reserved = '[;/?:@&=]'; $hex = '[a-fA-F0-9]'; $escape = "(?:%$hex$hex)"; $uchar = "(?:$unreserved|$escape)"; $uchars = "(?:(?:$unreserved+|$escape)*)"; $xchar = "(?:[$unreserved_range;/?:\@&=]|$escape)"; $xchars = "(?:(?:[$unreserved_range;/?:\@&=]+|$escape)*)"; # Connection related stuff. $port = "(?:$digits)"; $hostnumber = "(?:$digits\[.]$digits\[.]$digits\[.]$digits)"; $toplabel = "(?:$alpha\[-a-zA-Z0-9]*$alphadigit|$alpha)"; $domainlabel = "(?:(?:$alphadigit\[-a-zA-Z0-9]*)?$alphadigit)"; $hostname = "(?:(?:$domainlabel\[.])*$toplabel)"; $host = "(?:$hostname|$hostnumber)"; $hostport = "(?:$host(?::$port)?)"; $user = "(?:(?:[$unreserved_range;?&=]+|$escape)*)"; $password = "(?:(?:[$unreserved_range;?&=]+|$escape)*)"; $login = "(?:(?:$user(?::$password)?\@)?$hostport)"; # Parts (might require more if we add more URIs). # FTP/file $fsegment = "(?:(?:[$unreserved_range:\@&=]+|$escape)*)"; $fpath = "(?:$fsegment(?:/$fsegment)*)"; # NNTP/news. $group = "(?:$alpha\[-A-Za-z0-9.+_]*)"; $article = "(?:(?:[$unreserved_range;/?:&=]+|$escape)+" . '@' . "$host)"; $grouppart = "(?:[*]|$article|$group)"; # It's important that # $article goes before # $group. # WAIS. $search = "(?:(?:[$unreserved_range;:\@&=]+|$escape)*)"; $database = $uchars; $wtype = $uchars; $wpath = $uchars; # prospero $psegment = "(?:(?:[$unreserved_range?:\@&=]+|$escape)*)"; $fieldname = "(?:(?:[$unreserved_range?:\@&]+|$escape)*)"; $fieldvalue = "(?:(?:[$unreserved_range?:\@&]+|$escape)*)"; $fieldspec = "(?:;$fieldname=$fieldvalue)"; $ppath = "(?:$psegment(?:/$psegment)*)"; 1; __END__ =pod =head1 NAME Regexp::Common::URI::RFC1738 -- Definitions from RFC1738; =head1 SYNOPSIS use Regexp::Common::URI::RFC1738 qw /:ALL/; =head1 DESCRIPTION This package exports definitions from RFC1738. It's intended usage is for Regexp::Common::URI submodules only. Its interface might change without notice. =head1 REFERENCES =over 4 =item B<[RFC 1738]> Berners-Lee, Tim, Masinter, L., McCahill, M.: I. December 1994. =back =head1 HISTORY $Log: RFC1738.pm,v $ Revision 2.104 2003/03/25 23:09:59 abigail Prospero definitions Revision 2.103 2003/03/12 22:29:21 abigail Small fixes Revision 2.102 2003/02/21 14:47:48 abigail Added and WAIS related variables Revision 2.101 2003/02/11 11:14:50 abigail Fixed $grouppart Revision 2.100 2003/02/10 21:03:54 abigail Definitions of RFC 1738 =head1 AUTHOR Abigail S<(I)>. =head1 BUGS AND IRRITATIONS Bound to be plenty. =head1 COPYRIGHT Copyright (c) 2003, Abigail and Damian Conway. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html) =cut