class SvgHandler extends ImageHandler {
const SVG_METADATA_VERSION = 2;
- /**
- * A list of metadata tags that can be converted
- * to the commonly used exif tags. This allows messages
- * to be reused, and consistent tag names for {{#formatmetadata:..}}
+ /** @var array A list of metadata tags that can be converted
+ * to the commonly used exif tags. This allows messages
+ * to be reused, and consistent tag names for {{#formatmetadata:..}}
*/
private static $metaConversion = array(
'originalwidth' => 'ImageWidth',
}
/**
- * @param $file File
+ * @param File $file
* @return bool
*/
function isAnimatedImage( $file ) {
- # TODO: detect animated SVGs
+ # @todo Detect animated SVGs
$metadata = $file->getMetadata();
if ( $metadata ) {
$metadata = $this->unpackMetadata( $metadata );
return false;
}
+ /**
+ * Which languages (systemLanguage attribute) is supported.
+ *
+ * @note This list is not guaranteed to be exhaustive.
+ * To avoid OOM errors, we only look at first bit of a file.
+ * Thus all languages on this list are present in the file,
+ * but its possible for the file to have a language not on
+ * this list.
+ *
+ * @param File $file
+ * @return Array of language codes, or empty if no language switching supported.
+ */
+ public function getAvailableLanguages( File $file ) {
+ $metadata = $file->getMetadata();
+ $langList = array();
+ if ( $metadata ) {
+ $metadata = $this->unpackMetadata( $metadata );
+ if ( isset( $metadata['translations'] ) ) {
+ foreach ( $metadata['translations'] as $lang => $langType ) {
+ if ( $langType === SvgReader::LANG_FULL_MATCH ) {
+ $langList[] = $lang;
+ }
+ }
+ }
+ }
+ return $langList;
+ }
+
+ /**
+ * What language to render file in if none selected.
+ *
+ * @return String language code.
+ */
+ public function getDefaultRenderLanguage( File $file ) {
+ return 'en';
+ }
+
/**
* We do not support making animated svg thumbnails
*/
}
/**
- * @param $image File
- * @param $params
+ * @param File $image
+ * @param array $params
* @return bool
*/
function normaliseParams( $image, &$params ) {
}
/**
- * @param $image File
- * @param $dstPath
- * @param $dstUrl
- * @param $params
+ * @param File $image
+ * @param string $dstPath
+ * @param string $dstUrl
+ * @param array $params
* @param int $flags
* @return bool|MediaTransformError|ThumbnailImage|TransformParameterError
*/
$clientHeight = $params['height'];
$physicalWidth = $params['physicalWidth'];
$physicalHeight = $params['physicalHeight'];
- $lang = isset( $params['lang'] ) ? $params['lang'] : 'en';
+ $lang = isset( $params['lang'] ) ? $params['lang'] : $this->getDefaultRenderLanguage( $image );
if ( $flags & self::TRANSFORM_LATER ) {
return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
* @param string $dstPath
* @param string $width
* @param string $height
- * @param string $lang Language code of the language to render the SVG in
+ * @param bool|string $lang Language code of the language to render the SVG in
* @throws MWException
* @return bool|MediaTransformError
*/
}
/**
- * @param $file File
- * @param $path
- * @param bool $metadata
+ * @param File $file
+ * @param string $path Unused
+ * @param bool|array $metadata
* @return array
*/
function getImageSize( $file, $path, $metadata = false ) {
* a "nominal" resolution, and not a fixed one,
* as well as so animation can be denoted.
*
- * @param $file File
+ * @param File $file
* @return string
*/
function getLongDesc( $file ) {
return $msg->parse();
}
+ /**
+ * @param File $file
+ * @param string $filename
+ * @return string Serialised metadata
+ */
function getMetadata( $file, $filename ) {
$metadata = array( 'version' => self::SVG_METADATA_VERSION );
try {
return self::METADATA_GOOD;
}
- function visibleMetadataFields() {
+ protected function visibleMetadataFields() {
$fields = array( 'objectname', 'imagedescription' );
return $fields;
}
/**
- * @param $file File
+ * @param File $file
* @return array|bool
*/
function formatMetadata( $file ) {
return false;
}
- /* TODO: add a formatter
+ /* @todo Add a formatter
$format = new FormatSVG( $metadata );
$formatted = $format->getFormattedData();
*/
/**
* @param string $name Parameter name
- * @param $string $value Parameter value
+ * @param mixed $value Parameter value
* @return bool Validity
*/
function validateParam( $name, $value ) {
return ( $value > 0 );
} elseif ( $name == 'lang' ) {
// Validate $code
- if ( !Language::isValidBuiltinCode( $value ) ) {
+ if ( $value === '' || !Language::isValidBuiltinCode( $value ) ) {
wfDebug( "Invalid user language code\n" );
return false;
}
/**
- * @param $params
+ * @param array $params
* @return array
*/
function getScriptParams( $params ) {
- return array(
- 'width' => $params['width'],
- 'lang' => $params['lang'],
- );
+ $scriptParams = array( 'width' => $params['width'] );
+ if ( isset( $params['lang'] ) ) {
+ $scriptParams['lang'] = $params['lang'];
+ }
+
+ return $scriptParams;
}
public function getCommonMetaArray( File $file ) {