📄 util.pm
字号:
return '' if ($url =~ /[ \"]/); # help fat-finger typists. $url =~ s,http;//,http://,; $url =~ s,http//,http://,; $url = "http://$url" unless ($url =~ m,http://,); my ($scheme, $host, $path, $query, $fragment) = $url =~ m,(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?,; if ($scheme && $host) { # Note: no stringent checks; localhost is a legit hostname, for example. return $url; } else { return ''; }}sub discover_tb { my($url, $find_all, $contents) = @_; my $c; if ($contents) { $c = $$contents; } else { my $ua = MT->new_ua; ## Wrap this in an eval in case some versions don't support it. eval { $ua->parse_head(0) }; my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); return unless $res->is_success; $c = $res->content; } (my $url_no_anchor = $url) =~ s/#.*$//; (my $url_no_host = $url_no_anchor) =~ s!^https?://.*/!!i; my(@items); while ($c =~ m!(<rdf:RDF.*?</rdf:RDF>)!sg) { my $rdf = $1; my($perm_url) = $rdf =~ m!dc:identifier="([^"]+)"!; #" $perm_url ||= ""; (my $perm_url_no_host = $perm_url) =~ s!https?://.*/!!i; $perm_url_no_host =~ s/#.*$//; next unless $find_all || $perm_url eq $url || $perm_url eq $url_no_anchor || $perm_url_no_host eq $url_no_host; (my $inner = $rdf) =~ s!^.*?<rdf:Description!!s; my $item = { permalink => $perm_url }; while ($inner =~ /([\w:]+)="([^"]*)"/gs) { #" $item->{$1} = $2; } $item->{ping_url} = $item->{'trackback:ping'}; next unless $item->{ping_url}; $item->{title} = decode_xml($item->{'dc:title'}); if (!$item->{title} && $rdf =~ m!dc:description="([^"]+)"!) { #" $item->{title} = MT::Util::first_n_words($1, 5) . '...'; } push @items, $item; last unless $find_all; } return unless @items; $find_all ? \@items : $items[0];}{ my %Data = ( 'by' => { name => 'Attribution', requires => [ qw( Attribution Notice ) ], permits => [ qw( Reproduction Distribution DerivativeWorks ) ], }, 'by-nd' => { name => 'Attribution-NoDerivs', requires => [ qw( Attribution Notice ) ], permits => [ qw( Reproduction Distribution ) ], }, 'by-nd-nc' => { name => 'Attribution-NoDerivs-NonCommercial', requires => [ qw( Attribution Notice ) ], permits => [ qw( Reproduction Distribution ) ], prohibits => [ qw( CommercialUse) ], }, 'by-nc' => { name => 'Attribution-NonCommercial', requires => [ qw( Attribution Notice ) ], permits => [ qw( Reproduction Distribution DerivativeWorks ) ], prohibits => [ qw( CommercialUse ) ], }, 'by-nc-sa' => { name => 'Attribution-NonCommercial-ShareAlike', requires => [ qw( Attribution Notice ShareAlike ) ], permits => [ qw( Reproduction Distribution DerivativeWorks ) ], prohibits => [ qw( CommercialUse ) ], }, 'by-sa' => { name => 'Attribution-ShareAlike', requires => [ qw( Attribution Notice ShareAlike ) ], permits => [ qw( Reproduction Distribution DerivativeWorks ) ], }, 'nd' => { name => 'NonDerivative', requires => [ qw( Notice ) ], permits => [ qw( Reproduction Distribution ) ], }, 'nd-nc' => { name => 'NonDerivative-NonCommercial', requires => [ qw( Notice ) ], permits => [ qw( Reproduction Distribution ) ], prohibits => [ qw( CommercialUse ) ], }, 'nc' => { name => 'NonCommercial', requires => [ qw( Notice ) ], permits => [ qw( Reproduction Distribution DerivativeWorks ) ], prohibits => [ qw( CommercialUse ) ], }, 'nc-sa' => { name => 'NonCommercial-ShareAlike', requires => [ qw( Notice ShareAlike ) ], permits => [ qw( Reproduction Distribution DerivativeWorks ) ], prohibits => [ qw( CommercialUse ) ], }, 'sa' => { name => 'ShareAlike', requires => [ qw( Notice ShareAlike ) ], permits => [ qw( Reproduction Distribution DerivativeWorks ) ], }, 'pd' => { name => 'PublicDomain', permits => [ qw( Reproduction Distribution DerivativeWorks ) ], }, ); sub cc_url { my($code) = @_; my $url; my ($real_code, $license_url, $image_url); if (($real_code, $license_url, $image_url) = $code =~ /(\S+) (\S+) (\S+)/) { return $license_url; } $code eq 'pd' ? "http://web.resource.org/cc/PublicDomain" : "http://creativecommons.org/licenses/$code/1.0/"; } sub cc_rdf { my($code) = @_; my $url = cc_url($code); my $rdf = <<RDF;<License rdf:about="$url">RDF for my $type (qw( requires permits prohibits )) { for my $item (@{ $Data{$code}{$type} }) { $rdf .= <<RDF;<$type rdf:resource="http://web.resource.org/cc/$item" />RDF } } $rdf . "</License>\n"; } sub cc_name { my ($code) = ($_[0] =~ /(\S+) \S+ \S+/); $code ||= $_[0]; $Data{$code}{name}; }}sub mark_odd_rows { my($list) = @_; my $i = 1; for my $row (@$list) { $row->{is_odd} = $i++ % 2 == 1; }}%Languages = ( 'en' => [ [ qw( Sunday Monday Tuesday Wednesday Thursday Friday Saturday ) ], [ qw( January February March April May June July August September October November December ) ], [ qw( AM PM ) ], ], 'en_us' => [ [ qw( Sunday Monday Tuesday Wednesday Thursday Friday Saturday ) ], [ qw( January February March April May June July August September October November December ) ], [ qw( AM PM ) ], ], 'fr' => [ [ qw( dimanche lundi mardi mercredi jeudi vendredi samedi ) ], [ ('janvier', "février", 'mars', 'avril', 'mai', 'juin', 'juillet', "août", 'septembre', 'octobre', 'novembre', "décembre") ], [ qw( AM PM ) ], ], 'es' => [ [ ('Domingo', 'Lunes', 'Martes', "Miércoles", 'Jueves', 'Viernes', "Sábado") ], [ qw( Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre ) ], [ qw( AM PM ) ], ], 'pt' => [ [ ('domingo', 'segunda-feira', "terça-feira", 'quarta-feira', 'quinta-feira', 'sexta-feira', "sábado") ], [ ('janeiro', 'fevereiro', "março", 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro' ) ], [ qw( AM PM ) ], ], 'nl' => [ [ qw( zondag maandag dinsdag woensdag donderdag vrijdag zaterdag ) ], [ qw( januari februari maart april mei juni juli augustus september oktober november december ) ], [ qw( am pm ) ], "%d %B %Y %H:%M", "%d %B %Y" ], 'dk' => [ [ ("søndag", 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', "lørdag") ], [ qw( januar februar marts april maj juni juli august september oktober november december ) ], [ qw( am pm ) ], "%d.%m.%Y %H:%M", "%d.%m.%Y", "%H:%M", ], 'se' => [ [ ("söndag", "måndag", 'tisdag', 'onsdag', 'torsdag', 'fredag', "lördag") ], [ qw( januari februari mars april maj juni juli augusti september oktober november december ) ], [ qw( FM EM ) ], ], 'no' => [ [ ("Søndag", "Mandag", 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', "Lørdag") ], [ qw( Januar Februar Mars April Mai Juni Juli August September Oktober November Desember ) ], [ qw( FM EM ) ], ], 'de' => [ [ qw( Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag ) ], [ ('Januar', 'Februar', "März", 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember') ], [ qw( FM EM ) ], "%d.%m.%y %H:%M", "%d.%m.%y", "%H:%M", ], 'it' => [ [ ('Domenica', "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", 'Sabato') ], [ qw( Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre ) ], [ qw( AM PM ) ], "%d.%m.%y %H:%M", "%d.%m.%y", "%H:%M", ], 'pl' => [ [ ('niedziela', "poniedziałek", 'wtorek', "środa", 'czwartek', "piątek", 'sobota') ], [ ('stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', "września", "października", 'listopada', 'grudnia') ], [ qw( AM PM ) ], "%e %B %Y %k:%M", "%e %B %Y", "%k:%M", ], 'fi' => [ [ qw( sunnuntai maanantai tiistai keskiviikko torstai perjantai lauantai ) ], [ ('tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', "kesäkuu", "heinäkuu", 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu') ], [ qw( AM PM ) ], "%d.%m.%y %H:%M", ], 'is' => [ [ ('Sunnudagur', "Mánudagur", "Þriðjudagur", "Miðvikudagur", 'Fimmtudagur', "Föstudagur", 'Laugardagur') ], [ ("janúar", "febrúar", 'mars', "apríl", "maí", "júní", "júlí", "ágúst", 'september', "október", "nóvember", 'desember') ], [ qw( FH EH ) ], "%d.%m.%y %H:%M", ], 'si' => [ [ ('nedelja', 'ponedeljek', 'torek', 'sreda', "ãetrtek", 'petek', 'sobota',) ], [ qw( januar februar marec april maj junij julij avgust september oktober november december ) ], [ qw( AM PM ) ], "%d.%m.%y %H:%M", ], 'cz' => [ [ ('Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota') ], [ ('Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Øíjen', 'Listopad', 'Prosinec') ], [ qw( AM PM ) ], "%e. %B %Y %k:%M", "%e. %B %Y", "%k:%M", ], 'sk' => [ [ ('nedeľa', 'pondelok', 'utorok', 'streda', 'štvrtok', 'piatok', 'sobota') ], [ ('január', 'február', 'marec', 'apríl', 'máj', 'jún', 'júl', 'august', 'september', 'október', 'november', 'december') ], [ qw( AM PM ) ], "%e. %B %Y %k:%M", "%e. %B %Y", "%k:%M", ], 'jp' => [ [ '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'], [ qw( 1 2 3 4 5 6 7 8 9 10 11 12 ) ], [ qw( AM PM ) ], "%Y年%m月%d日 %H:%M", "%Y年%m月%d日", "%H:%M", "%Y年%m月", ], 'et' => [ [ qw( pühapäev esmaspäev teisipäev kolmapäev neljapäev reede laupäev ) ], [ ('jaanuar', 'veebruar', 'märts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember') ], [ qw( AM PM ) ], "%m.%d.%y %H:%M", "%e. %B %Y", "%H:%M", ],);$Languages{en_US} = $Languages{en_us} = $Languages{"en-us"} = $Languages{en};sub launch_background_tasks { require MT::ConfigMgr; my $cfg = MT::ConfigMgr->instance(); return !($ENV{MOD_PERL} || !$cfg->LaunchBackgroundTasks);}sub start_background_task { my ($func) = @_; if (!launch_background_tasks()) { $func->() } else { $| = 1; # Flush open filehandles my $pid = fork(); if (!$pid) { # child close STDIN; open STDIN, "</dev/null"; close STDOUT; open STDOUT, ">/dev/null"; MT::Object->driver->init(); $func->(); CORE::exit(0) if defined($pid) && !$pid; } else { MT::Object->driver->init(); } }}{ eval { require bytes; 1; }; sub addbin { #local $ENV{LANG} = undef; my ($a, $b) = @_; my $length = (length $a > length $b ? length $a : length $b); $a = "\0" x ($length - (length $a)) . $a; $b = "\0" x ($length - (length $b)) . $b; my $carry = 0; my $result = ''; for (my $i=1; $i <= $length; $i++) { my $adigit = ord(substr($a, -$i, 1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -