From bdf91d67484bd836dc34d54b5565ea05dbb37f20 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Sat, 2 Sep 2006 01:47:32 +0000 Subject: Make auto_link parse a greater subset of valid url formats. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4896 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/text_helper.rb | 29 +++++++++++++---------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'actionpack/lib/action_view') diff --git a/actionpack/lib/action_view/helpers/text_helper.rb b/actionpack/lib/action_view/helpers/text_helper.rb index f668f09d34..a2efedf100 100644 --- a/actionpack/lib/action_view/helpers/text_helper.rb +++ b/actionpack/lib/action_view/helpers/text_helper.rb @@ -313,23 +313,26 @@ module ActionView @_cycles[name] = cycle_object end - AUTO_LINK_RE = / - ( # leading text - <\w+.*?>| # leading HTML tag, or - [^=!:'"\/]| # leading punctuation, or - ^ # beginning of line + AUTO_LINK_RE = %r{ + ( # leading text + <\w+.*?>| # leading HTML tag, or + [^=!:'"/]| # leading punctuation, or + ^ # beginning of line ) ( - (?:http[s]?:\/\/)| # protocol spec, or - (?:www\.) # www.* + (?:https?://)| # protocol spec, or + (?:www\.) # www.* ) ( - ([\w]+:?[=?&\/.-]?)* # url segment - \w+[\/]? # url tail - (?:\#\w*)? # trailing anchor + [-\w]+ # subdomain or domain + (?:\.[-\w]+)* # remaining subdomains or domain + (?::\d+)? # port + (?:/(?:[~\w%.;-]+)?)* # path + (?:\?[\w%&=.;-]+)? # query string + (?:\#\w*)? # trailing anchor ) - ([[:punct:]]|\s|<|$) # trailing text - /x unless const_defined?(:AUTO_LINK_RE) + ([[:punct:]]|\s|<|$) # trailing text + }x unless const_defined?(:AUTO_LINK_RE) # Turns all urls into clickable links. If a block is given, each url # is yielded and the result is used as the link text. Example: @@ -339,7 +342,7 @@ module ActionView def auto_link_urls(text, href_options = {}) extra_options = tag_options(href_options.stringify_keys) || "" text.gsub(AUTO_LINK_RE) do - all, a, b, c, d = $&, $1, $2, $3, $5 + all, a, b, c, d = $&, $1, $2, $3, $4 if a =~ /