X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/ad6f4c525311f786769e233baf9913eea5303ec0..723ebda4760d7e6bb848f1b1d39706f441d3f209:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 70d4a7a56..d8b272125 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -6,6 +6,10 @@ use strict; use Encode; use open qw{:utf8 :std}; +# Optimisation. +use Memoize; +memoize("abs2rel"); + use vars qw{%config %links %oldlinks %oldpagemtime %pagectime %renderedfiles %pagesources %depends %hooks}; @@ -16,7 +20,7 @@ sub defaultconfig () { #{{{ wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/, verbose => 0, wikiname => "wiki", - default_pageext => ".mdwn", + default_pageext => "mdwn", cgi => 0, rcs => 'svn', notify => 0, @@ -123,7 +127,7 @@ sub dirname ($) { #{{{ sub pagetype ($) { #{{{ my $page=shift; - if ($page =~ /\.(.*?)$/) { + if ($page =~ /\.([^.]+)$/) { return $1 if exists $hooks{htmlize}{$1}; } return undef; @@ -260,6 +264,19 @@ sub styleurl (;$) { #{{{ return $page."style.css"; } #}}} +sub abs2rel ($$) { + # Work around very innefficient behavior in File::Spec if abs2rel + # is passed two relative paths. It's much faster if paths are + # absolute! + my $path="/".shift; + my $base="/".shift; + + require File::Spec; + my $ret=File::Spec->abs2rel($path, $base); + $ret=~s/^// if defined $ret; + return $ret; +} + sub htmllink ($$$;$$$) { #{{{ my $lpage=shift; # the page doing the linking my $page=shift; # the page that will contain the link (different for inline) @@ -292,8 +309,7 @@ sub htmllink ($$$;$$$) { #{{{ "\">?$linktext" } - require File::Spec; - $bestlink=File::Spec->abs2rel($bestlink, dirname($page)); + $bestlink=abs2rel($bestlink, dirname($page)); if (! $noimageinline && isinlinableimage($bestlink)) { return "\"$linktext\"";