diff options
| author | Tom Feist <shabble@cowu.be> | 2010-09-16 14:27:29 +0000 | 
|---|---|---|
| committer | Tom Feist <shabble@cowu.be> | 2010-09-16 14:27:29 +0000 | 
| commit | d86eb93366df577f6a6bdaef0032ee9ee9cf10b4 (patch) | |
| tree | a1431b6b6c0332d17cb81ee7fc9f78224825da98 | |
| parent | added a script to tab-complete URIs into their tinified equivalents (diff) | |
| download | irssi-scripts-d86eb93366df577f6a6bdaef0032ee9ee9cf10b4.tar.gz irssi-scripts-d86eb93366df577f6a6bdaef0032ee9ee9cf10b4.zip | |
modified it to use DaringFireball liberal uri match rather than re::common to handle more cases
| -rw-r--r-- | tinyurl-tabcomplete/complete-tiny-url.pl | 45 | 
1 files changed, 42 insertions, 3 deletions
| diff --git a/tinyurl-tabcomplete/complete-tiny-url.pl b/tinyurl-tabcomplete/complete-tiny-url.pl index def9440..e3100e4 100644 --- a/tinyurl-tabcomplete/complete-tiny-url.pl +++ b/tinyurl-tabcomplete/complete-tiny-url.pl @@ -2,7 +2,6 @@ use strict;  use vars qw($VERSION %IRSSI);  use Irssi; -use Regexp::Common qw/URI/;  use WWW::Shorten::TinyURL;  $VERSION = '2.1'; @@ -17,13 +16,53 @@ $VERSION = '2.1';  sub do_complete {  	my ($strings, $window, $word, $linestart, $want_space) = @_;  	return if $word eq ''; -    if ($word =~ m/$RE{URI}{HTTP}{-keep}/) { -        my $uri = makeashorterlink($1); +    if (defined (my $found_uri = match_uri($word))) { +        my $uri = makeashorterlink($found_uri);          push @$strings, $uri if $uri;          $$want_space = 1;          Irssi::signal_stop();      }  } +sub match_uri { +    my $text = shift; + +    my $regex = qr((?xi) +\b +(                           # Capture 1: entire matched URL +  (?: +    [a-z][\w-]+:                # URL protocol and colon +    (?: +      /{1,3}                        # 1-3 slashes +      |                             #   or +      [a-z0-9%]                     # Single letter or digit or '%' +                                    # (Trying not to match e.g. "URI::Escape") +    ) +    |                           #   or +    www\d{0,3}[.]               # "www.", "www1.", "www2." … "www999." +    |                           #   or +    [a-z0-9.\-]+[.][a-z]{2,4}/  # looks like domain name followed by a slash +  ) +  (?:                           # One or more: +    [^\s()<>]+                      # Run of non-space, non-()<> +    |                               #   or +    \(([^\s()<>]+|(\([^\s()<>]+\)))*\)  # balanced parens, up to 2 levels +  )+ +  (?:                           # End with: +    \(([^\s()<>]+|(\([^\s()<>]+\)))*\)  # balanced parens, up to 2 levels +    |                                   #   or +    [^\s`!()\[\]{};:'".,<>?«»“”‘’]        # not a space or one of these punct chars +  ) +)); + +    if ($text =~ $regex) { +        my $uri = $1; +        $uri = 'http://' . $uri if $uri !~ m(http://); +        return $uri; +    } else { +        return ''; +    } +} +  Irssi::signal_add_first( 'complete word',  \&do_complete); | 
