| In: |
uri/common.rb
|
| ALPHA | = | "a-zA-Z" |
| alpha = lowalpha | upalpha | ||
| ALNUM | = | "#{ALPHA}\\d" |
| alphanum = alpha | digit | ||
| HEX | = | "a-fA-F\\d" |
hex = digit | "A" | "B" | "C" | "D"
| "E" | "F" |
"a" | "b" | "c" | "d" | "e" | "f"
|
||
| ESCAPED | = | "%[#{HEX}]{2}" |
| escaped = "%" hex hex | ||
| UNRESERVED | = | "-_.!~*'()#{ALNUM}" |
mark = "-" | "_" | "." | "!" |
"~" | "*" | "’" |
"(" | ")"
unreserved = alphanum | mark |
||
| RESERVED | = | ";/?:@&=+$,\\[\\]" |
reserved = ";" | "/" | "?" | ":" |
"@" | "&" | "=" | "+" |
"$" | ","
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
"$" | "," | "[" | "]" (RFC 2732)
|
||
| URIC | = | "(?:[#{UNRESERVED}#{RESERVED}]|#{ESCAPED})" |
| uric = reserved | unreserved | escaped | ||
| URIC_NO_SLASH | = | "(?:[#{UNRESERVED};?:@&=+$,]|#{ESCAPED})" |
uric_no_slash = unreserved | escaped | ";" | "?" |
":" | "@" |
"&" | "=" | "+" | "$" | ","
|
||
| QUERY | = | "#{URIC}*" |
| query = *uric | ||
| FRAGMENT | = | "#{URIC}*" |
| fragment = *uric | ||
| DOMLABEL | = | "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)" |
| domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum | ||
| TOPLABEL | = | "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)" |
| toplabel = alpha | alpha *( alphanum | "-" ) alphanum | ||
| HOSTNAME | = | "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?" |
| hostname = *( domainlabel "." ) toplabel [ "." ] | ||
| IPV4ADDR | = | "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" |
|
RFC 2373, APPENDIX B: IPv6address = hexpart [ ":" IPv4address ]
IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
"." 1*3DIGIT hexpart = hexseq | hexseq "::" [ hexseq ]
| "::" [ hexseq ] hexseq = hex4 *( ":" hex4) hex4 =
1*4HEXDIG
XXX: This definition has a flaw. "::" + IPv4address must be allowed too. Here is a replacement. IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT |
||
| HEX4 | = | "[#{HEX}]{1,4}" |
| hex4 = 1*4HEXDIG | ||
| LASTPART | = | "(?:#{HEX4}|#{IPV4ADDR})" |
| lastpart = hex4 | IPv4address | ||
| HEXSEQ1 | = | "(?:#{HEX4}:)*#{HEX4}" |
| hexseq1 = *( hex4 ":" ) hex4 | ||
| HEXSEQ2 | = | "(?:#{HEX4}:)*#{LASTPART}" |
| hexseq2 = *( hex4 ":" ) lastpart | ||
| IPV6ADDR | = | "(?:#{HEXSEQ2}|(?:#{HEXSEQ1})?::(?:#{HEXSEQ2})?)" |
| IPv6address = hexseq2 | [ hexseq1 ] "::" [ hexseq2 ] | ||
| IPV6REF | = | "\\[#{IPV6ADDR}\\]" |
| ipv6reference = "[" IPv6address "]" (RFC 2732) | ||
| HOST | = | "(?:#{HOSTNAME}|#{IPV4ADDR}|#{IPV6REF})" |
| host = hostname | IPv4address host = hostname | IPv4address | IPv6reference (RFC 2732) | ||
| PORT | = | "\d*" |
| port = *digit | ||
| HOSTPORT | = | "#{HOST}(?:#{PORT})?" |
| hostport = host [ ":" port ] | ||
| USERINFO | = | "(?:[#{UNRESERVED};:&=+$,]|#{ESCAPED})*" |
userinfo = *( unreserved | escaped |
";" | ":" | "&" | "=" | "+" | "$" | "," )
|
||
| PCHAR | = | "(?:[#{UNRESERVED}:@&=+$,]|#{ESCAPED})" |
pchar = unreserved | escaped |
":" | "@" | "&" | "=" | "+" | "$" | ","
|
||
| PARAM | = | "#{PCHAR}*" |
| param = *pchar | ||
| SEGMENT | = | "#{PCHAR}*(?:;#{PARAM})*" |
| segment = *pchar *( ";" param ) | ||
| PATH_SEGMENTS | = | "#{SEGMENT}(?:/#{SEGMENT})*" |
| path_segments = segment *( "/" segment ) | ||
| SERVER | = | "(?:#{USERINFO}@)?#{HOSTPORT}" |
| server = [ [ userinfo "@" ] hostport ] | ||
| REG_NAME | = | "(?:[#{UNRESERVED}$,;+@&=+]|#{ESCAPED})+" |
reg_name = 1*( unreserved | escaped | "$" | "," |
";" | ":" | "@" | "&" | "=" | "+" )
|
||
| AUTHORITY | = | "(?:#{SERVER}|#{REG_NAME})" |
| authority = server | reg_name | ||
| REL_SEGMENT | = | "(?:[#{UNRESERVED};@&=+$,]|#{ESCAPED})+" |
rel_segment = 1*( unreserved | escaped |
";" | "@" | "&" | "=" | "+" | "$" | "," )
|
||
| SCHEME | = | "[#{ALPHA}][-+.#{ALPHA}\\d]*" |
| scheme = alpha *( alpha | digit | "+" | "-" | "." ) | ||
| ABS_PATH | = | "/#{PATH_SEGMENTS}" |
| abs_path = "/" path_segments | ||
| REL_PATH | = | "#{REL_SEGMENT}(?:#{ABS_PATH})?" |
| rel_path = rel_segment [ abs_path ] | ||
| NET_PATH | = | "//#{AUTHORITY}(?:#{ABS_PATH})?" |
| net_path = "//" authority [ abs_path ] | ||
| HIER_PART | = | "(?:#{NET_PATH}|#{ABS_PATH})(?:\\?(?:#{QUERY}))?" |
| hier_part = ( net_path | abs_path ) [ "?" query ] | ||
| OPAQUE_PART | = | "#{URIC_NO_SLASH}#{URIC}*" |
| opaque_part = uric_no_slash *uric | ||
| ABS_URI | = | "#{SCHEME}:(?:#{HIER_PART}|#{OPAQUE_PART})" |
| absoluteURI = scheme ":" ( hier_part | opaque_part ) | ||
| REL_URI | = | "(?:#{NET_PATH}|#{ABS_PATH}|#{REL_PATH})(?:\\?#{QUERY})?" |
| relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ] | ||
| URI_REF | = | "(?:#{ABS_URI}|#{REL_URI})?(?:##{FRAGMENT})?" |
| URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ] | ||
| X_ABS_URI | = | " (#{PATTERN::SCHEME}): (?# 1: scheme) (?: (#{PATTERN::OPAQUE_PART}) (?# 2: opaque) | (?:(?: //(?: (?:(?:(#{PATTERN::USERINFO})@)? (?# 3: userinfo) (?:(#{PATTERN::HOST})(?::(\\d*))?))?(?# 4: host, 5: port) | (#{PATTERN::REG_NAME}) (?# 6: registry) ) | (?!//)) (?# XXX: '//' is the mark for hostport) (#{PATTERN::ABS_PATH})? (?# 7: path) )(?:\\?(#{PATTERN::QUERY}))? (?# 8: query) ) (?:\\#(#{PATTERN::FRAGMENT}))? (?# 9: fragment) " |
| XXX: | ||
| X_REL_URI | = | " (?: (?: // (?: (?:(#{PATTERN::USERINFO})@)? (?# 1: userinfo) (#{PATTERN::HOST})?(?::(\\d*))? (?# 2: host, 3: port) | (#{PATTERN::REG_NAME}) (?# 4: registry) ) ) | (#{PATTERN::REL_SEGMENT}) (?# 5: rel_segment) )? (#{PATTERN::ABS_PATH})? (?# 6: abs_path) (?:\\?(#{PATTERN::QUERY}))? (?# 7: query) (?:\\#(#{PATTERN::FRAGMENT}))? (?# 8: fragment) " |