File Coverage

blib/lib/URI/Find/Schemeless.pm
Criterion Covered Total %
statement 27 27 100.0
branch 2 4 50.0
condition n/a
subroutine 9 9 100.0
pod 2 2 100.0
total 40 42 95.2


line stmt bran cond sub pod time code
1             # Copyright (c) 2000, 2009 Michael G. Schwern. All rights reserved.
2             # This program is free software; you can redistribute it and/or modify
3             # it under the same terms as Perl itself.
4              
5             package URI::Find::Schemeless;
6              
7 2     2   1804 use strict;
  2         4  
  2         61  
8 2     2   9 use warnings;
  2         2  
  2         74  
9 2     2   9 use base qw(URI::Find);
  2         3  
  2         663  
10              
11             # base.pm error in 5.005_03 prevents it from loading URI::Find if I'm
12             # required first.
13 2     2   8 use URI::Find ();
  2         3  
  2         32  
14              
15 2     2   5 use vars qw($VERSION);
  2         3  
  2         312  
16             $VERSION = 20160806;
17              
18             my($dnsSet) = '\p{isAlpha}A-Za-z0-9-'; # extended for IDNA domains
19              
20             my($cruftSet) = __PACKAGE__->cruft_set . '<>?}';
21              
22             my($tldRe) = __PACKAGE__->top_level_domain_re;
23              
24             my($uricSet) = __PACKAGE__->uric_set;
25              
26             =head1 NAME
27              
28             URI::Find::Schemeless - Find schemeless URIs in arbitrary text.
29              
30              
31             =head1 SYNOPSIS
32              
33             require URI::Find::Schemeless;
34              
35             my $finder = URI::Find::Schemeless->new(\&callback);
36              
37             The rest is the same as URI::Find.
38              
39              
40             =head1 DESCRIPTION
41              
42             URI::Find finds absolute URIs in plain text with some weak heuristics
43             for finding schemeless URIs. This subclass is for finding things
44             which might be URIs in free text. Things like "www.foo.com" and
45             "lifes.a.bitch.if.you.aint.got.net".
46              
47             The heuristics are such that it hopefully finds a minimum of false
48             positives, but there's no easy way for it know if "COMMAND.COM" refers
49             to a web site or a file.
50              
51             =cut
52              
53             sub schemeless_uri_re {
54 178 50   178 1 367 @_ == 1 || __PACKAGE__->badinvo;
55 178         4758 return qr{
56             # Originally I constrained what couldn't be before the match
57             # like this: don't match email addresses, and don't start
58             # anywhere but at the beginning of a host name
59             # (?
60             # but I switched to saying what can be there after seeing a
61             # false match of "Lite.pm" via "MIME/Lite.pm".
62             (?: ^ | (?<=[\s<>()\{\}\[\]]) )
63             # hostname
64             (?: [$dnsSet]+(?:\.[$dnsSet]+)*\.$tldRe
65             | (?:\d{1,3}\.){3}\d{1,3} ) # not inet_aton() complete
66             (?:
67             (?=[\s\Q$cruftSet\E]) # followed by unrelated thing
68             (?!\.\w) # but don't stop mid foo.xx.bar
69             (?
70             |$ # or end of line
71             (?
72             |/[$uricSet#]* # or slash and URI chars
73             )
74             }x;
75             }
76              
77             =head3 top_level_domain_re
78              
79             my $tld_re = $self->top_level_domain_re;
80              
81             Returns the regex for matching top level DNS domains. The regex shouldn't
82             be anchored, it shouldn't do any capturing matches, and it should make
83             itself ignore case.
84              
85             =cut
86              
87             sub top_level_domain_re {
88 2 50   2 1 6 @_ == 1 || __PACKAGE__->badinvo;
89 2         3 my($self) = shift;
90              
91 2     2   521 use utf8;
  2         9  
  2         10  
92             # Updated from http://www.iana.org/domains/root/db/ with new TLDs
93 2         14 my $plain = join '|', qw(
94             AERO
95             ARPA
96             ASIA
97             BIZ
98             CAT
99             COM
100             COOP
101             EDU
102             GOV
103             INFO
104             INT
105             JOBS
106             MIL
107             MOBI
108             MUSEUM
109             NAME
110             NET
111             ORG
112             PRO
113             TEL
114             TRAVEL
115             ac
116             academy
117             accountants
118             active
119             actor
120             ad
121             ae
122             aero
123             af
124             ag
125             agency
126             ai
127             airforce
128             al
129             am
130             an
131             ao
132             aq
133             ar
134             archi
135             army
136             arpa
137             as
138             asia
139             associates
140             at
141             attorney
142             au
143             audio
144             autos
145             aw
146             ax
147             axa
148             az
149             ba
150             bar
151             bargains
152             bayern
153             bb
154             bd
155             be
156             beer
157             berlin
158             best
159             bf
160             bg
161             bh
162             bi
163             bid
164             bike
165             bio
166             biz
167             bj
168             bl
169             black
170             blackfriday
171             blue
172             bm
173             bmw
174             bn
175             bo
176             boutique
177             bq
178             br
179             brussels
180             bs
181             bt
182             build
183             builders
184             buzz
185             bv
186             bw
187             by
188             bz
189             bzh
190             ca
191             cab
192             camera
193             camp
194             capetown
195             capital
196             cards
197             care
198             career
199             careers
200             cash
201             cat
202             catering
203             cc
204             cd
205             center
206             ceo
207             cf
208             cg
209             ch
210             cheap
211             christmas
212             church
213             ci
214             citic
215             ck
216             cl
217             claims
218             cleaning
219             clinic
220             clothing
221             club
222             cm
223             cn
224             co
225             codes
226             coffee
227             college
228             cologne
229             com
230             community
231             company
232             computer
233             condos
234             construction
235             consulting
236             contractors
237             cooking
238             cool
239             coop
240             country
241             cr
242             credit
243             creditcard
244             cruises
245             cu
246             cv
247             cw
248             cx
249             cy
250             cz
251             dance
252             dating
253             de
254             degree
255             democrat
256             dental
257             dentist
258             desi
259             diamonds
260             digital
261             directory
262             discount
263             dj
264             dk
265             dm
266             dnp
267             do
268             domains
269             durban
270             dz
271             ec
272             edu
273             education
274             ee
275             eg
276             eh
277             email
278             engineer
279             engineering
280             enterprises
281             equipment
282             er
283             es
284             estate
285             et
286             eu
287             eus
288             events
289             exchange
290             expert
291             exposed
292             fail
293             farm
294             feedback
295             fi
296             finance
297             financial
298             fish
299             fishing
300             fitness
301             fj
302             fk
303             flights
304             florist
305             fm
306             fo
307             foo
308             foundation
309             fr
310             frogans
311             fund
312             furniture
313             futbol
314             ga
315             gal
316             gallery
317             gb
318             gd
319             ge
320             gf
321             gg
322             gh
323             gi
324             gift
325             gives
326             gl
327             glass
328             global
329             globo
330             gm
331             gmo
332             gn
333             gop
334             gov
335             gp
336             gq
337             gr
338             graphics
339             gratis
340             green
341             gripe
342             gs
343             gt
344             gu
345             guide
346             guitars
347             guru
348             gw
349             gy
350             hamburg
351             haus
352             hiphop
353             hiv
354             hk
355             hm
356             hn
357             holdings
358             holiday
359             homes
360             horse
361             host
362             house
363             hr
364             ht
365             hu
366             id
367             ie
368             il
369             im
370             immobilien
371             in
372             industries
373             info
374             ink
375             institute
376             insure
377             int
378             international
379             investments
380             io
381             iq
382             ir
383             is
384             it
385             je
386             jetzt
387             jm
388             jo
389             jobs
390             joburg
391             jp
392             juegos
393             kaufen
394             ke
395             kg
396             kh
397             ki
398             kim
399             kitchen
400             kiwi
401             km
402             kn
403             koeln
404             kp
405             kr
406             kred
407             kw
408             ky
409             kz
410             la
411             land
412             lawyer
413             lb
414             lc
415             lease
416             li
417             life
418             lighting
419             limited
420             limo
421             link
422             lk
423             loans
424             london
425             lotto
426             lr
427             ls
428             lt
429             lu
430             luxe
431             luxury
432             lv
433             ly
434             ma
435             maison
436             management
437             mango
438             market
439             marketing
440             mc
441             md
442             me
443             media
444             meet
445             menu
446             mf
447             mg
448             mh
449             miami
450             mil
451             mini
452             mk
453             ml
454             mm
455             mn
456             mo
457             mobi
458             moda
459             moe
460             monash
461             mortgage
462             moscow
463             motorcycles
464             mp
465             mq
466             mr
467             ms
468             mt
469             mu
470             museum
471             mv
472             mw
473             mx
474             my
475             mz
476             na
477             nagoya
478             name
479             navy
480             nc
481             ne
482             net
483             neustar
484             nf
485             ng
486             nhk
487             ni
488             ninja
489             nl
490             no
491             np
492             nr
493             nu
494             nyc
495             nz
496             okinawa
497             om
498             onl
499             org
500             organic
501             ovh
502             pa
503             paris
504             partners
505             parts
506             pe
507             pf
508             pg
509             ph
510             photo
511             photography
512             photos
513             physio
514             pics
515             pictures
516             pink
517             pk
518             pl
519             plumbing
520             pm
521             pn
522             post
523             pr
524             press
525             pro
526             productions
527             properties
528             ps
529             pt
530             pub
531             pw
532             py
533             qa
534             qpon
535             quebec
536             re
537             recipes
538             red
539             rehab
540             reise
541             reisen
542             ren
543             rentals
544             repair
545             report
546             republican
547             rest
548             reviews
549             rich
550             rio
551             ro
552             rocks
553             rodeo
554             rs
555             ru
556             ruhr
557             rw
558             ryukyu
559             sa
560             saarland
561             sb
562             sc
563             schule
564             scot
565             sd
566             se
567             services
568             sexy
569             sg
570             sh
571             shiksha
572             shoes
573             si
574             singles
575             sj
576             sk
577             sl
578             sm
579             sn
580             so
581             social
582             software
583             sohu
584             solar
585             solutions
586             soy
587             space
588             sr
589             ss
590             st
591             su
592             supplies
593             supply
594             support
595             surf
596             surgery
597             sv
598             sx
599             sy
600             systems
601             sz
602             tattoo
603             tax
604             tc
605             td
606             technology
607             tel
608             tf
609             tg
610             th
611             tienda
612             tips
613             tirol
614             tj
615             tk
616             tl
617             tm
618             tn
619             to
620             today
621             tokyo
622             tools
623             town
624             toys
625             tp
626             tr
627             trade
628             training
629             travel
630             tt
631             tv
632             tw
633             tz
634             ua
635             ug
636             uk
637             um
638             university
639             uno
640             us
641             uy
642             uz
643             va
644             vacations
645             vc
646             ve
647             vegas
648             ventures
649             versicherung
650             vet
651             vg
652             vi
653             viajes
654             villas
655             vision
656             vlaanderen
657             vn
658             vodka
659             vote
660             voting
661             voto
662             voyage
663             vu
664             wang
665             watch
666             webcam
667             website
668             wed
669             wf
670             wien
671             wiki
672             works
673             ws
674             wtc
675             wtf
676             测试
677             परीक्षा
678             集团
679             在线
680             한국
681             ভারত
682             موقع
683             বাংলা
684             公益
685             公司
686             移动
687             我爱你
688             москва
689             испытание
690             қаз
691             онлайн
692             сайт
693             срб
694             테스트
695             орг
696             삼성
697             சிங்கப்பூர்
698             商标
699             商城
700             дети
701             мкд
702             טעסט
703             中文网
704             中信
705             中国
706             中國
707             భారత్
708             ලංකා
709             測試
710             ભારત
711             भारत
712             آزمایشی
713             பரிட்சை
714             संगठन
715             网络
716             укр
717             香港
718             δοκιμή
719             إختبار
720             台湾
721             台灣
722             мон
723             الجزائر
724             عمان
725             ایران
726             امارات
727             بازار
728             پاکستان
729             الاردن
730             بھارت
731             المغرب
732             السعودية
733             سودان
734             مليسيا
735             شبكة
736             გე
737             机构
738             组织机构
739             ไทย
740             سورية
741             рф
742             تونس
743             みんな
744             世界
745             ਭਾਰਤ
746             网址
747             游戏
748             مصر
749             قطر
750             இலங்கை
751             இந்தியா
752             新加坡
753             فلسطين
754             テスト
755             政务
756             xxx
757             xyz
758             yachts
759             ye
760             yokohama
761             yt
762             za
763             zm
764             zone
765             zw
766             );
767            
768 2     2   9 return qr/(?:$plain)/i;
  2         3  
  2         19  
  2         228  
769             }
770              
771             =head1 AUTHOR
772              
773             Original code by Roderick Schertler , adapted by
774             Michael G Schwern .
775              
776             Currently maintained by Roderick Schertler .
777              
778             =head1 SEE ALSO
779              
780             L
781              
782             =cut
783              
784             1;