Index: post-template.php
===================================================================
--- post-template.php	(revision 40278)
+++ post-template.php	(working copy)
@@ -842,6 +842,7 @@
  *                                          Also appended to the current item, which is not linked. Default empty.
  *     @type string       $next_or_number   Indicates whether page numbers should be used. Valid values are number
  *                                          and next. Default is 'number'.
+ *     @type string       $navwidth         Number of links displayed before and after current page.
  *     @type string       $separator        Text between pagination links. Default is ' '.
  *     @type string       $nextpagelink     Link text for the next page link, if available. Default is 'Next Page'.
  *     @type string       $previouspagelink Link text for the previous page link, if available. Default is 'Previous Page'.
@@ -865,7 +866,7 @@
 		'nextpagelink'     => __( 'Next page' ),
 		'previouspagelink' => __( 'Previous page' ),
 		'pagelink'         => '%',
-		'echo'             => 1
+		'echo'             => 1,
 	);
 
 	$params = wp_parse_args( $args, $defaults );
@@ -912,6 +913,33 @@
 				/** This filter is documented in wp-includes/post-template.php */
 				$output .= apply_filters( 'wp_link_pages_link', $link, $prev );
 			}
+
+			// Output number of links equal to $navwidth before current page.
+			if ( 'mixed' == $r['next_or_number'] ) {
+				for ( $i = $page - $navwidth; $i < $page; $i++ ) {
+					if ( $i > 0 ) {
+						$link = _wp_link_page( $i ) . $r['link_before'] . str_replace( '%', $i, $r['pagelink'] ) . $r['link_after'] . '</a>';
+						$link = apply_filters( 'wp_link_pages_link', $link, $i );
+						// Use the custom links separator beginning with the second link.
+						$output .= ( 1 !== $i ) ? $r['separator'] : ' ';
+						$output .= $link;
+					}
+				}
+
+				// Output current page within <span> tags for enhanced styling capability.
+				if ( $prev ) {
+					$output .= $r['separator'];
+				}
+				$output .= $r['link_before'] . ('<span>') . str_replace( '%', $i, $r['pagelink'] ) . ('</span>') . $r['link_after'];
+
+				// Output number of links equal to $navwidth after current page.
+				for ( $i = $page + 1; $i <= $numpages; $i++ ) {
+					$link = _wp_link_page( $i ) . $r['link_before'] . str_replace( '%', $i, $r['pagelink'] ) . $r['link_after'] . '</a>';
+					$link = apply_filters( 'wp_link_pages_link', $link, $i );
+					$output .= $r['separator'] . $link;
+				}
+			}
+
 			$next = $page + 1;
 			if ( $next <= $numpages ) {
 				if ( $prev ) {
