FCKeditor/function parse
Appearance
From Meta, a Wikimedia project coordination wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
function parse( $text, &$title, $options, $linestart = true, $clearState = true, $revid = null ) { /** * First pass--just handle <nowiki> sections, pass the rest off * to internalParse() which does all the real work. */ global $wgUseTidy, $wgAlwaysUseTidy, $wgContLang; $fname = 'Parser::parse'; wfProfileIn( $fname ); if ( $clearState ) { $this->clearState(); } $this->mOptions = $options; $this->mTitle =& $title; $this->mRevisionId = $revid; $this->mOutputType = OT_HTML; $this->mStripState = NULL; //$text = $this->strip( $text, $this->mStripState ); // VOODOO MAGIC FIX! Sometimes the above segfaults in PHP5. $x =& $this->mStripState; # patch fck editor global $wgUseEditor, $wgEditorToken; if (eregi($wgEditorToken, $text, $eregi_result)) { $wgUseEditor = true; } wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$x ) ); $text = $this->strip( $text, $x ); wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$x ) ); if ($wgUseEditor == true) $text = preg_replace("|$wgEditorToken|i", "", $text); # Hook to suspend the parser in this state if ( !wfRunHooks( 'ParserBeforeInternalParse', array( &$this, &$text, &$x ) ) ) { wfProfileOut( $fname ); return $text ; } $text = $this->internalParse( $text ); $text = $this->unstrip( $text, $this->mStripState ); # Clean up special characters, only run once, next-to-last before doBlockLevels $fixtags = array( # french spaces, last one Guillemet-left # only if there is something before the space '/(.) (?=\\?|:|;|!|\302円\273円)/' => '\1円 \2円', # french spaces, Guillemet-right '/(\302円\253円) /' => '\1円 ', '/<center *>(.*)<\\/center *>/i' => '<div class="center">\1円</div>', ); $text = preg_replace( array_keys($fixtags), array_values($fixtags), $text ); # only once and last if (!$wgUseEditor) $text = $this->doBlockLevels( $text, $linestart ); # patch editor $this->replaceLinkHolders( $text ); # the position of the parserConvert() call should not be changed. it # assumes that the links are all replaced and the only thing left # is the <nowiki> mark. # Side-effects: this calls $this->mOutput->setTitleText() $text = $wgContLang->parserConvert( $text, $this ); $text = $this->unstripNoWiki( $text, $this->mStripState ); wfRunHooks( 'ParserBeforeTidy', array( &$this, &$text ) ); $text = Sanitizer::normalizeCharReferences( $text ); if (($wgUseTidy and $this->mOptions->mTidy) or $wgAlwaysUseTidy) { $text = Parser::tidy($text); } else { # attempt to sanitize at least some nesting problems # (bug #2702 and quite a few others) $tidyregs = array( # ''Something [http://www.cool.com cool''] --> # <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a> '/(<([bi])>)(<([bi])>)?([^<]*)(<\/?a[^<]*>)([^<]*)(<\/\4円>)?(<\/\2円>)/' => '\1円\3円\5円\8円\9円\6円\1円\3円\7円\8円\9円', # fix up an anchor inside another anchor, only # at least for a single single nested link (bug 3695) '/(<a[^>]+>)([^<]*)(<a[^>]+>[^<]*)<\/a>(.*)<\/a>/' => '\1円\2円</a>\3円</a>\1円\4円</a>', # fix div inside inline elements- doBlockLevels won't wrap a line which # contains a div, so fix it up here; replace # div with escaped text '/(<([aib]) [^>]+>)([^<]*)(<div([^>]*)>)(.*)(<\/div>)([^<]*)(<\/\2円>)/' => '\1円\3円<div\5円>\6円</div>\8円\9円', # remove empty italic or bold tag pairs, some # introduced by rules above '/<([bi])><\/\1円>/' => '' ); $text = preg_replace( array_keys( $tidyregs ), array_values( $tidyregs ), $text ); } wfRunHooks( 'ParserAfterTidy', array( &$this, &$text ) ); $this->mOutput->setText( $text ); wfProfileOut( $fname ); return $this->mOutput; }
</nowiki>