Index: wp-includes/formatting.php
===================================================================
--- wp-includes/formatting.php	(revision 23297)
+++ wp-includes/formatting.php	(working copy)
@@ -70,8 +70,8 @@
 			$cockney = $cockneyreplace = array();
 		}
 
-		$static_characters = array_merge( array( '---', ' -- ', '--', ' - ', 'xn&#8211;', '...', '``', '\'\'', ' (tm)' ), $cockney );
-		$static_replacements = array_merge( array( $em_dash, ' ' . $em_dash . ' ', $en_dash, ' ' . $en_dash . ' ', 'xn--', '&#8230;', $opening_quote, $closing_quote, ' &#8482;' ), $cockneyreplace );
+		$static_characters = array_merge( array('xn&#8211;', '...', '``', '\'\'', ' (tm)' ), $cockney );
+		$static_replacements = array_merge( array('xn--', '&#8230;', $opening_quote, $closing_quote, ' &#8482;' ), $cockneyreplace );
 
 		$dynamic = array();
 		if ( "'" != $apos ) {
@@ -95,6 +95,14 @@
 
 		$dynamic[ '/\b(\d+)x(\d+)\b/'              ] = '$1&#215;$2'; // 9x9 (times)
 
+		$dynamic[ '/---/' ] = $em_dash; // Triple-hyphen becomes em dash
+
+		// Hyphen or double-hyphen surrounded by space become en or em dash
+		$dynamic[ '/(&nbsp;| )-(&nbsp;| )/' ] = '$1' . $en_dash . '$2';
+		$dynamic[ '/(&nbsp;| )--(&nbsp;| )/' ] = '$1' . $em_dash . '$2';
+
+		$dynamic[ '/--/' ] = $en_dash; // Remaining double-hyphens become en-dash
+
 		$dynamic_characters = array_keys( $dynamic );
 		$dynamic_replacements = array_values( $dynamic );
 	}
