From: jenkins-bot Date: Thu, 22 Sep 2016 22:02:36 +0000 (+0000) Subject: Merge "Move wfEscapeWikiText() to Parser::escapeWikitext()" X-Git-Tag: 1.31.0-rc.0~5378 X-Git-Url: http://git.cyclocoop.org/%22%2C%20generer_url_ecrire%28?a=commitdiff_plain;h=eb2f439768d34254964e798d9523211ba8ea2f5f;hp=00d677347e397acf3d1d541add4c5f40e6902e1b;p=lhc%2Fweb%2Fwiklou.git Merge "Move wfEscapeWikiText() to Parser::escapeWikitext()" --- diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 6e8ce8f2c8..4536b8f766 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -1656,6 +1656,8 @@ function wfClientAcceptsGzip( $force = false ) { } /** + * @deprecated since 1.28, use Parser::escapeWikitext() directly + * * Escapes the given text so that it may be output using addWikiText() * without any linking, formatting, etc. making its way through. This * is achieved by substituting certain characters with HTML entities. @@ -1665,47 +1667,8 @@ function wfClientAcceptsGzip( $force = false ) { * @return string */ function wfEscapeWikiText( $text ) { - global $wgEnableMagicLinks; - static $repl = null, $repl2 = null; - if ( $repl === null ) { - $repl = [ - '"' => '"', '&' => '&', "'" => ''', '<' => '<', - '=' => '=', '>' => '>', '[' => '[', ']' => ']', - '{' => '{', '|' => '|', '}' => '}', ';' => ';', - "\n#" => "\n#", "\r#" => "\r#", - "\n*" => "\n*", "\r*" => "\r*", - "\n:" => "\n:", "\r:" => "\r:", - "\n " => "\n ", "\r " => "\r ", - "\n\n" => "\n ", "\r\n" => " \n", - "\n\r" => "\n ", "\r\r" => "\r ", - "\n\t" => "\n ", "\r\t" => "\r ", // "\n\t\n" is treated like "\n\n" - "\n----" => "\n----", "\r----" => "\r----", - '__' => '__', '://' => '://', - ]; - - $magicLinks = array_keys( array_filter( $wgEnableMagicLinks ) ); - // We have to catch everything "\s" matches in PCRE - foreach ( $magicLinks as $magic ) { - $repl["$magic "] = "$magic "; - $repl["$magic\t"] = "$magic "; - $repl["$magic\r"] = "$magic "; - $repl["$magic\n"] = "$magic "; - $repl["$magic\f"] = "$magic "; - } - - // And handle protocols that don't use "://" - global $wgUrlProtocols; - $repl2 = []; - foreach ( $wgUrlProtocols as $prot ) { - if ( substr( $prot, -1 ) === ':' ) { - $repl2[] = preg_quote( substr( $prot, 0, -1 ), '/' ); - } - } - $repl2 = $repl2 ? '/\b(' . implode( '|', $repl2 ) . '):/i' : '/^(?!)/'; - } - $text = substr( strtr( "\n$text", $repl ), 1 ); - $text = preg_replace( $repl2, '$1:', $text ); - return $text; + global $wgParser; + return $wgParser->escapeWikitext( $text ); } /** diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php index 01cce028a2..b3dc17c215 100644 --- a/includes/parser/CoreParserFunctions.php +++ b/includes/parser/CoreParserFunctions.php @@ -594,98 +594,98 @@ class CoreParserFunctions { if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getText() ); + return $parser->escapeWikitext( $t->getText() ); } - public static function pagenamee( $parser, $title = null ) { + public static function pagenamee( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getPartialURL() ); + return $parser->escapeWikitext( $t->getPartialURL() ); } - public static function fullpagename( $parser, $title = null ) { + public static function fullpagename( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) || !$t->canTalk() ) { return ''; } - return wfEscapeWikiText( $t->getPrefixedText() ); + return $parser->escapeWikitext( $t->getPrefixedText() ); } - public static function fullpagenamee( $parser, $title = null ) { + public static function fullpagenamee( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) || !$t->canTalk() ) { return ''; } - return wfEscapeWikiText( $t->getPrefixedURL() ); + return $parser->escapeWikitext( $t->getPrefixedURL() ); } - public static function subpagename( $parser, $title = null ) { + public static function subpagename( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getSubpageText() ); + return $parser->escapeWikitext( $t->getSubpageText() ); } - public static function subpagenamee( $parser, $title = null ) { + public static function subpagenamee( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getSubpageUrlForm() ); + return $parser->escapeWikitext( $t->getSubpageUrlForm() ); } - public static function rootpagename( $parser, $title = null ) { + public static function rootpagename( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getRootText() ); + return $parser->escapeWikitext( $t->getRootText() ); } - public static function rootpagenamee( $parser, $title = null ) { + public static function rootpagenamee( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getRootText() ) ) ); + return $parser->escapeWikitext( wfUrlencode( str_replace( ' ', '_', $t->getRootText() ) ) ); } - public static function basepagename( $parser, $title = null ) { + public static function basepagename( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getBaseText() ); + return $parser->escapeWikitext( $t->getBaseText() ); } - public static function basepagenamee( $parser, $title = null ) { + public static function basepagenamee( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getBaseText() ) ) ); + return $parser->escapeWikitext( wfUrlencode( str_replace( ' ', '_', $t->getBaseText() ) ) ); } - public static function talkpagename( $parser, $title = null ) { + public static function talkpagename( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) || !$t->canTalk() ) { return ''; } - return wfEscapeWikiText( $t->getTalkPage()->getPrefixedText() ); + return $parser->escapeWikitext( $t->getTalkPage()->getPrefixedText() ); } - public static function talkpagenamee( $parser, $title = null ) { + public static function talkpagenamee( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) || !$t->canTalk() ) { return ''; } - return wfEscapeWikiText( $t->getTalkPage()->getPrefixedURL() ); + return $parser->escapeWikitext( $t->getTalkPage()->getPrefixedURL() ); } - public static function subjectpagename( $parser, $title = null ) { + public static function subjectpagename( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedText() ); + return $parser->escapeWikitext( $t->getSubjectPage()->getPrefixedText() ); } - public static function subjectpagenamee( $parser, $title = null ) { + public static function subjectpagenamee( Parser $parser, $title = null ) { $t = Title::newFromText( $title ); if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedURL() ); + return $parser->escapeWikitext( $t->getSubjectPage()->getPrefixedURL() ); } /** diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 7c18798f2e..0fb021cc03 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -6028,4 +6028,62 @@ class Parser { OutputPage::setupOOUI(); $this->mOutput->setEnableOOUI( true ); } + + /** + * Escapes the given text so that it may be output using addWikiText() + * without any linking, formatting, etc. making its way through. This + * is achieved by substituting certain characters with HTML entities. + * As required by the callers, "" is not used. + * + * @since 1.28 + * + * @param string $text Text to be escaped + * @return string + */ + public function escapeWikitext( $text ) { + static $repl = null, $repl2 = null; + if ( $repl === null ) { + $repl = [ + '"' => '"', '&' => '&', "'" => ''', '<' => '<', + '=' => '=', '>' => '>', '[' => '[', ']' => ']', + '{' => '{', '|' => '|', '}' => '}', ';' => ';', + "\n#" => "\n#", "\r#" => "\r#", + "\n*" => "\n*", "\r*" => "\r*", + "\n:" => "\n:", "\r:" => "\r:", + "\n " => "\n ", "\r " => "\r ", + "\n\n" => "\n ", "\r\n" => " \n", + "\n\r" => "\n ", "\r\r" => "\r ", + "\n\t" => "\n ", "\r\t" => "\r ", // "\n\t\n" is treated like "\n\n" + "\n----" => "\n----", "\r----" => "\r----", + '__' => '__', '://' => '://', + ]; + + $magicLinks = array_keys( array_filter( [ + 'ISBN' => $this->mOptions->getMagicISBNLinks(), + 'PMID' => $this->mOptions->getMagicPMIDLinks(), + 'RFC' => $this->mOptions->getMagicRFCLinks(), + ] ) ); + // We have to catch everything "\s" matches in PCRE + foreach ( $magicLinks as $magic ) { + $repl["$magic "] = "$magic "; + $repl["$magic\t"] = "$magic "; + $repl["$magic\r"] = "$magic "; + $repl["$magic\n"] = "$magic "; + $repl["$magic\f"] = "$magic "; + } + + // And handle protocols that don't use "://" + global $wgUrlProtocols; + $repl2 = []; + foreach ( $wgUrlProtocols as $prot ) { + if ( substr( $prot, -1 ) === ':' ) { + $repl2[] = preg_quote( substr( $prot, 0, -1 ), '/' ); + } + } + $repl2 = $repl2 ? '/\b(' . implode( '|', $repl2 ) . '):/i' : '/^(?!)/'; + } + $text = substr( strtr( "\n$text", $repl ), 1 ); + $text = preg_replace( $repl2, '$1:', $text ); + return $text; + } }