X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FCoreParserFunctions.php;h=670676b6e99ff7c7f22fe26f7e9b4f73364504af;hb=a4c45fb2546ba5ea1a653f28d0c5bdfc9a790e80;hp=1b08e82bcb0e2522e2428e59a6d1fbd66a08aa08;hpb=a2fac63c7857b6019884195bd31cd0603417f4d9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/CoreParserFunctions.php b/includes/CoreParserFunctions.php index 1b08e82bcb..670676b6e9 100644 --- a/includes/CoreParserFunctions.php +++ b/includes/CoreParserFunctions.php @@ -2,8 +2,8 @@ /** * Various core parser functions, registered in Parser::firstCallInit() + * @addtogroup Parser */ - class CoreParserFunctions { static function intFunction( $parser, $part1 = '' /*, ... */ ) { if ( strval( $part1 ) !== '' ) { @@ -92,20 +92,26 @@ class CoreParserFunctions { return $parser->getFunctionLang()->convertGrammar( $word, $case ); } - static function plural( $parser, $text = '', $arg0 = null, $arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null ) { + static function plural( $parser, $text = '') { + $forms = array_slice( func_get_args(), 2); $text = $parser->getFunctionLang()->parseFormattedNumber( $text ); - return $parser->getFunctionLang()->convertPlural( $text, $arg0, $arg1, $arg2, $arg3, $arg4 ); + return $parser->getFunctionLang()->convertPlural( $text, $forms ); } - static function displaytitle( $parser, $param = '' ) { - $parserOptions = new ParserOptions; - $local_parser = clone $parser; - $t2 = $local_parser->parse ( $param, $parser->mTitle, $parserOptions, false ); - $parser->mOutput->mHTMLtitle = $t2->GetText(); - - # Add subtitle - $t = $parser->mTitle->getPrefixedText(); - $parser->mOutput->mSubtitle .= wfMsg('displaytitle', $t); + /** + * Override the title of the page when viewed, + * provided we've been given a title which + * will normalise to the canonical title + * + * @param Parser $parser Parent parser + * @param string $text Desired title text + * @return string + */ + static function displaytitle( $parser, $text = '' ) { + $text = trim( Sanitizer::decodeCharReferences( $text ) ); + $title = Title::newFromText( $text ); + if( $title instanceof Title && $title->getFragment() == '' && $title->equals( $parser->mTitle ) ) + $parser->mOutput->setDisplayTitle( $text ); return ''; } @@ -135,6 +141,7 @@ class CoreParserFunctions { static function numberofarticles( $parser, $raw = null ) { return self::statisticsFunction( 'articles', $raw ); } static function numberoffiles( $parser, $raw = null ) { return self::statisticsFunction( 'images', $raw ); } static function numberofadmins( $parser, $raw = null ) { return self::statisticsFunction( 'admins', $raw ); } + static function numberofedits( $parser, $raw = null ) { return self::statisticsFunction( 'edits', $raw ); } static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) { $count = SiteStats::pagesInNs( intval( $namespace ) ); @@ -155,7 +162,7 @@ class CoreParserFunctions { static function pad( $string = '', $length = 0, $char = 0, $direction = STR_PAD_RIGHT ) { $length = min( max( $length, 0 ), 500 ); $char = substr( $char, 0, 1 ); - return ( $string && (int)$length > 0 && strlen( trim( (string)$char ) ) > 0 ) + return ( $string !== '' && (int)$length > 0 && strlen( trim( (string)$char ) ) > 0 ) ? str_pad( $string, $length, (string)$char, $direction ) : $string; } @@ -169,7 +176,11 @@ class CoreParserFunctions { } static function anchorencode( $parser, $text ) { - return strtr( urlencode( $text ) , array( '%' => '.' , '+' => '_' ) ); + $a = urlencode( $text ); + $a = strtr( $a, array( '%' => '.', '+' => '_' ) ); + # leave colons alone, however + $a = str_replace( '.3A', ':', $a ); + return $a; } static function special( $parser, $text ) { @@ -180,12 +191,74 @@ class CoreParserFunctions { return wfMsgForContent( 'nosuchspecialpage' ); } } - + public static function defaultsort( $parser, $text ) { $text = trim( $text ); if( strlen( $text ) > 0 ) $parser->setDefaultSort( $text ); return ''; } + + public static function filepath( $parser, $name='', $option='' ) { + $file = wfFindFile( $name ); + if( $file ) { + $url = $file->getFullUrl(); + if( $option == 'nowiki' ) { + return "$url"; + } + return $url; + } else { + return ''; + } + } + + /** + * Parser function to extension tag adaptor + */ + public static function tagObj( $parser, $frame, $args ) { + $xpath = false; + if ( !count( $args ) ) { + return ''; + } + $tagName = strtolower( trim( $frame->expand( array_shift( $args ) ) ) ); + + if ( count( $args ) ) { + $inner = $frame->expand( array_shift( $args ) ); + } else { + $inner = null; + } + + $stripList = $parser->getStripList(); + if ( !in_array( $tagName, $stripList ) ) { + return '' . + wfMsg( 'unknown_extension_tag', $tagName ) . + ''; + } + + $attributes = array(); + foreach ( $args as $arg ) { + if ( !$xpath ) { + $xpath = new DOMXPath( $arg->ownerDocument ); + } + $names = $xpath->query( 'name', $arg ); + if ( !$names->item( 0 )->hasAttributes() ) { + $name = $frame->expand( $names->item( 0 ), PPFrame::STRIP_COMMENTS ); + $values = $xpath->query( 'value', $arg ); + $value = trim( $frame->expand( $values->item( 0 ) ) ); + if ( preg_match( '/^(?:["\'](.+)["\']|""|\'\')$/s', $value, $m ) ) { + $value = isset( $m[1] ) ? $m[1] : ''; + } + $attributes[$name] = $value; + } + } + + $params = array( + 'name' => $tagName, + 'inner' => $inner, + 'attributes' => $attributes, + 'close' => "", + ); + return $parser->extensionSubstitution( $params, $frame ); + } } -?> +