1<?php 2 3namespace MediaWiki\Extensions\ParserFunctions; 4 5use Parser; 6 7class Hooks { 8 9 /** 10 * Enables string functions during parser tests. 11 * 12 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserTestGlobals 13 * 14 * @param array &$globals 15 */ 16 public static function onParserTestGlobals( array &$globals ) { 17 $globals['wgPFEnableStringFunctions'] = true; 18 } 19 20 /** 21 * Registers our parser functions with a fresh parser. 22 * 23 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit 24 * 25 * @param Parser $parser 26 */ 27 public static function onParserFirstCallInit( Parser $parser ) { 28 global $wgPFEnableStringFunctions; 29 30 // These functions accept DOM-style arguments 31 $class = ParserFunctions::class; 32 $parser->setFunctionHook( 'if', "$class::if", Parser::SFH_OBJECT_ARGS ); 33 $parser->setFunctionHook( 'ifeq', "$class::ifeq", Parser::SFH_OBJECT_ARGS ); 34 $parser->setFunctionHook( 'switch', "$class::switch", Parser::SFH_OBJECT_ARGS ); 35 $parser->setFunctionHook( 'ifexist', "$class::ifexist", Parser::SFH_OBJECT_ARGS ); 36 $parser->setFunctionHook( 'ifexpr', "$class::ifexpr", Parser::SFH_OBJECT_ARGS ); 37 $parser->setFunctionHook( 'iferror', "$class::iferror", Parser::SFH_OBJECT_ARGS ); 38 $parser->setFunctionHook( 'time', "$class::time", Parser::SFH_OBJECT_ARGS ); 39 $parser->setFunctionHook( 'timel', "$class::localTime", Parser::SFH_OBJECT_ARGS ); 40 41 $parser->setFunctionHook( 'expr', "$class::expr" ); 42 $parser->setFunctionHook( 'rel2abs', "$class::rel2abs" ); 43 $parser->setFunctionHook( 'titleparts', "$class::titleparts" ); 44 45 // String Functions: enable if configured 46 if ( $wgPFEnableStringFunctions ) { 47 $parser->setFunctionHook( 'len', "$class::runLen" ); 48 $parser->setFunctionHook( 'pos', "$class::runPos" ); 49 $parser->setFunctionHook( 'rpos', "$class::runRPos" ); 50 $parser->setFunctionHook( 'sub', "$class::runSub" ); 51 $parser->setFunctionHook( 'count', "$class::runCount" ); 52 $parser->setFunctionHook( 'replace', "$class::runReplace" ); 53 $parser->setFunctionHook( 'explode', "$class::runExplode" ); 54 $parser->setFunctionHook( 'urldecode', "$class::runUrlDecode" ); 55 } 56 } 57 58 /** 59 * Registers ParserFunctions' lua function with Scribunto 60 * 61 * @see https://www.mediawiki.org/wiki/Extension:Scribunto/ScribuntoExternalLibraries 62 * 63 * @param string $engine 64 * @param string[] &$extraLibraries 65 */ 66 public static function onScribuntoExternalLibraries( $engine, array &$extraLibraries ) { 67 if ( $engine === 'lua' ) { 68 $extraLibraries['mw.ext.ParserFunctions'] = LuaLibrary::class; 69 } 70 } 71} 72