and tags. * * @param Parser $parser */ public static function register( Parser $parser ) { $parser->setHook( 'ref', [ __CLASS__, 'ref' ] ); $parser->setHook( 'references', [ __CLASS__, 'references' ] ); } /** * Parser hook for the tag. * * @param ?string $text Raw, untrimmed wikitext content of the tag, if any * @param string[] $argv * @param Parser $parser * @param PPFrame $frame * * @return string HTML */ public static function ref( ?string $text, array $argv, Parser $parser, PPFrame $frame ) : string { $cite = self::citeForParser( $parser ); $result = $cite->ref( $parser, $text, $argv ); if ( $result === false ) { return htmlspecialchars( "$text" ); } $parserOutput = $parser->getOutput(); $parserOutput->addModules( 'ext.cite.ux-enhancements' ); $parserOutput->addModuleStyles( 'ext.cite.styles' ); $frame->setVolatile(); return $result; } /** * Parser hook for the tag. * * @param ?string $text Raw, untrimmed wikitext content of the tag, if any * @param string[] $argv * @param Parser $parser * @param PPFrame $frame * * @return string HTML */ public static function references( ?string $text, array $argv, Parser $parser, PPFrame $frame ) : string { $cite = self::citeForParser( $parser ); $result = $cite->references( $parser, $text, $argv ); if ( $result === false ) { return htmlspecialchars( $text === null ? "" : "$text" ); } $frame->setVolatile(); return $result; } /** * Get or create Cite state for this parser. * * @param Parser $parser * * @return Cite */ private static function citeForParser( Parser $parser ) : Cite { if ( !isset( $parser->extCite ) ) { $parser->extCite = new Cite( $parser ); } return $parser->extCite; } }