You are here

function _typogrify_settings in Typogrify 7

Same name and namespace in other branches
  1. 5 typogrify.module \_typogrify_settings()
  2. 6 typogrify.module \_typogrify_settings()

Typogrify filter settings form.

Parameters

array $form: The prepopulated form array of the filter administration form.

array $form_state: The state of the (entire) configuration form.

object $filter: The filter object containing the current settings for the given format, in $filter->settings.

integer $format: ID if the input format to generate a settings form for.

Return value

array Form API array containing our settings form.

1 string reference to '_typogrify_settings'
typogrify_filter_info in ./typogrify.module
Implements hook_filter_info().

File

./typogrify.module, line 249
Typogrify: Brings typographical refinemnts to drupal

Code

function _typogrify_settings($form, &$form_state, $filter, $format, $defaults, $filters) {
  module_load_include('class.php', 'typogrify');
  module_load_include('php', 'typogrify', 'unicode-conversion');
  module_load_include('php', 'typogrify', 'smartypants');

  // Add our default settings to the array if they are not present.
  $filter->settings += array(
    'smartypants_enabled' => 1,
    'smartypants_hyphens' => 2,
    'space_hyphens' => 0,
    'wrap_ampersand' => 1,
    'widont_enabled' => 1,
    'space_to_nbsp' => 1,
    'wrap_abbr' => 0,
    'wrap_caps' => 1,
    'wrap_initial_quotes' => 1,
    'hyphenate_shy' => 0,
    'wrap_numbers' => 0,
    'ligatures' => array(),
    'arrows' => array(),
    'fractions' => array(),
    'quotes' => array(),
  );
  $form = array();
  $form['help'] = array(
    '#type' => 'markup',
    '#value' => '<p>' . t("Enable the following typographic refinements:") . '</p>',
  );

  // Smartypants settings.
  $form['smartypants_enabled'] = array(
    '#type' => 'checkbox',
    '#title' => t('Use typographers quotation marks and dashes (!smartylink)', array(
      '!smartylink' => l('SmartyPants', 'http://daringfireball.net/projects/smartypants/'),
    )),
    '#default_value' => $filter->settings['smartypants_enabled'],
  );

  // Smartypants hyphenation settings.
  // Uses the same values as the parse attributes in the SmartyPants
  // function (@see SmartyPants in smartypants.php)
  $form['smartypants_hyphens'] = array(
    '#type' => 'select',
    '#title' => t('Hyphenation settings for SmartyPants'),
    '#default_value' => $filter->settings['smartypants_hyphens'],
    '#options' => array(
      1 => t('“--” for em-dashes; no en-dash support'),
      3 => t('“--” for em-dashes; “---” for en-dashes'),
      2 => t('“---” for em-dashes; “--” for en-dashes'),
    ),
  );

  // Replace space_hyphens with em-dash.
  $form['space_hyphens'] = array(
    '#type' => 'checkbox',
    '#title' => t('Replace stand-alone dashes (normal dashes between whitespace) em-dashes.'),
    '#description' => t('" - " will turn into " — ".'),
    '#default_value' => $filter->settings['space_hyphens'],
  );

  // Remove widows settings.
  $form['widont_enabled'] = array(
    '#type' => 'checkbox',
    '#title' => t('Remove widows'),
    '#default_value' => $filter->settings['widont_enabled'],
  );

  // Remove widows settings.
  $form['hyphenate_shy'] = array(
    '#type' => 'checkbox',
    '#title' => t('Replace <code>=</code> with <code>&amp;shy;</code>'),
    '#description' => t('Words may be broken at the hyphenation points marked by “=”.'),
    '#default_value' => $filter->settings['hyphenate_shy'],
  );

  // Replace normal spaces with non-breaking spaces before "double punctuation
  // marks". This is especially useful in french.
  $form['space_to_nbsp'] = array(
    '#type' => 'checkbox',
    '#title' => t('Replace normal spaces with non-breaking spaces before "double punctuation marks" !marks.', array(
      '!marks' => '(<code>!?:;</code>)',
    )),
    '#description' => t('This is especially useful for french.'),
    '#default_value' => $filter->settings['space_to_nbsp'],
  );

  // Wrap caps settings.
  $form['wrap_caps'] = array(
    '#type' => 'checkbox',
    '#title' => t('Wrap caps'),
    '#default_value' => $filter->settings['wrap_caps'],
  );

  // Wrap ampersand settings.
  $form['wrap_ampersand'] = array(
    '#type' => 'checkbox',
    '#title' => t('Wrap ampersands'),
    '#default_value' => $filter->settings['wrap_ampersand'],
  );
  $form['wrap_abbr'] = array(
    '#type' => 'select',
    '#title' => t('Thin space in abbreviations'),
    '#description' => t('Wraps abbreviations with !span and inserts space after the dots.', array(
      '!span' => '<code>&lt;span class="abbr"&gt;…&lt;/span&gt;</code>',
    )),
    '#default_value' => $filter->settings['wrap_abbr'],
    '#options' => array(
      0 => t('Do nothing'),
      4 => t('Insert no space'),
      1 => t('“U+202F“ Narrow no-break space'),
      2 => t('“U+2009“ Thin space'),
      3 => t('span with margin-left: 0.167em'),
    ),
  );
  $form['wrap_numbers'] = array(
    '#type' => 'select',
    '#title' => t('Digit grouping in numbers'),
    '#description' => t('Wraps numbers with !span and inserts thin space for digit grouping.', array(
      '!span' => '<code>&lt;span class="number"&gt;…&lt;/span&gt;</code>',
    )),
    '#default_value' => $filter->settings['wrap_numbers'],
    '#options' => array(
      0 => t('Do nothing'),
      1 => t('“U+202F“ Narrow no-break space'),
      2 => t('“U+2009“ Thin space'),
      3 => t('span with margin-left: 0.167em'),
      4 => t('just wrap numbers'),
    ),
  );

  // Wrap initial quotes settings.
  $form['wrap_initial_quotes'] = array(
    '#type' => 'checkbox',
    '#title' => t('Wrap quotation marks'),
    '#default_value' => $filter->settings['wrap_initial_quotes'],
  );

  // Ligature conversion settings.
  $ligature_options = array();
  foreach (unicode_conversion_map('ligature') as $ascii => $unicode) {
    $ligature_options[$ascii] = t('Convert <code>@ascii</code> to !unicode', array(
      '@ascii' => $ascii,
      '!unicode' => $unicode,
    ));
  }
  $form['ligatures'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Ligatures'),
    '#options' => $ligature_options,
    '#default_value' => $filter->settings['ligatures'],
  );

  // Arrow conversion settings.
  $arrow_options = array();
  foreach (unicode_conversion_map('arrow') as $ascii => $unicode) {
    $arrow_options[$ascii] = t('Convert <code>@ascii</code> to !unicode', array(
      '@ascii' => _typogrify_unquote($ascii),
      '!unicode' => $unicode,
    ));
  }
  $form['arrows'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Arrows'),
    '#options' => $arrow_options,
    '#default_value' => $filter->settings['arrows'],
  );

  // Fraction conversion settings.
  $fraction_options = array();
  foreach (unicode_conversion_map('fraction') as $ascii => $unicode) {
    $fraction_options[$ascii] = t('Convert <code>@ascii</code> to !unicode', array(
      '@ascii' => $ascii,
      '!unicode' => $unicode,
    ));
  }
  $form['fractions'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Fractions'),
    '#options' => $fraction_options,
    '#default_value' => $filter->settings['fractions'],
  );

  // Quotes conversion settings.
  $quotes_options = array();
  foreach (unicode_conversion_map('quotes') as $quotes => $unicode) {
    $quotes_options[$quotes] = t('Convert <code>@ascii</code> to !unicode', array(
      '@ascii' => _typogrify_unquote($quotes),
      '!unicode' => $unicode,
    ));
  }
  $form['quotes'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Quotes'),
    '#options' => $quotes_options,
    '#default_value' => $filter->settings['quotes'],
  );

  // Version Information Settings.
  $version_strings = array();
  $version_strings[] = t('SmartyPants PHP version: !version', array(
    '!version' => l(SMARTYPANTS_PHP_VERSION, 'http://www.michelf.com/projects/php-smartypants/'),
  ));
  $version_strings[] = t('PHP Typogrify Version: !version', array(
    '!version' => l(PHP_TYPOGRIFY_VERSION, 'http://blog.hamstu.com/'),
  ));
  $form['info']['typogrify_status'] = array(
    '#type' => 'item',
    '#title' => t('Versions'),
    '#markup' => theme('item_list', array(
      'items' => $version_strings,
    )),
  );
  return $form;
}