You are here

Font.php in File metadata manager 8.2

Same filename and directory in other branches
  1. 8 file_mdm_font/src/Plugin/FileMetadata/Font.php

File

file_mdm_font/src/Plugin/FileMetadata/Font.php
View source
<?php

namespace Drupal\file_mdm_font\Plugin\FileMetadata;

use Drupal\file_mdm\FileMetadataException;
use Drupal\file_mdm\Plugin\FileMetadata\FileMetadataPluginBase;
use FontLib\Font as LibFont;
use FontLib\Table\Type\name;

/**
 * FileMetadata plugin for TTF/OTF/WOFF font information.
 *
 * Uses the 'PHP Font Lib' library (PhenX/php-font-lib).
 *
 * @FileMetadata(
 *   id = "font",
 *   title = @Translation("Font"),
 *   help = @Translation("File metadata plugin for TTF/OTF/WOFF font information, using the PHP Font Lib."),
 * )
 */
class Font extends FileMetadataPluginBase {

  /**
   * {@inheritdoc}
   */
  public function getSupportedKeys($options = NULL) {
    return array_merge([
      'FontType',
      'FontWeight',
    ], array_values(name::$nameIdCodes));
  }

  /**
   * {@inheritdoc}
   */
  protected function doGetMetadataFromFile() {
    $font = LibFont::load($this
      ->getLocalTempPath());

    // @todo ::parse raises 'Undefined offset' notices in phenx/php-font-lib
    // 0.5, suppress errors while upstream is fixed.
    @$font
      ->parse();
    $keys = $this
      ->getSupportedKeys();
    $metadata = [];
    foreach ($keys as $key) {
      $l_key = strtolower($key);
      switch ($l_key) {
        case 'fonttype':
          $metadata[$l_key] = $font
            ->getFontType();
          break;
        case 'fontweight':
          $metadata[$l_key] = $font
            ->getFontWeight();
          break;
        default:
          $code = array_search($l_key, array_map('strtolower', name::$nameIdCodes), TRUE);
          if ($value = $font
            ->getNameTableString($code)) {
            $metadata[$l_key] = $value;
          }
          break;
      }
    }
    return $metadata;
  }

  /**
   * Validates a file metadata key.
   *
   * @return bool
   *   TRUE if the key is valid.
   *
   * @throws \Drupal\file_mdm\FileMetadataException
   *   In case the key is invalid.
   */
  protected function validateKey($key, $method) {
    if (!is_string($key)) {
      throw new FileMetadataException("Invalid metadata key specified", $this
        ->getPluginId(), $method);
    }
    if (!in_array(strtolower($key), array_map('strtolower', $this
      ->getSupportedKeys()), TRUE)) {
      throw new FileMetadataException("Invalid metadata key '{$key}' specified", $this
        ->getPluginId(), $method);
    }
    return TRUE;
  }

  /**
   * {@inheritdoc}
   */
  protected function doGetMetadata($key = NULL) {
    if ($key === NULL) {
      return $this->metadata;
    }
    else {
      $this
        ->validateKey($key, __FUNCTION__);
      $l_key = strtolower($key);
      if (in_array($l_key, array_map('strtolower', $this
        ->getSupportedKeys()), TRUE)) {
        return isset($this->metadata[$l_key]) ? $this->metadata[$l_key] : NULL;
      }
      return NULL;
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function doSetMetadata($key, $value) {
    throw new FileMetadataException('Changing font metadata is not supported', $this
      ->getPluginId());
  }

  /**
   * {@inheritdoc}
   */
  protected function doRemoveMetadata($key) {
    throw new FileMetadataException('Deleting font metadata is not supported', $this
      ->getPluginId());
  }

}

Classes

Namesort descending Description
Font FileMetadata plugin for TTF/OTF/WOFF font information.