← Index
NYTProf Performance Profile   « line view »
For ./view
  Run on Fri Jul 31 19:05:14 2015
Reported on Fri Jul 31 19:08:10 2015

Filename/var/www/foswiki11/lib/Foswiki/Plugins/InterwikiPlugin.pm
StatementsExecuted 376 statements in 3.21ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
5111.36ms1.36msFoswiki::Plugins::InterwikiPlugin::::preRenderingHandlerFoswiki::Plugins::InterwikiPlugin::preRenderingHandler
111695µs3.11msFoswiki::Plugins::InterwikiPlugin::::initPluginFoswiki::Plugins::InterwikiPlugin::initPlugin
5311289µs289µsFoswiki::Plugins::InterwikiPlugin::::_mapFoswiki::Plugins::InterwikiPlugin::_map
11113µs26µsFoswiki::Plugins::InterwikiPlugin::::BEGIN@23Foswiki::Plugins::InterwikiPlugin::BEGIN@23
11113µs19µsFoswiki::Plugins::InterwikiPlugin::::BEGIN@40Foswiki::Plugins::InterwikiPlugin::BEGIN@40
11112µs12µsFoswiki::Plugins::InterwikiPlugin::::_trimWhitespaceFoswiki::Plugins::InterwikiPlugin::_trimWhitespace
11110µs15µsFoswiki::Plugins::InterwikiPlugin::::BEGIN@24Foswiki::Plugins::InterwikiPlugin::BEGIN@24
1119µs32µsFoswiki::Plugins::InterwikiPlugin::::BEGIN@29Foswiki::Plugins::InterwikiPlugin::BEGIN@29
1114µs4µsFoswiki::Plugins::InterwikiPlugin::::BEGIN@26Foswiki::Plugins::InterwikiPlugin::BEGIN@26
1113µs3µsFoswiki::Plugins::InterwikiPlugin::::BEGIN@27Foswiki::Plugins::InterwikiPlugin::BEGIN@27
0000s0sFoswiki::Plugins::InterwikiPlugin::::_linkFoswiki::Plugins::InterwikiPlugin::_link
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# See bottom of file for license and copyright information
2
3=begin TML
4
5---+ package Foswiki::Plugins::InterwikiPlugin
6
7Recognises and processes special links to other sites defined
8using "inter-site syntax".
9
10The recognized syntax is:
11<pre>
12 InterSiteName:TopicName
13</pre>
14
15Sites must start with upper case and must be preceded by white
16space, '-', '*' or '(', or be part of the link expression
17in a [[link]] or [[link][text]] expression.
18
19=cut
20
21package Foswiki::Plugins::InterwikiPlugin;
22
23235µs239µs
# spent 26µs (13+13) within Foswiki::Plugins::InterwikiPlugin::BEGIN@23 which was called: # once (13µs+13µs) by Foswiki::Plugin::BEGIN@2.18 at line 23
use strict;
# spent 26µs making 1 call to Foswiki::Plugins::InterwikiPlugin::BEGIN@23 # spent 13µs making 1 call to strict::import
24224µs220µs
# spent 15µs (10+5) within Foswiki::Plugins::InterwikiPlugin::BEGIN@24 which was called: # once (10µs+5µs) by Foswiki::Plugin::BEGIN@2.18 at line 24
use warnings;
# spent 15µs making 1 call to Foswiki::Plugins::InterwikiPlugin::BEGIN@24 # spent 5µs making 1 call to warnings::import
25
26219µs14µs
# spent 4µs within Foswiki::Plugins::InterwikiPlugin::BEGIN@26 which was called: # once (4µs+0s) by Foswiki::Plugin::BEGIN@2.18 at line 26
use Foswiki::Func (); # The plugins API
# spent 4µs making 1 call to Foswiki::Plugins::InterwikiPlugin::BEGIN@26
27220µs13µs
# spent 3µs within Foswiki::Plugins::InterwikiPlugin::BEGIN@27 which was called: # once (3µs+0s) by Foswiki::Plugin::BEGIN@2.18 at line 27
use Foswiki::Plugins (); # For the API version
# spent 3µs making 1 call to Foswiki::Plugins::InterwikiPlugin::BEGIN@27
28
293115µs363µs
# spent 32µs (9+23) within Foswiki::Plugins::InterwikiPlugin::BEGIN@29 which was called: # once (9µs+23µs) by Foswiki::Plugin::BEGIN@2.18 at line 29
use version; our $VERSION = version->declare("v1.1.7");
# spent 32µs making 1 call to Foswiki::Plugins::InterwikiPlugin::BEGIN@29 # spent 23µs making 1 call to version::import # spent 7µs making 1 call to version::vxs::declare
301300nsour $RELEASE = '1.1.7';
311200nsour $NO_PREFS_IN_TOPIC = 1;
321300nsour $SHORTDESCRIPTION =
33'Link !ExternalSite:Page text to external sites based on aliases defined in a rules topic';
34
351200nsmy $interLinkFormat;
361100nsmy $sitePattern;
371100nsmy $pagePattern;
381100nsmy %interSiteTable;
39
40
# spent 19µs (13+6) within Foswiki::Plugins::InterwikiPlugin::BEGIN@40 which was called: # once (13µs+6µs) by Foswiki::Plugin::BEGIN@2.18 at line 47
BEGIN {
41
42 # 'Use locale' for internationalisation of Perl sorting and searching -
4314µs if ( $Foswiki::cfg{UseLocale} ) {
441400ns require locale;
4516µs16µs import locale();
# spent 6µs making 1 call to locale::import
46 }
471647µs119µs}
# spent 19µs making 1 call to Foswiki::Plugins::InterwikiPlugin::BEGIN@40
48
49# Read preferences and get all InterWiki Site->URL mappings
50
# spent 3.11ms (695µs+2.41) within Foswiki::Plugins::InterwikiPlugin::initPlugin which was called: # once (695µs+2.41ms) by Foswiki::Plugin::__ANON__[/var/www/foswiki11/lib/Foswiki/Plugin.pm:241] at line 234 of /var/www/foswiki11/lib/Foswiki/Plugin.pm
sub initPlugin {
5112µs my ( $topic, $web, $user, $installWeb ) = @_;
52
53 # Regexes for the Site:page format InterWiki reference
5412µs my $man = $Foswiki::regex{mixedAlphaNum};
5511µs my $ua = $Foswiki::regex{upperAlpha};
5611µs %interSiteTable = ();
5713µs $sitePattern = "([$ua][$man]+)";
5812µs $pagePattern = "((?:'[^']*')|(?:\"[^\"]*\")|(?:[${man}\_\~\%\/][$man"
59 . '"\'\.\/\+\_\~\,\&\;\:\=\!\?\%\#\@\-\(\)]*?))';
60
61 # Get plugin preferences from InterwikiPlugin topic
6213µs136µs $interLinkFormat =
# spent 36µs making 1 call to Foswiki::Func::getPreferencesValue
63 Foswiki::Func::getPreferencesValue('INTERWIKIPLUGIN_INTERLINKFORMAT')
64 || '<a class="interwikiLink" href="$url" title="$tooltip"><noautolink>$label</noautolink></a>';
65
6612µs155µs my $rulesTopicPref =
# spent 55µs making 1 call to Foswiki::Func::getPreferencesValue
67 Foswiki::Func::getPreferencesValue('INTERWIKIPLUGIN_RULESTOPIC')
68 || 'InterWikis';
6914µs my @rulesTopics = split( ',', $rulesTopicPref );
7013µs foreach my $topic (@rulesTopics) {
7115µs112µs $topic = _trimWhitespace($topic);
# spent 12µs making 1 call to Foswiki::Plugins::InterwikiPlugin::_trimWhitespace
72
7315µs1134µs my ( $interWeb, $interTopic ) =
# spent 134µs making 1 call to Foswiki::Func::normalizeWebTopicName
74 Foswiki::Func::normalizeWebTopicName( $installWeb, $topic );
75
7614µs11.07ms if (
# spent 1.07ms making 1 call to Foswiki::Func::checkAccessPermission
77 !Foswiki::Func::checkAccessPermission(
78 'VIEW', $user, undef, $interTopic, $interWeb
79 )
80 )
81 {
82 Foswiki::Func::writeWarning(
83"InterwikiPlugin: user '$user' did not have permission to read the rules topic at '$interWeb.$interTopic'"
84 );
85 return 1;
86 }
8715µs1814µs my $text =
# spent 814µs making 1 call to Foswiki::Func::readTopicText
88 Foswiki::Func::readTopicText( $interWeb, $interTopic, undef, 1 );
89
90 # '| alias | URL | ...' table and extract into 'alias', "URL" list
915373µs53289µs $text =~
# spent 289µs making 53 calls to Foswiki::Plugins::InterwikiPlugin::_map, avg 5µs/call
921463µss/^\|\s*$sitePattern\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|.*$/_map($1,$2,$3)/meg;
93 }
94
95116µs $sitePattern = "(" . join( "|", keys %interSiteTable ) . ")";
9617µs return 1;
97}
98
99
# spent 289µs within Foswiki::Plugins::InterwikiPlugin::_map which was called 53 times, avg 5µs/call: # 53 times (289µs+0s) by Foswiki::Plugins::InterwikiPlugin::initPlugin at line 91, avg 5µs/call
sub _map {
1005371µs my ( $site, $url, $tooltip ) = @_;
1015315µs if ($site) {
1025383µs $interSiteTable{$site}{url} = $url || '';
1035346µs $interSiteTable{$site}{tooltip} = $tooltip || '';
104 }
10553156µs return '';
106}
107
108
# spent 1.36ms within Foswiki::Plugins::InterwikiPlugin::preRenderingHandler which was called 5 times, avg 271µs/call: # 5 times (1.36ms+0s) by Foswiki::Plugin::invoke at line 294 of /var/www/foswiki11/lib/Foswiki/Plugin.pm, avg 271µs/call
sub preRenderingHandler {
109
110 # ref in [[ref]] or [[ref][
111 $_[0] =~
1125186µss/(\[\[)$sitePattern:$pagePattern(\]\]|\]\[[^\]]+\]\])/_link($1,$2,$3,$4)/ge;
113
114 # ref in text
115 $_[0] =~
11651.14mss/(^|[\s\-\*\=\_\(])$sitePattern:$pagePattern(?=[\s\.\,\;\:\!\?\)\*\=\_\|]*(\s|$))/_link($1,$2,$3)/ge;
117
118521µs return;
119}
120
121sub _link {
122 my ( $prefix, $site, $page, $postfix ) = @_;
123
124 $prefix ||= '';
125 $site ||= '';
126 $page ||= '';
127 $postfix ||= '';
128
129 my $upage = $page;
130 if ( $page =~ /^['"](.*)["']$/ ) {
131 $page = $1;
132 $upage = Foswiki::urlEncode($1);
133 }
134
135 my $text = $prefix;
136 if ( defined( $interSiteTable{$site} ) ) {
137 my $tooltip = $interSiteTable{$site}{tooltip};
138 my $url = $interSiteTable{$site}{url};
139
140 #$url .= $page unless ( $url =~ /\$page/ );
141
142 if ( $url =~ /\$page/ ) {
143 $url =~ s/\$page/$upage/g;
144 }
145 else {
146 $url .= $upage;
147 }
148 my $label = '$site:$page';
149
150 if ($postfix) {
151
152 # [[...]] or [[...][...]] interwiki link
153 $text = '';
154 if ( $postfix =~ /^\]\[([^\]]+)/ ) {
155 $label = $1;
156 }
157 }
158
159 my $format = $interLinkFormat;
160 $format =~ s/\$url/$url/g;
161 $format =~ s/\$tooltip/$tooltip/g;
162 $format =~ s/\$label/$label/g;
163 $format =~ s/\$site/$site/g;
164 $format =~ s/\$page/$page/g;
165 $text .= $format;
166 }
167 else {
168 $text .= "$site\:$page$postfix";
169 }
170 return $text;
171}
172
173
# spent 12µs within Foswiki::Plugins::InterwikiPlugin::_trimWhitespace which was called: # once (12µs+0s) by Foswiki::Plugins::InterwikiPlugin::initPlugin at line 71
sub _trimWhitespace {
1741800ns my $string = shift;
17513µs $string =~ s/^\s+//;
17613µs $string =~ s/\s+$//;
17716µs return $string;
178}
179
18016µs1;
181__END__