Index: content_taxonomy.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/content_taxonomy/content_taxonomy.module,v
retrieving revision 1.2.2.15.2.35
diff -u -p -r1.2.2.15.2.35 content_taxonomy.module
--- content_taxonomy.module	6 Feb 2010 11:40:27 -0000	1.2.2.15.2.35
+++ content_taxonomy.module	21 Dec 2010 01:10:43 -0000
@@ -30,14 +30,21 @@ function content_taxonomy_init() {
  * Implementation of hook_theme().
  */
 function content_taxonomy_theme() {
-  return array(
-    'content_taxonomy_formatter_default' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'content_taxonomy_formatter_link' => array(
+  $theme = array();
+  foreach (content_taxonomy_formatters() AS $format => $format_title) {
+    $theme['content_taxonomy_formatter_' . $format] = array(
       'arguments' => array('element' => NULL),
-    ),
-  );
+    );
+  }
+  foreach (content_taxonomy_multiple_formatters() AS $multiple_format => $multiple_format_title) {
+    foreach (content_taxonomy_formatters() AS $format => $format_title) {
+      $theme['content_taxonomy_formatter_' . $multiple_format . '_' . $format] = array(
+        'arguments' => array('element' => NULL),
+        'function' => 'theme_content_taxonomy_formatter_' . $multiple_format,
+      );
+    }
+  }
+  return $theme;
 }
 
 /**
@@ -198,18 +205,24 @@ function content_taxonomy_field($op, &$n
  * Implementation of hook_field_formatter_info().
  */
 function content_taxonomy_field_formatter_info() {
-  return array(
-    'default' => array(
-      'label' => t('As Text'),
+  $info = array();
+  foreach (content_taxonomy_formatters() AS $format => $format_title) {
+    $info[$format] = array(
+      'label' => $format_title,
       'field types' => array('content_taxonomy'),
       'multiple values' => CONTENT_HANDLE_CORE,
-    ),
-    'link' => array(
-      'label' => t('As Link'),
-      'field types' => array('content_taxonomy'),
-      'multiple values' => CONTENT_HANDLE_CORE,
-    ),
-  );
+    );
+  }
+  foreach (content_taxonomy_multiple_formatters() AS $multiple_format => $multiple_format_title) {
+    foreach (content_taxonomy_formatters() AS $format => $format_title) {
+      $info[$multiple_format . '_' . $format] = array(
+        'label' => $format_title . ' (' . $multiple_format_title . ')',
+        'field types' => array('content_taxonomy'),
+        'multiple values' => CONTENT_HANDLE_MODULE,
+      );
+    }
+  }
+  return $info;
 }
 
 
@@ -237,6 +250,55 @@ function theme_content_taxonomy_formatte
 }
 
 /**
+ * Theme an unordered list.
+ * @ingroup themeable
+ */
+function theme_content_taxonomy_formatter_unordered_list($element) {
+  $values = _content_taxonomy_formatter_multiple_value($element);
+  if (!empty($values)) {
+    return theme('item_list', $values);
+  }
+}
+
+/**
+ * Theme an ordered list.
+ * @ingroup themeable
+ */
+function theme_content_taxonomy_formatter_ordered_list($element) {
+  $values = _content_taxonomy_formatter_multiple_value($element);
+  if (!empty($values)) {
+    return theme('item_list', $values, NULL, 'ol');
+  }
+}
+
+/**
+ * Theme a comma seperated list.
+ * @ingroup themeable
+ */
+function theme_content_taxonomy_formatter_comma_separated($element) {
+  $values = _content_taxonomy_formatter_multiple_value($element);
+  if (!empty($values)) {
+    return implode(', ', $values);
+  }
+}
+
+function _content_taxonomy_formatter_multiple_value($element) {
+  $values = array();
+  $format = substr($element['#formatter'], strrpos($element['#formatter'], '_') + 1);
+  $item = $element;
+  foreach (element_children($element) as $key) {
+    unset($item[$key]);
+  }
+  foreach (element_children($element) as $key) {
+    $item['#item'] = $element[$key]['#item'];
+    if (!content_taxonomy_content_is_empty($item['#item'], $element)) {
+      $values[] = theme('content_taxonomy_formatter_' . $format, $item);
+    }
+  }
+  return $values;
+}
+
+/**
  * Implementation of hook_content_is_empty().
  */
 function content_taxonomy_content_is_empty($item, $field) {
@@ -247,11 +309,32 @@ function content_taxonomy_content_is_emp
 }
 
 /**
+ * Returns a list of formatters for single value fields.
+ */
+function content_taxonomy_formatters() {
+  return array(
+    'default' => t('As text'),
+    'link' => t('As link'),
+  );
+}
+
+/**
+ * Returns a list of formatters for multiple value fields.
+ */
+function content_taxonomy_multiple_formatters() {
+  return array(
+    'comma_separated' => t('comma separated'),
+    'ordered_list' => t('ordered list'),
+    'unordered_list' => t('unordered list'),
+  );
+}
+
+/**
  * Called by content_allowed_values to create the $options array for the content_taxonomy_options
  */
 function content_taxonomy_allowed_values($field) {
   $options = array();
-  
+
   //for opt groups call different function
   if (isset($field['widget']['group_parent']) && $field['widget']['group_parent'] > 0) {
     $options = content_taxonomy_allowed_values_groups($field);