Index: formatted_number.module =================================================================== RCS file: /cvs/drupal/contributions/modules/formatted_number/Attic/formatted_number.module,v retrieving revision 1.1.2.5 diff -u -p -r1.1.2.5 formatted_number.module --- formatted_number.module 20 May 2009 07:21:36 -0000 1.1.2.5 +++ formatted_number.module 17 Sep 2009 18:08:53 -0000 @@ -43,12 +43,22 @@ function formatted_number_init() { * Implementation of hook_theme(). */ function formatted_number_theme() { - return array( + $theme_hooks = array( 'formatted_number' => array('arguments' => array('element' => NULL)), 'formatted_number_formatter_default' => array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_generic'), 'formatted_number_formatter_nozeros' => array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_generic'), 'formatted_number_formatter_unformatted' => array('arguments' => array('element' => NULL)), ); + + // Theme functions for the dp and sf formatters. + foreach (formatted_number_decimal_place_formatter_lengths() as $dp) { + $theme_hooks["formatted_number_formatter_{$dp}dp"] = array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_rounded'); + } + foreach (formatted_number_significant_figure_formatter_lengths() as $sf) { + $theme_hooks["formatted_number_formatter_{$sf}sf"] = array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_rounded'); + } + + return $theme_hooks; } /** @@ -336,11 +346,41 @@ function formatted_number_field($op, &$n function formatted_number_field_formatter_info() { $all_field_types = array_keys(formatted_number_get_fields_info()); $real_field_types = array_keys(formatted_number_get_fields_info('real')); - return array( + $formatters = array( 'default' => array('label' => t('Default'), 'field types' => $all_field_types), 'nozeros' => array('label' => t('Remove redundant zeros'), 'field types' => $real_field_types), 'unformatted' => array('label' => t('Unformatted'), 'field types' => $all_field_types), ); + + // Decimal place and significant figure formatters. + foreach (formatted_number_decimal_place_formatter_lengths() as $dp) { + $formatters["{$dp}dp"] = array('label' => t('!dp decimal places', array('!dp' => $dp)), 'field types' => $real_field_types); + } + foreach (formatted_number_significant_figure_formatter_lengths() as $sf) { + $formatters["{$sf}sf"] = array('label' => t('!sf significant figures', array('!sf' => $sf)), 'field types' => $real_field_types); + } + + return $formatters; +} + +/** + * Gets the lengths for the decimal place formatters. + * + * @return array + * Integers of dp lengths. + */ +function formatted_number_decimal_place_formatter_lengths() { + return variable_get('formatted_number_decimal_place_formatter_lengths', array(0, 1, 2)); +} + +/** + * Gets the lengths for the significant place formatters. + * + * @return array + * Integers of sf lengths. + */ +function formatted_number_significant_figure_formatter_lengths() { + return variable_get('formatted_number_significant_figure_formatter_lengths', array(1, 2, 3, 4)); } /** @@ -603,3 +643,18 @@ function theme_formatted_number_formatte return $prefix . $formatted_number . $suffix; } + +/** + * Display a formatted number rounded by decimal places or significant figures. + * + * @ingroup themeable + */ +function theme_formatted_number_formatter_rounded($element) { + $places = substr($element['#formatter'], -3, 1); + if (substr($element['#formatter'], -2) == 'sf') { + return format_number_significant_figures($element['#item']['value'], $places); + } + else { + return format_number($element['#item']['value'], $places); + } +}