$cells";
} else {
$cells = "$pre $cells";
}
$cells =~ s@\|$@ | @go;
$cells =~ s@\|@ @go;
return $cells;
}
# =========================
sub internalLink
{
my( $web, $page, $text, $bar, $foo ) = @_;
# bar is heading space
# foo is boolean, false suppress link for non-existing pages
#FB extend Wiki notation
# $page =~ s/\s/_/;
$page =~ s/\s/_/g;
$text =~ s/_/ /g;
#/FB
#FB multi-language
my $defaultLanguage = getPrefsValue("DEFAULTLANGUAGE");
my $language = getPrefsValue("LANGUAGE"); # it should be it, es, etc.
$language = $defaultLanguage unless $language;
$language = "en" unless $language;
$language = lc($language);
if ($language eq "en") {
if( $doPluralToSingular && $page =~ /s$/ && ! topicExists( $web, $page) ) {
# page is a non-existing plural
my $tmp = $page;
$tmp =~ s/ies$/y/; # plurals like policy / policies
$tmp =~ s/sses$/ss/; # plurals like address / addresses
$tmp =~ s/xes$/x/; # plurals like box / boxes
$tmp =~ s/([A-Za-rt-z])s$/$1/; # others, excluding ending ss like address(es)
if( topicExists( $web, $tmp ) ) {
$page = $tmp;
}
}
}
#/FB
#FB subwebs
if (isSubWeb($web,$page)) { # a subweb defaults to WebHome
$page .= "/$mainTopicname";
}
#/FB
# PTh 22 Jul 2000: Added before topic with question link
# (prevent double question when rendered twice by inline search)
topicExists( $web, $page) ?
"$bar$text<\/A>"
: $foo?"$bar$text?"
: "$bar$text";
}
# =========================
sub externalLink
{
my( $pre, $url ) = @_;
if( $url =~ /\.(gif|jpg|jpeg)$/ ) {
my $filename = $url;
$filename =~ s@.*/([^/]*)@$1@go;
return "$pre";
}
return "$pre$url";
}
# =========================
sub isWikiName
{
my( $name ) = @_;
if ( $name =~ /^[A-Z]+[a-z]+(?:[A-Z]+[a-zA-Z0-9]*)$/ ) {
return "1";
}
return "";
}
# =========================
sub getRenderedVersion
{
my( $text, $theWeb ) = @_;
my( $result, $insidePRE, $insideTABLE, $blockquote );
# PTh 22 Jul 2000: added $theWeb for correct handling of %INCLUDE%, %SEARCH%
if( !$theWeb ) {
$theWeb = $webName;
}
$result = "";
$insidePRE = 0;
$insideTABLE = 0;
$blockquote = 0;
$code = "";
$text =~ s/\\\n//go;
$text =~ s/\r//go;
foreach( split( /\n/, $text ) ) {
m//i && ($insidePRE= 1);
m@ @i && ($insidePRE= 0);
if( $insidePRE==0) {
# Wiki extended rules
$_ = extendGetRenderedVersionOutsidePRE( $_, $theWeb );
#Blockquote
s/^>(.*?)$/> $1 <\/cite> /go;
s/\<(\S.*?)\>/$TranslationToken$1$TranslationToken/go;
s/<\;/go;
s/>/>\;/go;
s/$TranslationToken(\S.*?)$TranslationToken/\<$1\>/go;
# Handle embedded URLs
s@(^|[\-\*\s])((http|ftp|gopher|news|https)\:(\S+[^\s\.,!\?;:]))@&externalLink($1,$2)@geo;
# Entities
s/&(\w+?)\;/$TranslationToken$1\;/go;
s/&/&/go;
s/$TranslationToken/&/go;
s/^----*/ /o;
s@^([a-zA-Z0-9]+)----*@@o;
# Table of format: | cell | cell |
if( $_ =~ /^(\s*)\|.*\|$/ ) {
s/^(\s*)\|(\s*)(.*)/&emitTR($1,$3,$insideTABLE)/eo;
$insideTABLE = 1;
} elsif( $insideTABLE ) {
$result .= " | \n";
$insideTABLE = 0;
}
# Lists etc.
s/^\s*$/ /o && ( $code = 0 );
m/^(\S+?)/o && ( $code = 0 );
s/^(\t+)(\S+?):\s/ $2 /o && ( $result .= &emitCode( "DL", length $1 ) );
s/^(\t+)\* / /o && ( $result .= &emitCode( "UL", length $1 ) );
s/^(\t+)\d+\.?/ /o && ( $result .= &emitCode( "OL", length $1 ) );
if( !$code ) {
$result .= &emitCode( "", 0 );
$code = "";
}
s/(.*)/\n$1\n/o;
# Emphasizing
# PTh 20 Jul 2000: More relaxing rules, allow trailing ,.;:!?
s/(\s)__([^\s].*?[^\s])__([\s\,\.\;\:\!\?])/$1$2<\/EM><\/STRONG>$3/go;
s/(\s)\*([^\s].*?[^\s])\*([\s\,\.\;\:\!\?])/$1$2<\/STRONG>$3/go;
s/(\s)=([^\s].*?[^\s])=([\s\,\.\;\:\!\?])/$1$2<\/CODE>$3/go;
s/(\s)_([^\s].*?[^\s])_([\s\,\.\;\:\!\?])/$1$2<\/EM>$3/go;
# Mailto
s#(^|[\s\(])(?:mailto\:)*([a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+)(?=[\s\)]|$)#$1$2#go;
# Make internal links
## add Web.TopicName internal link -- PeterThoeny:
## allow 'AaA1' type format, but not 'Aa1' type -- PeterThoeny:
s/([\*\s][\(\-\*\s]*)([A-Z]+[a-z]*)\.([A-Z]+[a-z]+(?:[A-Z]+[a-zA-Z0-9]*))/&internalLink($2,$3,"$TranslationToken$3$TranslationToken",$1,1)/geo;
s/([\*\s][\(\-\*\s]*)([A-Z]+[a-z]+(?:[A-Z]+[a-zA-Z0-9]*))/&internalLink($theWeb,$2,$2,$1,1)/geo;
s/$TranslationToken(\S.*?)$TranslationToken/$1/go;
s/([\*\s][\-\*\s]*)([A-Z]{3,})/&internalLink($theWeb,$2,$2,$1,0)/geo;
s/(.*?)<\/link>/&internalLink($theWeb,$1,$1,"",1)/geo;
s/^\n//o;
} else {
# inside
# Wiki extended rules
$_ = extendGetRenderedVersionInsidePRE( $_, $theWeb );
s/(.*)/$1\n/o;
}
s/\t/ /go;
$result .= $_;
}
if( $insideTABLE ) {
$result .= "\n";
}
$result .= &emitCode( "", 0 );
if( $insidePRE ) {
$result .= " \n";
}
return $result;
}
1;
|