Index: addressfield.tokens.inc
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- addressfield.tokens.inc	(revision 24e41cddce55d950341ab2104df1e05d77543f2f)
+++ addressfield.tokens.inc	(revision )
@@ -90,7 +90,7 @@
 function addressfield_token_info_alter(&$data) {
   // Loop over every address field on the site.
   foreach (array_filter(field_info_field_map(), 'addressfield_field_map_filter') as $field_name => $field) {
-    foreach ($data['tokens'] as $group => $token){
+    foreach ($data['tokens'] as $group => $token) {
       if (isset($data['tokens'][$group][$field_name]) && is_array($data['tokens'][$group][$field_name])) {
         // Set the token type for the field to use the addressfield child tokens.
         $data['tokens'][$group][$field_name]['type'] = 'address-field';
@@ -191,7 +191,14 @@
         case 'format-mailchimp':
           $components = array();
 
-          foreach (array('thoroughfare', 'premise', 'locality', 'administrative_area', 'postal_code', 'country') as $component) {
+          foreach (array(
+                     'thoroughfare',
+                     'premise',
+                     'locality',
+                     'administrative_area',
+                     'postal_code',
+                     'country'
+                   ) as $component) {
             if (!empty($address[$component])) {
               $components[] = $address[$component];
             }
@@ -202,8 +209,83 @@
           break;
       }
     }
+    $addresses = $data['address-field'][$language_code];
+    if (count($addresses) != 1) {
+      foreach ($addresses as $key => $address) {
+        $values[$key] = $address;
+        foreach ($tokens as $name => $original) {
+          switch ($name) {
+            case $key . ':country':
+              $countries = _addressfield_country_options_list();
+              $replacements[$original] = $sanitize ? check_plain($countries[$values[$key]['country']]) : $countries[$values[$key]['country']];
+              break;
+
+            case $key . ':country-code':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['country']) : $values[$key]['country'];
+              break;
+
+            case $key . ':administrative-area':
+              // If we received format handlers in the data array, generate the form
+              // for the address field to see if the administrative area should be
+              // expanded from an abbreviation to a related name.
+              $administrative_area = $values[$key]['administrative_area'];
+
+              if (!empty($data['format_handlers'])) {
+                $form = addressfield_generate($address, $data['format_handlers'], array('mode' => 'form'));
+
+                if (!empty($form['locality_block']['administrative_area']['#options'][$administrative_area])) {
+                  $administrative_area = $form['locality_block']['administrative_area']['#options'][$administrative_area];
-  }
+                }
+              }
 
+              $replacements[$original] = $sanitize ? check_plain($administrative_area) : $administrative_area;
+              break;
+
+            case $key . ':administrative-area-raw':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['administrative_area']) : $values[$key]['administrative_area'];
+              break;
+
+            case $key . ':locality':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['locality']) : $values[$key]['locality'];
+              break;
+
+            case $key . ':postal-code':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['postal_code']) : $values[$key]['postal_code'];
+              break;
+
+            case $key . ':thoroughfare':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['thoroughfare']) : $values[$key]['thoroughfare'];
+              break;
+
+            case $key . ':premise':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['premise']) : $values[$key]['premise'];
+              break;
+
+            case $key . ':sub_premise':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['sub_premise']) : $address['sub_premise'];
+              break;
+
+            case $key . ':organisation':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['organisation_name']) : $address['organisation_name'];
+              break;
+
+            case $key . ':name-line':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['name_line']) : $values[$key]['name_line'];
+              break;
+
+            case $key . ':first-name':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['first_name']) : $values[$key]['first_name'];
+              break;
+
+            case $key . ':last-name':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['last_name']) : $values[$key]['last_name'];
+              break;
+          }
+        }
+      }
+    }
+  }
+
   // The Token module extends direct token generation by using a generic entity
   // token generation process. Since we intend to overwrite the default Token
   // module implementation of address field tokens, we use this generic token
@@ -225,7 +307,10 @@
 
         if (property_exists($data['entity'], $field_name)) {
           // Generate the necessary address field tokens for the entity.
-          $replacements += token_generate('address-field', $addressfield_tokens, array('address-field' => $data['entity']->$field_name, 'format_handlers' => $format_handlers), $options);
+          $replacements += token_generate('address-field', $addressfield_tokens, array(
+            'address-field' => $data['entity']->$field_name,
+            'format_handlers' => $format_handlers
+          ), $options);
         }
       }
     }
