/**
  * @see SnakFormatter::formatSnak
  *
  * @param Snak $snak
  *
  * @return string Either plain text, wikitext or HTML, depending on the SnakFormatter provided.
  */
 public function formatSnak(Snak $snak)
 {
     if ($snak instanceof PropertyValueSnak) {
         $value = $snak->getDataValue();
         if ($value instanceof EntityIdValue) {
             $entityId = $value->getEntityId();
             $this->addLabelUsage($value->getEntityId());
             $this->usageAccumulator->addTitleUsage($entityId);
         }
     }
     return $this->snakFormatter->formatSnak($snak);
 }
 /**
  * Format an auto summary argument
  *
  * @since 0.4
  *
  * @param mixed $arg
  *
  * @return string
  */
 protected function formatArg($arg)
 {
     try {
         if ($arg instanceof Snak) {
             return $this->snakFormatter->formatSnak($arg);
         } elseif ($arg instanceof EntityId) {
             return $this->idFormatter->formatEntityId($arg);
         } elseif ($arg instanceof DataValue) {
             return $this->valueFormatter->format($arg);
         } elseif (method_exists($arg, '__toString')) {
             return strval($arg);
         } elseif (is_object($arg)) {
             return '<' . get_class($arg) . '>';
         } elseif (is_array($arg)) {
             if (!empty($arg) && !isset($arg[0])) {
                 // turn assoc array into a list
                 $arg = $this->formatKeyValuePairs($arg);
             }
             $strings = $this->formatArgList($arg);
             return $this->language->commaList($strings);
         } else {
             return strval($arg);
         }
     } catch (Exception $ex) {
         wfWarn(__METHOD__ . ': failed to render value: ' . $ex->getMessage());
     }
     return '?';
 }
 /**
  * @param Snak[] $snaks
  *
  * @return string wikitext
  */
 private function formatSnaks(array $snaks)
 {
     $formattedValues = array();
     foreach ($snaks as $snak) {
         $formattedValues[] = $this->snakFormatter->formatSnak($snak);
     }
     return $this->language->commaList($formattedValues);
 }
 /**
  * Get formatted header for a snak, including the snak's property label and value.
  *
  * @since 0.4
  *
  * @param Snak $snak
  *
  * @return string HTML
  */
 public function getPropertyAndValueHeader(Snak $snak)
 {
     $before = $this->getPropertyHeader($snak);
     try {
         $after = $this->snakBreadCrumbFormatter->formatSnak($snak);
         $result = $this->getColonSeparatedHtml($before, $after);
     } catch (Exception $ex) {
         // just ignore it
         $result = $before;
     }
     return $result;
 }
 /**
  * @fixme handle errors more consistently as done in JS UI, and perhaps add
  * localised exception messages.
  *
  * @param Snak $snak
  * @return string
  */
 private function getFormattedSnakValue($snak)
 {
     try {
         $formattedSnak = $this->snakFormatter->formatSnak($snak);
     } catch (FormattingException $ex) {
         return $this->getInvalidSnakMessage();
     } catch (PropertyDataTypeLookupException $ex) {
         return $this->getPropertyNotFoundMessage();
     } catch (InvalidArgumentException $ex) {
         return $this->getInvalidSnakMessage();
     }
     return $formattedSnak;
 }
 /**
  * @see SnakFormatter::formatSnak
  *
  * @param Snak $snak
  *
  * @throws InvalidArgumentException
  * @throws FormattingException
  * @return string Either plain text, wikitext or HTML, depending on the SnakFormatter provided.
  */
 public function formatSnak(Snak $snak)
 {
     try {
         return $this->snakFormatter->formatSnak($snak);
     } catch (MismatchingDataValueTypeException $ex) {
         if ($ex->getDataValueType() === UnDeserializableValue::getType()) {
             $warningText = $this->formatWarning('wikibase-undeserializable-value');
         } else {
             $warningText = $this->formatWarning('wikibase-snakformatter-valuetype-mismatch', $ex->getDataValueType(), $ex->getExpectedValueType());
         }
     } catch (PropertyDataTypeLookupException $ex) {
         $warningText = $this->formatWarning('wikibase-snakformatter-property-not-found', $snak->getPropertyId()->getSerialization());
     } catch (FormattingException $ex) {
         $warningText = $this->formatWarning('wikibase-snakformatter-formatting-exception', $ex->getMessage());
     }
     if ($snak instanceof PropertyValueSnak && $this->fallbackFormatter) {
         $value = $snak->getDataValue();
         $valueText = $this->fallbackFormatter->format($value);
         if ($valueText !== '') {
             return $valueText . ' ' . $warningText;
         }
     }
     return $warningText;
 }
 /**
  * Render a snak from its serialization as provided from Lua.
  *
  * @since 0.5
  *
  * @param array $snakSerialization As obtained from ItemSerializer
  *
  * @return string wikitext
  */
 public function renderSnak(array $snakSerialization)
 {
     $snak = $this->snakDeserializer->deserialize($snakSerialization);
     return $this->snakFormatter->formatSnak($snak);
 }
 /**
  * @see SnakFormatter::formatSnak
  *
  * @param Snak $snak
  *
  * @return string Typically wikitext or HTML, depending on the $escapeCallback provided.
  */
 public function formatSnak(Snak $snak)
 {
     $text = $this->formatter->formatSnak($snak);
     $escaped = call_user_func($this->escapeCallback, $text);
     return $escaped;
 }