'string', 'validator-factory-callback' => function () { // load validator builders $factory = WikibaseRepo::getDefaultValidatorBuilders(); // initialize an array with string validators // returns an array of validators // that add basic string validation such as preventing empty strings $validators = $factory->buildStringValidators(); $validators[] = new MathValidator(); return $validators; }, 'parser-factory-callback' => function ( ParserOptions $options ) { $repo = WikibaseRepo::getDefaultInstance(); $normalizer = new WikibaseStringValueNormalizer( $repo->getStringNormalizer() ); return new StringParser( $normalizer ); }, 'formatter-factory-callback' => function ( $format, FormatterOptions $options ) { return new MathFormatter( $format ); }, 'rdf-builder-factory-callback' => function ( $mode, RdfVocabulary $vocab, RdfWriter $writer, EntityMentionListener $tracker, DedupeBag $dedupe ) { return new MathMLRdfBuilder(); }, ]; } /** * Add Datatype "Math" to the Wikibase Client * @param array[] &$dataTypeDefinitions */ public static function onWikibaseClientDataTypes( array &$dataTypeDefinitions ) { global $wgMathEnableWikibaseDataType; if ( !$wgMathEnableWikibaseDataType ) { return; } $dataTypeDefinitions['PT:math'] = [ 'value-type' => 'string', 'formatter-factory-callback' => function ( $format, FormatterOptions $options ) { return new MathFormatter( $format ); }, ]; } }