You are here

class Basic in Image Effects 8

Same name in this branch
  1. 8 src/Plugin/image_effects/FontSelector/Basic.php \Drupal\image_effects\Plugin\image_effects\FontSelector\Basic
  2. 8 src/Plugin/image_effects/ImageSelector/Basic.php \Drupal\image_effects\Plugin\image_effects\ImageSelector\Basic
Same name and namespace in other branches
  1. 8.3 src/Plugin/image_effects/FontSelector/Basic.php \Drupal\image_effects\Plugin\image_effects\FontSelector\Basic
  2. 8.2 src/Plugin/image_effects/FontSelector/Basic.php \Drupal\image_effects\Plugin\image_effects\FontSelector\Basic

Basic font selector plugin.

Allows typing in the font file URI/path.

Plugin annotation


@Plugin(
  id = "basic",
  title = @Translation("Basic font selector"),
  short_title = @Translation("Basic"),
  help = @Translation("Allows typing in the font file URI/path.")
)

Hierarchy

Expanded class hierarchy of Basic

1 string reference to 'Basic'
image_effects.schema.yml in config/schema/image_effects.schema.yml
config/schema/image_effects.schema.yml

File

src/Plugin/image_effects/FontSelector/Basic.php, line 22

Namespace

Drupal\image_effects\Plugin\image_effects\FontSelector
View source
class Basic extends ImageEffectsPluginBase implements ImageEffectsFontSelectorPluginInterface {

  /**
   * {@inheritdoc}
   */
  public function selectionElement(array $options = []) {

    // Element.
    return array_merge([
      '#type' => 'textfield',
      '#title' => $this
        ->t('Font URI/path'),
      '#description' => $this
        ->t('An URI, an absolute path, or a relative path. Relative paths will be resolved relative to the Drupal installation directory.'),
      '#element_validate' => [
        [
          $this,
          'validateSelectorUri',
        ],
      ],
    ], $options);
  }

  /**
   * Validation handler for the selection element.
   */
  public function validateSelectorUri($element, FormStateInterface $form_state, $form) {
    if (!empty($element['#value'])) {
      if (!file_exists($element['#value'])) {
        $form_state
          ->setErrorByName(implode('][', $element['#parents']), $this
          ->t('The file does not exist.'));
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getDescription($uri) {
    return $this
      ->getData($uri)['name'];
  }

  /**
   * Return the font information.
   *
   * Scans the font file to return tags information.
   *
   * @param string $uri
   *   the URI of the font file.
   *
   * @return array
   *   an associative array with the following keys:
   *   'copyright' => Copyright information
   *   'family' => Font family
   *   'subfamily' => Font subfamily
   *   'name' => Font name
   *   'file' => Font file URI
   */
  protected function getData($uri) {
    $realpath = drupal_realpath($uri);
    $fd = fopen($realpath, "r");
    $text = fread($fd, filesize($realpath));
    fclose($fd);
    $number_of_tabs = $this
      ->dec2hex(ord($text[4])) . $this
      ->dec2hex(ord($text[5]));
    for ($i = 0; $i < hexdec($number_of_tabs); $i++) {
      $tag = $text[12 + $i * 16] . $text[12 + $i * 16 + 1] . $text[12 + $i * 16 + 2] . $text[12 + $i * 16 + 3];
      if ($tag == "name") {
        $offset_name_table_hex = $this
          ->dec2hex(ord($text[12 + $i * 16 + 8])) . $this
          ->dec2hex(ord($text[12 + $i * 16 + 8 + 1])) . $this
          ->dec2hex(ord($text[12 + $i * 16 + 8 + 2])) . $this
          ->dec2hex(ord($text[12 + $i * 16 + 8 + 3]));
        $offset_name_table_dec = hexdec($offset_name_table_hex);
        $offset_storage_hex = $this
          ->dec2hex(ord($text[$offset_name_table_dec + 4])) . $this
          ->dec2hex(ord($text[$offset_name_table_dec + 5]));
        $offset_storage_dec = hexdec($offset_storage_hex);
        $number_name_records_hex = $this
          ->dec2hex(ord($text[$offset_name_table_dec + 2])) . $this
          ->dec2hex(ord($text[$offset_name_table_dec + 3]));
        $number_name_records_dec = hexdec($number_name_records_hex);
        break;
      }
    }
    $storage_dec = $offset_storage_dec + $offset_name_table_dec;
    $font = [
      'copyright' => '',
      'family' => '',
      'subfamily' => '',
      'name' => '',
      'file' => $uri,
    ];
    for ($j = 0; $j < $number_name_records_dec; $j++) {
      $name_id_hex = $this
        ->dec2hex(ord($text[$offset_name_table_dec + 6 + $j * 12 + 6])) . $this
        ->dec2hex(ord($text[$offset_name_table_dec + 6 + $j * 12 + 7]));
      $name_id_dec = hexdec($name_id_hex);
      $string_length_hex = $this
        ->dec2hex(ord($text[$offset_name_table_dec + 6 + $j * 12 + 8])) . $this
        ->dec2hex(ord($text[$offset_name_table_dec + 6 + $j * 12 + 9]));
      $string_length_dec = hexdec($string_length_hex);
      $string_offset_hex = $this
        ->dec2hex(ord($text[$offset_name_table_dec + 6 + $j * 12 + 10])) . $this
        ->dec2hex(ord($text[$offset_name_table_dec + 6 + $j * 12 + 11]));
      $string_offset_dec = hexdec($string_offset_hex);
      if ($name_id_dec == 0 && empty($font['copyright'])) {
        for ($l = 0; $l < $string_length_dec; $l++) {
          if (ord($text[$storage_dec + $string_offset_dec + $l]) >= 32) {
            $font['copyright'] .= $text[$storage_dec + $string_offset_dec + $l];
          }
        }
      }
      if ($name_id_dec == 1 && empty($font['family'])) {
        for ($l = 0; $l < $string_length_dec; $l++) {
          if (ord($text[$storage_dec + $string_offset_dec + $l]) >= 32) {
            $font['family'] .= $text[$storage_dec + $string_offset_dec + $l];
          }
        }
      }
      if ($name_id_dec == 2 && empty($font['subfamily'])) {
        for ($l = 0; $l < $string_length_dec; $l++) {
          if (ord($text[$storage_dec + $string_offset_dec + $l]) >= 32) {
            $font['subfamily'] .= $text[$storage_dec + $string_offset_dec + $l];
          }
        }
      }
      if ($name_id_dec == 4 && empty($font['name'])) {
        for ($l = 0; $l < $string_length_dec; $l++) {
          if (ord($text[$storage_dec + $string_offset_dec + $l]) >= 32) {
            $font['name'] .= $text[$storage_dec + $string_offset_dec + $l];
          }
        }
      }
      if ($font['copyright'] != "" && $font['family'] != "" && $font['subfamily'] != "" && $font['name'] != "") {
        break;
      }
    }
    return $font;
  }

  /**
   * Convert a dec to a hex.
   *
   * @param int $dec
   *   An integer number.
   *
   * @return string
   *   the number represented as hex
   */
  protected function dec2hex($dec) {
    $hex = dechex($dec);
    return str_repeat("0", 2 - Unicode::strlen($hex)) . Unicode::strtoupper($hex);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Basic::dec2hex protected function Convert a dec to a hex.
Basic::getData protected function Return the font information.
Basic::getDescription public function Get the description of a font file. Overrides ImageEffectsFontSelectorPluginInterface::getDescription
Basic::selectionElement public function Return a form element to select the plugin content. Overrides ImageEffectsPluginBase::selectionElement 1
Basic::validateSelectorUri public function Validation handler for the selection element. 1
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
ImageEffectsPluginBase::$config protected property Configuration object for image_effects.
ImageEffectsPluginBase::$logger protected property The image_effects logger.
ImageEffectsPluginBase::$pluginType protected property The image_effects plugin type.
ImageEffectsPluginBase::buildConfigurationForm public function Form constructor. Overrides PluginFormInterface::buildConfigurationForm 2
ImageEffectsPluginBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
ImageEffectsPluginBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create 1
ImageEffectsPluginBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurablePluginInterface::defaultConfiguration 2
ImageEffectsPluginBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurablePluginInterface::getConfiguration
ImageEffectsPluginBase::getType public function Get the image_effects plugin type. Overrides ImageEffectsPluginBaseInterface::getType
ImageEffectsPluginBase::isAvailable public static function Determines if plugin can be used. Overrides ImageEffectsPluginBaseInterface::isAvailable 1
ImageEffectsPluginBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurablePluginInterface::setConfiguration
ImageEffectsPluginBase::submitConfigurationForm public function Form submission handler. Overrides PluginFormInterface::submitConfigurationForm
ImageEffectsPluginBase::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
ImageEffectsPluginBase::__construct public function Constructs a ImageEffectsPluginBase object. Overrides PluginBase::__construct 1
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.