- return trim ( $t ) ;
-}
-
-function doTableStuff ( $t )
-{
- $t = explode ( "\n" , $t ) ;
- $td = array () ; # Is currently a td tag open?
- $ltd = array () ; # Was it TD or TH?
- $tr = array () ; # Is currently a tr tag open?
- $ltr = array () ; # tr attributes
- foreach ( $t AS $k => $x )
- {
- $x = rtrim ( $x ) ;
- $fc = substr ( $x , 0 , 1 ) ;
- if ( "{|" == substr ( $x , 0 , 2 ) )
- {
- $t[$k] = "<table " . $this->fixTagAttributes ( substr ( $x , 3 ) ) . ">" ;
- array_push ( $td , false ) ;
- array_push ( $ltd , "" ) ;
- array_push ( $tr , false ) ;
- array_push ( $ltr , "" ) ;
- }
- else if ( count ( $td ) == 0 ) { } # Don't do any of the following
- else if ( "|}" == substr ( $x , 0 , 2 ) )
- {
- $z = "</table>\n" ;
- $l = array_pop ( $ltd ) ;
- if ( array_pop ( $tr ) ) $z = "</tr>" . $z ;
- if ( array_pop ( $td ) ) $z = "</{$l}>" . $z ;
- array_pop ( $ltr ) ;
- $t[$k] = $z ;
- }
-/* else if ( "|_" == substr ( $x , 0 , 2 ) ) # Caption
- {
- $z = trim ( substr ( $x , 2 ) ) ;
- $t[$k] = "<caption>{$z}</caption>\n" ;
- }*/
- else if ( "|-" == substr ( $x , 0 , 2 ) ) # Allows for |---------------
- {
- $x = substr ( $x , 1 ) ;
- while ( $x != "" && substr ( $x , 0 , 1 ) == '-' ) $x = substr ( $x , 1 ) ;
- $z = "" ;
- $l = array_pop ( $ltd ) ;
- if ( array_pop ( $tr ) ) $z = "</tr>" . $z ;
- if ( array_pop ( $td ) ) $z = "</{$l}>" . $z ;
- array_pop ( $ltr ) ;
- $t[$k] = $z ;
- array_push ( $tr , false ) ;
- array_push ( $td , false ) ;
- array_push ( $ltd , "" ) ;
- array_push ( $ltr , $this->fixTagAttributes ( $x ) ) ;
- }
- else if ( "|" == $fc || "!" == $fc || "|+" == substr ( $x , 0 , 2 ) ) # Caption
- {
- if ( "|+" == substr ( $x , 0 , 2 ) )
- {
- $fc = "+" ;
- $x = substr ( $x , 1 ) ;
- }
- $after = substr ( $x , 1 ) ;
- if ( $fc == "!" ) $after = str_replace ( "!!" , "||" , $after ) ;
- $after = explode ( "||" , $after ) ;
- $t[$k] = "" ;
- foreach ( $after AS $theline )
- {
- $z = "" ;
- if ( $fc != "+" )
- {
- $tra = array_pop ( $ltr ) ;
- if ( !array_pop ( $tr ) ) $z = "<tr {$tra}>\n" ;
- array_push ( $tr , true ) ;
- array_push ( $ltr , "" ) ;
- }
-
- $l = array_pop ( $ltd ) ;
- if ( array_pop ( $td ) ) $z = "</{$l}>" . $z ;
- if ( $fc == "|" ) $l = "TD" ;
- else if ( $fc == "!" ) $l = "TH" ;
- else if ( $fc == "+" ) $l = "CAPTION" ;
- else $l = "" ;
- array_push ( $ltd , $l ) ;
- $y = explode ( "|" , $theline , 2 ) ;
- if ( count ( $y ) == 1 ) $y = "{$z}<{$l}>{$y[0]}" ;
- else $y = $y = "{$z}<{$l} ".$this->fixTagAttributes($y[0]).">{$y[1]}" ;
- $t[$k] .= $y ;
- array_push ( $td , true ) ;
- }
- }
- }
-
-# Closing open td, tr && table
-while ( count ( $td ) > 0 )
-{
-if ( array_pop ( $td ) ) $t[] = "</td>" ;
-if ( array_pop ( $tr ) ) $t[] = "</tr>" ;
-$t[] = "</table>" ;
-}
-
- $t = implode ( "\n" , $t ) ;
-# $t = $this->removeHTMLtags( $t );
- return $t ;
-}
-
- # Well, OK, it's actually about 14 passes. But since all the
- # hard lifting is done inside PHP's regex code, it probably
- # wouldn't speed things up much to add a real parser.
- #
- function doWikiPass2( $text, $linestart )
- {
- global $wgUser, $wgLang, $wgUseDynamicDates;
- $fname = "OutputPage::doWikiPass2";
- wfProfileIn( $fname );
-
- $text = $this->removeHTMLtags( $text );
- $text = $this->replaceVariables( $text );
-
- $text = preg_replace( "/(^|\n)-----*/", "\\1<hr>", $text );
- $text = str_replace ( "<HR>", "<hr>", $text );
-
- $text = $this->doAllQuotes( $text );
- $text = $this->doHeadings( $text );
- $text = $this->doBlockLevels( $text, $linestart );
-
- if($wgUseDynamicDates) {
- global $wgDateFormatter;
- $text = $wgDateFormatter->reformat( $wgUser->getOption("date"), $text );
- }
-
- $text = $this->replaceExternalLinks( $text );
- $text = $this->replaceInternalLinks ( $text );
- $text = $this->doTableStuff ( $text ) ;
-
- $text = $this->magicISBN( $text );
- $text = $this->magicRFC( $text );
- $text = $this->formatHeadings( $text );
-
- $sk = $wgUser->getSkin();
- $text = $sk->transformContent( $text );
- $text .= $this->categoryMagic () ;
-
- wfProfileOut( $fname );
- return $text;
- }
-
- /* private */ function doAllQuotes( $text )
- {
- $outtext = "";
- $lines = explode( "\r\n", $text );
- foreach ( $lines as $line ) {
- $outtext .= $this->doQuotes ( "", $line, "" ) . "\r\n";
- }
- return $outtext;
- }
-
- /* private */ function doQuotes( $pre, $text, $mode )
- {
- if ( preg_match( "/^(.*)''(.*)$/sU", $text, $m ) ) {
- $m1_strong = ($m[1] == "") ? "" : "<strong>{$m[1]}</strong>";
- $m1_em = ($m[1] == "") ? "" : "<em>{$m[1]}</em>";
- if ( substr ($m[2], 0, 1) == "'" ) {
- $m[2] = substr ($m[2], 1);
- if ($mode == "em") {
- return $this->doQuotes ( $m[1], $m[2], ($m[1] == "") ? "both" : "emstrong" );
- } else if ($mode == "strong") {
- return $m1_strong . $this->doQuotes ( "", $m[2], "" );
- } else if (($mode == "emstrong") || ($mode == "both")) {
- return $this->doQuotes ( "", $pre.$m1_strong.$m[2], "em" );
- } else if ($mode == "strongem") {
- return "<strong>{$pre}{$m1_em}</strong>" . $this->doQuotes ( "", $m[2], "em" );
- } else {
- return $m[1] . $this->doQuotes ( "", $m[2], "strong" );
- }
- } else {
- if ($mode == "strong") {
- return $this->doQuotes ( $m[1], $m[2], ($m[1] == "") ? "both" : "strongem" );
- } else if ($mode == "em") {
- return $m1_em . $this->doQuotes ( "", $m[2], "" );
- } else if ($mode == "emstrong") {
- return "<em>{$pre}{$m1_strong}</em>" . $this->doQuotes ( "", $m[2], "strong" );
- } else if (($mode == "strongem") || ($mode == "both")) {
- return $this->doQuotes ( "", $pre.$m1_em.$m[2], "strong" );
- } else {
- return $m[1] . $this->doQuotes ( "", $m[2], "em" );
- }
- }
- } else {
- $text_strong = ($text == "") ? "" : "<strong>{$text}</strong>";
- $text_em = ($text == "") ? "" : "<em>{$text}</em>";
- if ($mode == "") {
- return $pre . $text;
- } else if ($mode == "em") {
- return $pre . $text_em;
- } else if ($mode == "strong") {
- return $pre . $text_strong;
- } else if ($mode == "strongem") {
- return (($pre == "") && ($text == "")) ? "" : "<strong>{$pre}{$text_em}</strong>";
- } else {
- return (($pre == "") && ($text == "")) ? "" : "<em>{$pre}{$text_strong}</em>";
- }
- }
- }
-
- /* private */ function doHeadings( $text )
- {
- for ( $i = 6; $i >= 1; --$i ) {
- $h = substr( "======", 0, $i );
- $text = preg_replace( "/^{$h}([^=]+){$h}(\\s|$)/m",
- "<h{$i}>\\1</h{$i}>\\2", $text );
- }
- return $text;
- }
-
- # Note: we have to do external links before the internal ones,
- # and otherwise take great care in the order of things here, so
- # that we don't end up interpreting some URLs twice.
-
- /* private */ function replaceExternalLinks( $text )
- {
- $fname = "OutputPage::replaceExternalLinks";
- wfProfileIn( $fname );
- $text = $this->subReplaceExternalLinks( $text, "http", true );
- $text = $this->subReplaceExternalLinks( $text, "https", true );
- $text = $this->subReplaceExternalLinks( $text, "ftp", false );
- $text = $this->subReplaceExternalLinks( $text, "irc", false );
- $text = $this->subReplaceExternalLinks( $text, "gopher", false );
- $text = $this->subReplaceExternalLinks( $text, "news", false );
- $text = $this->subReplaceExternalLinks( $text, "mailto", false );
- wfProfileOut( $fname );
- return $text;
- }
-
- /* private */ function subReplaceExternalLinks( $s, $protocol, $autonumber )
- {
- global $wgUser, $printable;
- global $wgAllowExternalImages;
-
-
- $unique = "4jzAfzB8hNvf4sqyO9Edd8pSmk9rE2in0Tgw3";
- $uc = "A-Za-z0-9_\\/~%\\-+&*#?!=()@\\x80-\\xFF";
-
- # this is the list of separators that should be ignored if they
- # are the last character of an URL but that should be included
- # if they occur within the URL, e.g. "go to www.foo.com, where .."
- # in this case, the last comma should not become part of the URL,
- # but in "www.foo.com/123,2342,32.htm" it should.
- $sep = ",;\.:";
- $fnc = "A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF";
- $images = "gif|png|jpg|jpeg";
-
- # PLEASE NOTE: The curly braces { } are not part of the regex,
- # they are interpreted as part of the string (used to tell PHP
- # that the content of the string should be inserted there).
- $e1 = "/(^|[^\\[])({$protocol}:)([{$uc}{$sep}]+)\\/([{$fnc}]+)\\." .
- "((?i){$images})([^{$uc}]|$)/";
-
- $e2 = "/(^|[^\\[])({$protocol}:)(([".$uc."]|[".$sep."][".$uc."])+)([^". $uc . $sep. "]|[".$sep."]|$)/";
- $sk = $wgUser->getSkin();
-
- if ( $autonumber and $wgAllowExternalImages) { # Use img tags only for HTTP urls
- $s = preg_replace( $e1, "\\1" . $sk->makeImage( "{$unique}:\\3" .
- "/\\4.\\5", "\\4.\\5" ) . "\\6", $s );
- }
- $s = preg_replace( $e2, "\\1" . "<a href=\"{$unique}:\\3\"" .
- $sk->getExternalLinkAttributes( "{$unique}:\\3", wfEscapeHTML(
- "{$unique}:\\3" ) ) . ">" . wfEscapeHTML( "{$unique}:\\3" ) .
- "</a>\\5", $s );
- $s = str_replace( $unique, $protocol, $s );
-
- $a = explode( "[{$protocol}:", " " . $s );
- $s = array_shift( $a );
- $s = substr( $s, 1 );
-
- $e1 = "/^([{$uc}"."{$sep}]+)](.*)\$/sD";
- $e2 = "/^([{$uc}"."{$sep}]+)\\s+([^\\]]+)](.*)\$/sD";
-
- foreach ( $a as $line ) {
- if ( preg_match( $e1, $line, $m ) ) {
- $link = "{$protocol}:{$m[1]}";
- $trail = $m[2];
- if ( $autonumber ) { $text = "[" . ++$this->mAutonumber . "]"; }
- else { $text = wfEscapeHTML( $link ); }
- } else if ( preg_match( $e2, $line, $m ) ) {
- $link = "{$protocol}:{$m[1]}";
- $text = $m[2];
- $trail = $m[3];
- } else {
- $s .= "[{$protocol}:" . $line;
- continue;
- }
- if ( $printable == "yes") $paren = " (<i>" . htmlspecialchars ( $link ) . "</i>)";
- else $paren = "";
- $la = $sk->getExternalLinkAttributes( $link, $text );
- $s .= "<a href='{$link}'{$la}>{$text}</a>{$paren}{$trail}";
-
- }
- return $s;
- }
-
- /* private */ function replaceInternalLinks( $s )
- {
- global $wgTitle, $wgUser, $wgLang;
- global $wgLinkCache, $wgInterwikiMagic, $wgUseCategoryMagic;
- global $wgNamespacesWithSubpages, $wgLanguageCode;
- wfProfileIn( $fname = "OutputPage::replaceInternalLinks" );
-
- wfProfileIn( "$fname-setup" );
- $tc = Title::legalChars() . "#";
- $sk = $wgUser->getSkin();
-
- $a = explode( "[[", " " . $s );
- $s = array_shift( $a );
- $s = substr( $s, 1 );
-
- # Match a link having the form [[namespace:link|alternate]]trail
- $e1 = "/^([{$tc}]+)(?:\\|([^]]+))?]](.*)\$/sD";
- # Match the end of a line for a word that's not followed by whitespace,
- # e.g. in the case of 'The Arab al[[Razi]]', 'al' will be matched
- #$e2 = "/^(.*)\\b(\\w+)\$/suD";
- #$e2 = "/^(.*\\s)(\\S+)\$/suD";
- $e2 = '/^(.*\s)([a-zA-Z\x80-\xff]+)$/sD';
-
-
- # Special and Media are pseudo-namespaces; no pages actually exist in them
- $image = Namespace::getImage();
- $special = Namespace::getSpecial();
- $media = Namespace::getMedia();
- $category = wfMsg ( "category" ) ;
- $nottalk = !Namespace::isTalk( $wgTitle->getNamespace() );
-
- if ( $wgLang->linkPrefixExtension() && preg_match( $e2, $s, $m ) ) {
- $new_prefix = $m[2];
- $s = $m[1];
- } else {
- $new_prefix="";
- }
-
- wfProfileOut( "$fname-setup" );
-
- foreach ( $a as $line ) {
- $prefix = $new_prefix;
- if ( $wgLang->linkPrefixExtension() && preg_match( $e2, $line, $m ) ) {
- $new_prefix = $m[2];
- $line = $m[1];
- } else {
- $new_prefix = "";
- }
- if ( preg_match( $e1, $line, $m ) ) { # page with normal text or alt
- $text = $m[2];
- $trail = $m[3];
- } else { # Invalid form; output directly
- $s .= $prefix . "[[" . $line ;
- continue;
- }
-
- /* Valid link forms:
- Foobar -- normal
- :Foobar -- override special treatment of prefix (images, language links)
- /Foobar -- convert to CurrentPage/Foobar
- /Foobar/ -- convert to CurrentPage/Foobar, strip the initial / from text
- */
- $c = substr($m[1],0,1);
- $noforce = ($c != ":");
- if( $c == "/" ) { # subpage
- if(substr($m[1],-1,1)=="/") { # / at end means we don't want the slash to be shown
- $m[1]=substr($m[1],1,strlen($m[1])-2);
- $noslash=$m[1];
- } else {
- $noslash=substr($m[1],1);
- }
- if($wgNamespacesWithSubpages[$wgTitle->getNamespace()]) { # subpages allowed here
- $link = $wgTitle->getPrefixedText(). "/" . trim($noslash);
- if( "" == $text ) {
- $text= $m[1];
- } # this might be changed for ugliness reasons
- } else {
- $link = $noslash; # no subpage allowed, use standard link
- }
- } elseif( $noforce ) { # no subpage
- $link = $m[1];
- } else {
- $link = substr( $m[1], 1 );
- }
- if( "" == $text )
- $text = $link;
-
- $nt = Title::newFromText( $link );
- if( !$nt ) {
- $s .= $prefix . "[[" . $line;
- continue;
- }
- $ns = $nt->getNamespace();
- $iw = $nt->getInterWiki();
- if( $noforce ) {
- if( $iw && $wgInterwikiMagic && $nottalk && $wgLang->getLanguageName( $iw ) ) {
- array_push( $this->mLanguageLinks, $nt->getPrefixedText() );
- $s .= $prefix . $trail;
- continue;
- }
- if( $ns == $image ) {
- $s .= $prefix . $sk->makeImageLinkObj( $nt, $text ) . $trail;
- $wgLinkCache->addImageLinkObj( $nt );
- continue;
- }
- }
- if( ( $nt->getPrefixedText() == $wgTitle->getPrefixedText() ) &&
- ( strpos( $link, "#" ) == FALSE ) ) {
- $s .= $prefix . "<strong>" . $text . "</strong>" . $trail;
- continue;
- }
- if ( $ns == $category && $wgUseCategoryMagic ) {
- $t = explode ( ":" , $nt->getText() ) ;
- array_shift ( $t ) ;
- $t = implode ( ":" , $t ) ;
- $t = $wgLang->ucFirst ( $t ) ;
-# $t = $sk->makeKnownLink( $category.":".$t, $t, "", $trail , $prefix );
- $nnt = Title::newFromText ( $category.":".$t ) ;
- $t = $sk->makeLinkObj( $nnt, $t, "", $trail , $prefix );
- $this->mCategoryLinks[] = $t ;
- $s .= $prefix . $trail ;
- continue ;
- }
- if( $ns == $media ) {
- $s .= $prefix . $sk->makeMediaLinkObj( $nt, $text ) . $trail;
- $wgLinkCache->addImageLinkObj( $nt );
- continue;
- } elseif( $ns == $special ) {
- $s .= $prefix . $sk->makeKnownLinkObj( $nt, $text, "", $trail );
- continue;
- }
- $s .= $sk->makeLinkObj( $nt, $text, "", $trail , $prefix );
- }
- wfProfileOut( $fname );
- return $s;
- }
-
- # Some functions here used by doBlockLevels()
- #
- /* private */ function closeParagraph()
- {
- $result = "";
- if ( 0 != strcmp( "p", $this->mLastSection ) &&
- 0 != strcmp( "", $this->mLastSection ) ) {
- $result = "</" . $this->mLastSection . ">";
- }
- $this->mLastSection = "";
- return $result."\n";
- }
- # getCommon() returns the length of the longest common substring
- # of both arguments, starting at the beginning of both.
- #
- /* private */ function getCommon( $st1, $st2 )
- {
- $fl = strlen( $st1 );
- $shorter = strlen( $st2 );
- if ( $fl < $shorter ) { $shorter = $fl; }
-
- for ( $i = 0; $i < $shorter; ++$i ) {
- if ( $st1{$i} != $st2{$i} ) { break; }
- }
- return $i;
- }
- # These next three functions open, continue, and close the list
- # element appropriate to the prefix character passed into them.
- #
- /* private */ function openList( $char )
- {
- $result = $this->closeParagraph();
-
- if ( "*" == $char ) { $result .= "<ul><li>"; }
- else if ( "#" == $char ) { $result .= "<ol><li>"; }
- else if ( ":" == $char ) { $result .= "<dl><dd>"; }
- else if ( ";" == $char ) {
- $result .= "<dl><dt>";
- $this->mDTopen = true;
- }
- else { $result = "<!-- ERR 1 -->"; }
-
- return $result;
- }
-
- /* private */ function nextItem( $char )
- {
- if ( "*" == $char || "#" == $char ) { return "</li><li>"; }
- else if ( ":" == $char || ";" == $char ) {
- $close = "</dd>";
- if ( $this->mDTopen ) { $close = "</dt>"; }
- if ( ";" == $char ) {
- $this->mDTopen = true;
- return $close . "<dt>";
- } else {
- $this->mDTopen = false;
- return $close . "<dd>";
- }
- }
- return "<!-- ERR 2 -->";
- }
-
- /* private */function closeList( $char )
- {
- if ( "*" == $char ) { $text = "</li></ul>"; }
- else if ( "#" == $char ) { $text = "</li></ol>"; }
- else if ( ":" == $char ) {
- if ( $this->mDTopen ) {
- $this->mDTopen = false;
- $text = "</dt></dl>";
- } else {
- $text = "</dd></dl>";
- }
- }
- else { return "<!-- ERR 3 -->"; }
- return $text."\n";
- }
-
- /* private */ function doBlockLevels( $text, $linestart )
- {
- $fname = "OutputPage::doBlockLevels";
- wfProfileIn( $fname );
- # Parsing through the text line by line. The main thing
- # happening here is handling of block-level elements p, pre,
- # and making lists from lines starting with * # : etc.
- #
- $a = explode( "\n", $text );
- $text = $lastPref = "";
- $this->mDTopen = $inBlockElem = false;
-
- if ( ! $linestart ) { $text .= array_shift( $a ); }
- foreach ( $a as $t ) {
- if ( "" != $text ) { $text .= "\n"; }
-
- $oLine = $t;
- $opl = strlen( $lastPref );
- $npl = strspn( $t, "*#:;" );
- $pref = substr( $t, 0, $npl );
- $pref2 = str_replace( ";", ":", $pref );
- $t = substr( $t, $npl );
-
- if ( 0 != $npl && 0 == strcmp( $lastPref, $pref2 ) ) {
- $text .= $this->nextItem( substr( $pref, -1 ) );
-
- if ( ";" == substr( $pref, -1 ) ) {
- $cpos = strpos( $t, ":" );
- if ( ! ( false === $cpos ) ) {
- $term = substr( $t, 0, $cpos );
- $text .= $term . $this->nextItem( ":" );
- $t = substr( $t, $cpos + 1 );
- }
- }
- } else if (0 != $npl || 0 != $opl) {
- $cpl = $this->getCommon( $pref, $lastPref );
-
- while ( $cpl < $opl ) {
- $text .= $this->closeList( $lastPref{$opl-1} );
- --$opl;
- }
- if ( $npl <= $cpl && $cpl > 0 ) {
- $text .= $this->nextItem( $pref{$cpl-1} );
- }
- while ( $npl > $cpl ) {
- $char = substr( $pref, $cpl, 1 );
- $text .= $this->openList( $char );
-
- if ( ";" == $char ) {
- $cpos = strpos( $t, ":" );
- if ( ! ( false === $cpos ) ) {
- $term = substr( $t, 0, $cpos );
- $text .= $term . $this->nextItem( ":" );
- $t = substr( $t, $cpos + 1 );
- }
- }
- ++$cpl;
- }
- $lastPref = $pref2;
- }
- if ( 0 == $npl ) { # No prefix--go to paragraph mode
- if ( preg_match(
- "/(<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6)/i", $t ) ) {
- $text .= $this->closeParagraph();
- $inBlockElem = true;
- }
- if ( ! $inBlockElem ) {
- if ( " " == $t{0} ) {
- $newSection = "pre";
- # $t = wfEscapeHTML( $t );
- }
- else { $newSection = "p"; }
-
- if ( 0 == strcmp( "", trim( $oLine ) ) ) {
- $text .= $this->closeParagraph();
- $text .= "<" . $newSection . ">";
- } else if ( 0 != strcmp( $this->mLastSection,
- $newSection ) ) {
- $text .= $this->closeParagraph();
- if ( 0 != strcmp( "p", $newSection ) ) {
- $text .= "<" . $newSection . ">";
- }
- }
- $this->mLastSection = $newSection;
- }
- if ( $inBlockElem &&
- preg_match( "/(<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6)/i", $t ) ) {
- $inBlockElem = false;
- }
- }
- $text .= $t;
- }
- while ( $npl ) {
- $text .= $this->closeList( $pref2{$npl-1} );
- --$npl;
- }
- if ( "" != $this->mLastSection ) {
- if ( "p" != $this->mLastSection ) {
- $text .= "</" . $this->mLastSection . ">";
- }
- $this->mLastSection = "";
- }
- wfProfileOut( $fname );
- return $text;
- }
-
- /* private */ function replaceVariables( $text )
- {
- global $wgLang, $wgCurOut;
- $fname = "OutputPage::replaceVariables";
- wfProfileIn( $fname );
-
- $magic = array();
-
- # Basic variables
- # See Language.php for the definition of each magic word
- # As with sigs, this uses the server's local time -- ensure
- # this is appropriate for your audience!
-
- $magic[MAG_CURRENTMONTH] = date( "m" );
- $magic[MAG_CURRENTMONTHNAME] = $wgLang->getMonthName( date("n") );
- $magic[MAG_CURRENTMONTHNAMEGEN] = $wgLang->getMonthNameGen( date("n") );
- $magic[MAG_CURRENTDAY] = date("j");
- $magic[MAG_CURRENTDAYNAME] = $wgLang->getWeekdayName( date("w")+1 );
- $magic[MAG_CURRENTYEAR] = date( "Y" );
- $magic[MAG_CURRENTTIME] = $wgLang->time( wfTimestampNow(), false );
-
- $this->mContainsOldMagic += MagicWord::replaceMultiple($magic, $text, $text);
-
- $mw =& MagicWord::get( MAG_NUMBEROFARTICLES );
- if ( $mw->match( $text ) ) {
- $v = wfNumberOfArticles();
- $text = $mw->replace( $v, $text );
- if( $mw->getWasModified() ) { $this->mContainsOldMagic++; }
- }
-
- # "Variables" with an additional parameter e.g. {{MSG:wikipedia}}
- # The callbacks are at the bottom of this file
- $wgCurOut = $this;
- $mw =& MagicWord::get( MAG_MSG );
- $text = $mw->substituteCallback( $text, "wfReplaceMsgVar" );
- if( $mw->getWasModified() ) { $this->mContainsNewMagic++; }
-
- $mw =& MagicWord::get( MAG_MSGNW );
- $text = $mw->substituteCallback( $text, "wfReplaceMsgnwVar" );
- if( $mw->getWasModified() ) { $this->mContainsNewMagic++; }
-
- wfProfileOut( $fname );
- return $text;
- }
-
- # Cleans up HTML, removes dangerous tags and attributes
- /* private */ function removeHTMLtags( $text )