I've back-ported the $page feature and the better handling of punctuation to the March beta, and in the process found a bug and fixed it. Fix should apply directly to the alpha.
Test case is the following:
This uses an
InterWikis rule mapping RFC onto http://www.faqs.org/rfcs/rfc$page.html (by the way, this would be a good rule for TWiki.org's Interwiki setup, as it provides hyperlinked RFCs - the current rule uses
$name not
$page, so should be fixed anyway.)
In the basic backport, every other RFC: link failed (as on this page at time of writing), because the $postfixPattern is greedy. Instead, I did the following - as a global in
InterwikiPlugin.pm, I set:
$prefixPattern = '(^|[\s\-\*\(])';
$interSiteNamePattern = '([A-Z][A-Za-z]+';
$topicNamePattern = '[a-zA-Z0-9_\/][a-zA-Z0-9\-\+\_\.\,\;\:\!\?\/]+?)';
$InterLinkPattern = "$interSiteNamePattern\:$topicNamePattern";
# $postfixPattern = '([\s\.\,\;\:\!\?\)]*(\s|$))';
# For lookahead version:
$postfixLookaheadPattern = '(?=[\s\.\,\;\:\!\?\)]*(\s|$))';
Then, in the (March beta based)
outsidePREHandler, I used this (no need to return the result of last match as it's a lookahead only):
$_[0] =~ s/$prefixPattern($InterLinkPattern)$postfixLookaheadPattern/"$1" . &handleInterwiki("$2")/geo;
This would also simplify
handleInterwikiSiteLink in the Alpha code, since it doesn't need to pass the postfix match result back and forth.
Hope this is clear - lookahead matching in Perl is very neat, and really could have been designed for this situation.
--
RichardDonkin - 24 Jul 2001
Thanks Richard. Fix is incorporated in plugin package.
--
PeterThoeny - 26 Jul 2001
I have found two problems with the
InterwikiPlugin code.
The first was a trivial fix. The page portion of the Interwiki link would not allow an '=' to be used. This became a simple update of the $pagePattern variable.
$pagePattern = '([a-zA-Z0-9_\/][a-zA-Z0-9\-\=\+\_\.\,\;\:\!\?\/]+?)';
The second problem was that the Interwiki link could not be used inside of a specific link. So the following modifications to outsidePREHandler() and handleInterwiki() along with the addition of embedInterwiki() allow this to happen.
sub outsidePREHandler
{
### my ( $text ) = @_; # do not uncomment, use $_[0] instead
$_[0] =~ s/$prefixPattern$sitePattern\:$pagePattern$postfixPattern/"$1" . &embedInterwiki($2,$3)/geo;
$_[0] =~ s/\[\[\s*$sitePattern\:$pagePattern\s*\]\[/"[[" . &handleInterwiki($1,$2) . "]["/geo;
}
sub handleInterwiki
{
my( $theSite, $theTopic ) = @_;
&TWiki::Func::writeDebug( "- InterwikiPlugin::handleInterwikiSiteLink: (site: $theSite), (topic: $theTopic)" \) if $debug;
my $text = "";
if( defined( $interSiteTable{ $theSite } ) ) {
my( $url, $help ) = split( /\s+/, $interSiteTable{ $theSite }, 2 );
&TWiki::Func::writeDebug( " (url: $url)" ) if $debug;
if( $url =~ s/\$page/$theTopic/go ) {
$text = $url;
} else {
$text = $url . $theTopic;
}
} else {
$text = "$theSite\:$theTopic";
}
return $text;
}
# =========================
sub embedInterwiki
{
my ($theSite, $theTopic) = @_;
if( defined( $interSiteTable{ $theSite } ) ) {
my( $url, $help ) = split( /\s+/, $interSiteTable{ $theSite }, 2 );
my $title = "";
if( ! $suppressTooltip ) {
$help =~ s/<nop>/ /goi;
$help =~ s/[\"\<\>]*//goi;
$help =~ s/\$page/$theTopic/go;
$title = " title=\"$help\"";
}
}
$url = handleInterwiki ($theSite, $theTopic);
$text = "<a href=\"$url\" $title>$theSite\:$theTopic</a>";
&TWiki::Func::writeDebug( " (url: $url), (help: $help)" ) if $debug;
return $text;
}
--
GerardHickey - 11 Jan 2002
I'm glad to see the specific links +
InterWiki fix, it makes them a lot more usable where you don't want the Wiki site name to interrupt the flow of a sentence. Also, have a look at
EasierExternalLinking, which is quite an easy change to specific links making them easier to type.
--
RichardDonkin - 12 Jan 2002
I've been reviewing settings and use of
InterwikiPlugin on my TWiki installation on a hosted domain and have a couple of questions. Some of the aliases are in the format of non-existent topic. I followed the url of one (
OrgPatterns) and found that the page had moved. Thinking that might be reason that the alias showed up as a non-existant topic, I went to the new url, copied it and then when back to edit my
InterWikis page and inserted the new url. I then went to test if this interWiki link would work and at first it did not. Then I noticed that the correct url had a "?" between the frontpage url and the particular topic so I went back and added "?" to the end of the url on my
InterWikis page. Now my links to
OrgPatterns wiki seem to work. However, the Alias listing for
OrgPatterns still shows up as a non-existent topic. As a newbie to TWiki, I'd like to have a clearer understanding of what's going on here. My specific questions are:
- What does it indicate if an alias shows up as a non-existent page? (This is the case for most of the aliases on my site.) See later note below.
- When adding or editing the url for an alias, are there some general rules that must be followed? Eg. adding "?" to the end or the url. I notice some have this and others do not. Might such conventions be specific to different sites and if so, what should we look for?
- What is the function of the "?" at the end of some urls?
- Could you explain a little more about the meaning of the "Tooltip Text" (what it is, how it works, etc) or direct me to somewhere I can learn more about it.
A later note about the aliases formating: I noticed that the ones that showed up as non-existent topics were
WikiWords. OK, it makes sense that TWiki was interpreting the alias as a topic link for a topic that did not exist. However, looking at the
InterSiteLinkRules on TWiki.org, this isn't the case. I tried to edit that page just to see if there was some special formating but of course I could not.
I appreciate any help in better understanding of how
InterwikiPlugin works - I plan on using it alot. Perhaps some of my questions as a newbie suggest additions to documentation for this plugin.
--
LynnwoodBrown - 16 Mar 2002
As with any
WikiWord, a '?' at the end of a URL indicates a
WikiWordThatDoesNotPointToAPage (like this one) - see
TWikiDocumentation. The Aliases listed on
TWiki.InterSiteLinkRules are no different - they only get interpreted differently when you have Alias:PageStuff, i.e. the :PageStuff bit is what makes them be interpreted as aliases, e.g.
MeatBall:FrontPage
or
Google:twiki+wiki
.
PeterThoeny added <noautolink> ... </noautolink> around the body of
InterSiteLinkRules, which prevents
WikiWords being linked. You can either use this or put <nop> in front of specific words.
The tooltips are implemented using the TITLE attribute - try hovering your mouse over the links above, and do a View Source on this page to see how the link appears. Also, try viewing
InterSiteLinkRules with
?raw=on suffixed so you can see the TWiki syntax used.
--
RichardDonkin - 17 Mar 2002
See
InterwikiLinksForINCLUDE idea to
%INCLUDE{}% an external page in
InterwikiPlugin syntax.
--
PeterThoeny - 18 Jul 2002
(Hope this is the right place to ask about this, rather than in Support.)
Why doesn't
[[Wiki:ExtremeProgramming][this Interwiki link]] work when
Wiki:ExtremeProgramming
does?
Is this an oversight in the
InterwikiPlugin implementation or a misunderstanding of its use on my part?
[20 minutes later] Oh, wait. I just read
InterwikiLinksForINCLUDE and saw
DaveBoulton's 18 Jul 2002 comment about the same problem. Never mind. Hope this gets fixed some day -- seems really weird not to be able to use this great convenience inside the great convenience of the double-bracket notation.
--
MitchellModel - 25 Nov 2002
Yes, this would be very nice - I frequently want to do nicer link text for Interwiki links. I would like to see this for the
EasierExternalLinking format, e.g.
[[Wiki:ExtremeProgramming this Interwiki link]], as well as the traditional format.
You would probably need to look at
CVS:lib/TWiki.pm
, in the
getRenderedVersion subroutine, where it does various sorts of external link, and then put a modified version of that code in the
InterwikiPlugin, where it would run earlier.
However, I now realise there's a patch for this above, see
GerardHickey's comment. If you can test this out and do
EasierExternalLinking as well, I think this would be well worth including in this plugin.
--
RichardDonkin - 26 Nov 2002
On
TWikiReleaseLinkTool people talk of the need to change internal links on
TWikiDotOrg when publishing as part of a release. They become interwiki links, e.g. from
CoreTeam to
TWiki:Codev/CoreTeam
I think that this is better written
TWiki:Codev.CoreTeam
because I don't see why the syntax of the Web.Topic component should change just because it is offsite. Indeed I think that the form with the slash is inconsistant and gratuitous whereas
TWiki:Codev.CoreTeam
is is a nice consistant extension of the existing syntax.
--
MartinCleaver - 16 Jan 2003
On testing I note that the form
TWiki:Codev.CoreTeam
doesn't work on
TWikiDotOrg (so probably doesn't work in both
AthensRelease and
BeijingRelease too). In my opinion, this definitely a bug.
--
MartinCleaver - 16 Jan 2003
You are right,
TWiki:Codev.CoreTeam is more consistent. The
TWiki:Codev/CoreTeam format is not a bug of the Interwiki Plugin, the Plugin simply passes that string to the TWiki URL. The TWiki engine could (should) be enhanced to understand an extended path of
/Web.TopicName in addition to the
/Web/TopicName syntax. There was some discussion about this in the Codev web.
--
PeterThoeny - 17 Jan 2003
TWiki.org and
TWikiAlphaRelease understand now
TWiki:Codev.CoreTeam type links.
Updated also the Plugin to allow number character
# in the page name.
--
PeterThoeny - 18 Jan 2003
A while back I updated to the latest version of TWiki. It is using version 1.0.3 of the Interwiki plugin.
Unfortunately I did not catch it until now, but several of my Interwiki links were broken because the plugin does not look inside the specific links (i.e. [<nop[ ][ ]]). I have gone back and added the following line to the ousidePREHandler() function.
$_[0] =~ s/\[\[\s*$sitePattern:$pagePattern$postfixPattern\s*\]\[/"[[" . &handleInterwiki($2,$3) . "]["/geo;
This line is placed right after the existing regex. Can this line be included in future releases? It seems that it is a fairly common discussion from the comments above.
Thanks.
--
GerardHickey - 27 Jun 2003
The TWiki administrator at my office has made a nice change to
InterwikiPlugin. Links like:
Dictionary:contumacious
show up as one would expect, with the "Dictionary:" included on the front of each link. However, he's added:
Dictionary::contumacious
so that double-colons allow only the WORD to show up in the external link. That is, the double-colon is a little like:
[[Dictionary:contumacious][contumacious]]
(that is, if you include the change that
GerardHickey just hinted at)
He also has made it so that %20 is included in the Interwiki link. For example, right now:
MyFileStore:Some%20Directory%20With%20Spaces/A%20File
does not get linked -- I think this is because of the presence of the % sign. He's changed it so that %20 is allowed. This makes it nice when people link to files stored on a public file share that happens to have spaces in it.
Just a thought. It works well for us.
--
TedPavlic - 22 Aug 2003
%20 should already work with the latest Plugin.
Good idea with the double colon. Wondering, possibly use other chars? Because
:: conflicts with Perl program documentation (among other languages)
--
PeterThoeny - 23 Aug 2003
Enhancement to accept Interwiki links also in
<nop>[<nop>[<nop>ExternalSite:Page]]
TWiki URL's.
--
PatrickNomblot - 27 Oct 2003
The
InterwikiPlugin located in the latest
TWikiAlphaRelease (
CVS:lib/TWiki/Plugins/Interwiki.pm
) supports now square bracket links, see
InterWikiLinksDoNotWorkInBracketNotation. Sorry Patrick and Gerard, I looked at this dev page too late.
--
PeterThoeny - 16 Feb 2004
Small addition: Support for
[[Site:Page label]] (besides the
[[Site:Page][label]] [[Site:Page]] rules of previous upgrade)
--
PeterThoeny - 16 Feb 2004
Perhaps I'm missing something obvious, but the latest packaged version of this plugin is not working quite right for me.
InterWiki links work just fine in my TWiki web, which for me is called System at
http://www.theoretic.com/System/SitePreferences
but they do not work in other webs, rendering either as plain text or as non-existant topics when forced with double brackets.
--
AdamTheo - 15 May 2004
Sounds like you renamed the TWiki web but not reassigned the SYSTEMWEB (or whatever that preference is). The plugin then counts only for the web into which it is installed.
--
MartinCleaver - 15 May 2004
Sorry, what setting is this you are talking about? Is it a setting in the TWiki.cfg,
TWikiPreferences, or
WebPreferences? I'm not familiar with a setting that determines when Plugins work, other than the settings under
TWikiPreferences showing which Plugins are installed. Thanks.
- Looks like the
$twikiWebname setting in TWiki.cfg is not set to the new name. -- PeterThoeny - 20 May 2004
--
AdamTheo - 16 May 2004
I've found another bug: Interwiki links in specific bracketed links such as [[!TWiki:Support.Changes][Support Changes]] that are included from another topic through %INCLUDE{Sandbox.InterwikiLink}% do not work. When this Interwiki link is INCLUDE'd, TWiki strips the colon, so TWiki interprets it as a new page to create in the current web.
- Not sure I understand what you would like to do. -- PeterThoeny - 20 May 2004
- When I create a topic with some Interwiki-ized links in brackets (specific links), then %INCLUDE{}% that topic into another topic, the Interwiki links are not rendered properly. They are instead stripped of the colon, and rendered as a link to a non-existant topic. Take a look at http://www.theoretic.com
for an example. Over on the far left hand side of the page, under the "People" box. Those links are INCLUDED from the System.PeopleMenu topic, but as you can see, are not renederd properly. _An update: it seems that the Interwiki links INCLUDED from another topic work if the INCLUDED topic is from the same web, but not if it's INCLUDED from another web.
--
AdamTheo - 20 May 2004
And another bug: The plugin won't catch Interwiki links that are immediately preceeded by a greater than character (
>), such as part of an HTML tag. For example:
TWiki:Support.Changes
- This is spec, Interwiki links require a leading space or parenthesis, same as for WikiWord links. -- PeterThoeny - 20 May 2004
- Ah, ok, I forgot about that. Alright, complaint withdrawn -- AdamTheo - 20 May 2004
--
AdamTheo - 20 May 2004
Adam, maybe you need to be using INCLUDINGTOPIC or INCLUDINGWEB instead. See
TWikiVariables
Also if you renamed the user-page web from
Main to something else, you also need to change the name of the User's web in
TWiki.cfg
--
MattWilkie - 21 May 2004
Yeah, I've changed the
TWiki web in the
TWiki.cfg file. And I doubt using INCLUDINGTOPIC/INCLUDINGWEB would help, since I only use absolute references in the links.
--
AdamTheo - 21 May 2004
Hmm... no one's able to re-create this problem? I guess I'll try re-installing the plugin, and re-evaluating my setup.
--
AdamTheo - 26 May 2004
Adam, not sure but you might hit a bug? Possibly related to the fact that TWiki fixes
WikiWord links if the webs are different of the including topic and included topic. This
might result in a bug with Interwiki links in square brackets.
--
PeterThoeny - 02 Jun 2004
Copied from Codev.WeDontKnowIt:
The
InterwikiPlugin is shipped with the release, so I'm reporting an issue against it here instead of the dev topic.
The tooltip associated with twiki.org is
"... on the TWiki site, we know it!"
I've never been sure if this is just bad English, or if there is something I'm missing. What do we know? What does everyone else know that I don't? What is this trying to say?
Can we drop the "we know it!" bit please? Or replace it with something that makes a bit more sense, like "... on the TWiki site, the home of TWiki!"
--
CrawfordCurrie - 24 Aug 2004
seconded
--
MartinCleaver - 24 Aug 2004
Makes sense, thanks for caring for the details.
Updated the
InterWikis topic in the
InterwikiPlugin package; will be shipped with
TWikiRelease01Sep2004.
--
PeterThoeny - 25 Aug 2004
I haven't tried this yet, but does Interwiki support web-centric
InterWiki files? By that I mean, does the plugin look for
InterWiki rules in the current web, incorporate those rules, then look in
/data/Twiki/InterWikis for any global redirection rules? My goal is to provide individuals who maintain separate webs on our site the ability to create their own inter-site links without stepping on other people.
Thanks
--
SteveRJones - 17 Sep 2004
The Plugin does not support this at this time. It is an easy enhancement though. We can take it into the next release if you provide a patch. Basically, in initPlugin you need to read the default TWiki.InterWikis topic text first (specified in prefs), then read the one in the current web of the same name, and merge both topic contents into one %interSiteTable.
Just reading the code, the Plugin is not clean: Better to use
TWiki::Func::readTopicText() to read the topic text.
--
PeterThoeny - 29 Sep 2004