parserData = $parserData; $this->messageFormatter = $messageFormatter; $this->templateRenderer = $templateRenderer; } /** * @since 3.0 * * @param StripMarkerDecoder $stripMarkerDecoder */ public function setStripMarkerDecoder( StripMarkerDecoder $stripMarkerDecoder ) { $this->stripMarkerDecoder = $stripMarkerDecoder; } /** * @since 1.9 * * @param ParserParameterProcessor $parameters * * @return string|null */ public function parse( ParserParameterProcessor $parameters ) { $count = 0; $template = ''; $subject = $this->parserData->getSemanticData()->getSubject(); $parametersToArray = $parameters->toArray(); if ( isset( $parametersToArray['template'] ) ) { $template = $parametersToArray['template'][0]; unset( $parametersToArray['template'] ); } foreach ( $parametersToArray as $property => $values ) { $last = count( $values ) - 1; // -1 because the key starts with 0 foreach ( $values as $key => $value ) { if ( $this->stripMarkerDecoder !== null ) { $value = $this->stripMarkerDecoder->decode( $value ); } $dataValue = DataValueFactory::getInstance()->newDataValueByText( $property, $value, false, $subject ); if ( $this->parserData->canUse() ) { $this->parserData->addDataValue( $dataValue ); } $this->messageFormatter->addFromArray( $dataValue->getErrors() ); $this->addFieldsToTemplate( $template, $dataValue, $property, $value, $last == $key, $count ); } } $this->parserData->pushSemanticDataToParserOutput(); $html = $this->templateRenderer->render() . $this->messageFormatter ->addFromArray( $parameters->getErrors() ) ->getHtml(); return [ $html, 'noparse' => $template === '', 'isHTML' => false ]; } private function addFieldsToTemplate( $template, $dataValue, $property, $value, $isLastElement, &$count ) { if ( $template === '' || !$dataValue->isValid() ) { return ''; } $this->templateRenderer->addField( 'property', $property ); $this->templateRenderer->addField( 'value', $value ); $this->templateRenderer->addField( 'last-element', $isLastElement ); $this->templateRenderer->addField( '#', $count++ ); $this->templateRenderer->packFieldsForTemplate( $template ); } }