Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.1129
diff -u -r1.1129 common.inc
--- includes/common.inc	18 Mar 2010 19:15:02 -0000	1.1129
+++ includes/common.inc	21 Mar 2010 20:05:11 -0000
@@ -3613,7 +3613,8 @@
   $output = '';
   // The index counter is used to keep aggregated and non-aggregated files in
   // order by weight.
-  $index = 1;
+  $index = 0;
+  $previous_inline = -1;
   $processed = array();
   $files = array();
   $preprocess_js = (variable_get('preprocess_js', FALSE) && (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update'));
@@ -3649,6 +3650,7 @@
       'type' => 'text/javascript',
     ),
   );
+
   foreach ($items as $item) {
     $query_string =  empty($item['version']) ? $default_query_string : $js_version_string . $item['version'];
 
@@ -3662,25 +3664,30 @@
         break;
 
       case 'inline':
-        $js_element = $element;
-        if ($item['defer']) {
-          $js_element['#attributes']['defer'] = 'defer';
+        // Inline elements that are beside each other can be put together.
+        if ($previous_inline == $index) {
+          $processed[$index]['#value'] .= $item['data'];
+        }
+        else {
+          $processed[++$index] = $element;
+          if ($item['defer']) {
+            $processed[$index]['#attributes']['defer'] = 'defer';
+          }
+          $processed[$index]['#value_prefix'] = $embed_prefix;
+          $processed[$index]['#value'] = $item['data'];
+          $processed[$index]['#value_suffix'] = $embed_suffix;
+          $previous_inline = $index;
         }
-        $js_element['#value_prefix'] = $embed_prefix;
-        $js_element['#value'] = $item['data'];
-        $js_element['#value_suffix'] = $embed_suffix;
-        $output .= theme('html_tag', array('element' => $js_element));
         break;
 
       case 'file':
-        $js_element = $element;
+        $processed[++$index] = $element;
         if (!$item['preprocess'] || !$is_writable || !$preprocess_js) {
           if ($item['defer']) {
             $js_element['#attributes']['defer'] = 'defer';
           }
           $query_string_separator = (strpos($item['data'], '?') !== FALSE) ? '&' : '?';
-          $js_element['#attributes']['src'] = file_create_url($item['data']) . $query_string_separator . ($item['cache'] ? $query_string : REQUEST_TIME);
-          $processed[$index++] = theme('html_tag', array('element' => $js_element));
+          $processed[$index]['#attributes']['src'] = file_create_url($item['data']) . $query_string_separator . ($item['cache'] ? $query_string : REQUEST_TIME);
         }
         else {
           // By increasing the index for each aggregated file, we maintain
@@ -3692,13 +3699,12 @@
         break;
 
       case 'external':
-        $js_element = $element;
+        $processed[++$index] = $element;
         // Preprocessing for external JavaScript files is ignored.
         if ($item['defer']) {
-          $js_element['#attributes']['defer'] = 'defer';
+          $processed[$index]['#attributes']['defer'] = 'defer';
         }
-        $js_element['#attributes']['src'] = $item['data'];
-        $processed[$index++] = theme('html_tag', array('element' => $js_element));
+        $processed[$index]['#attributes']['src'] = $item['data'];
         break;
     }
   }
@@ -3710,8 +3716,14 @@
     foreach ($files as $key => $file_set) {
       $filename = 'js_' . md5(serialize($file_set)) . '.js';
       $preprocess_file = file_create_url(drupal_build_js_cache($file_set, $filename)) . '?' . $default_query_string;
-      $js_element = $element;
-      $js_element['#attributes']['src'] = $preprocess_file;
+      $processed[$key] = $element;
+      $processed[$key]['#attributes']['src'] = $preprocess_file;
+    }
+  }
+
+  // Render all the processed elements.
+  foreach ($processed as $key => $js_element) {
+    if (!empty($js_element)) {
       $processed[$key] = theme('html_tag', array('element' => $js_element));
     }
   }
