| Conditions | 45 | 
| Paths | 10380 | 
| Total Lines | 204 | 
| Code Lines | 122 | 
| Lines | 23 | 
| Ratio | 11.27 % | 
| Changes | 2 | ||
| Bugs | 0 | Features | 0 | 
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php | ||
| 176 | 	private function execute() { | ||
| 177 | $text = $this->text; | ||
| 178 | # Parsing through the text line by line. The main thing | ||
| 179 | # happening here is handling of block-level elements p, pre, | ||
| 180 | # and making lists from lines starting with * # : etc. | ||
| 181 | $textLines = StringUtils::explode( "\n", $text ); | ||
| 182 | |||
| 183 | $lastPrefix = $output = ''; | ||
| 184 | $this->DTopen = $inBlockElem = false; | ||
| 185 | $prefixLength = 0; | ||
| 186 | $pendingPTag = false; | ||
| 187 | $inBlockquote = false; | ||
| 188 | |||
| 189 | 		foreach ( $textLines as $inputLine ) { | ||
| 190 | # Fix up $lineStart | ||
| 191 | 			if ( !$this->lineStart ) { | ||
| 192 | $output .= $inputLine; | ||
| 193 | $this->lineStart = true; | ||
| 194 | continue; | ||
| 195 | } | ||
| 196 | # * = ul | ||
| 197 | # # = ol | ||
| 198 | # ; = dt | ||
| 199 | # : = dd | ||
| 200 | |||
| 201 | $lastPrefixLength = strlen( $lastPrefix ); | ||
| 202 | $preCloseMatch = preg_match( '/<\\/pre/i', $inputLine ); | ||
| 203 | $preOpenMatch = preg_match( '/<pre/i', $inputLine ); | ||
| 204 | # If not in a <pre> element, scan for and figure out what prefixes are there. | ||
| 205 | 			if ( !$this->inPre ) { | ||
| 206 | # Multiple prefixes may abut each other for nested lists. | ||
| 207 | $prefixLength = strspn( $inputLine, '*#:;' ); | ||
| 208 | $prefix = substr( $inputLine, 0, $prefixLength ); | ||
| 209 | |||
| 210 | # eh? | ||
| 211 | # ; and : are both from definition-lists, so they're equivalent | ||
| 212 | # for the purposes of determining whether or not we need to open/close | ||
| 213 | # elements. | ||
| 214 | $prefix2 = str_replace( ';', ':', $prefix ); | ||
| 215 | $t = substr( $inputLine, $prefixLength ); | ||
| 216 | $this->inPre = (bool)$preOpenMatch; | ||
| 217 | 			} else { | ||
| 218 | # Don't interpret any other prefixes in preformatted text | ||
| 219 | $prefixLength = 0; | ||
| 220 | $prefix = $prefix2 = ''; | ||
| 221 | $t = $inputLine; | ||
| 222 | } | ||
| 223 | |||
| 224 | # List generation | ||
| 225 | 			if ( $prefixLength && $lastPrefix === $prefix2 ) { | ||
| 226 | # Same as the last item, so no need to deal with nesting or opening stuff | ||
| 227 | $output .= $this->nextItem( substr( $prefix, -1 ) ); | ||
| 228 | $pendingPTag = false; | ||
| 229 | |||
| 230 | 				if ( substr( $prefix, -1 ) === ';' ) { | ||
| 231 | # The one nasty exception: definition lists work like this: | ||
| 232 | # ; title : definition text | ||
| 233 | # So we check for : in the remainder text to split up the | ||
| 234 | # title and definition, without b0rking links. | ||
| 235 | $term = $t2 = ''; | ||
| 236 | View Code Duplication | 					if ( $this->findColonNoLinks( $t, $term, $t2 ) !== false ) { | |
| 237 | $t = $t2; | ||
| 238 | $output .= $term . $this->nextItem( ':' ); | ||
| 239 | } | ||
| 240 | } | ||
| 241 | 			} elseif ( $prefixLength || $lastPrefixLength ) { | ||
| 242 | # We need to open or close prefixes, or both. | ||
| 243 | |||
| 244 | # Either open or close a level... | ||
| 245 | $commonPrefixLength = $this->getCommon( $prefix, $lastPrefix ); | ||
| 246 | $pendingPTag = false; | ||
| 247 | |||
| 248 | # Close all the prefixes which aren't shared. | ||
| 249 | 				while ( $commonPrefixLength < $lastPrefixLength ) { | ||
| 250 | $output .= $this->closeList( $lastPrefix[$lastPrefixLength - 1] ); | ||
| 251 | --$lastPrefixLength; | ||
| 252 | } | ||
| 253 | |||
| 254 | # Continue the current prefix if appropriate. | ||
| 255 | 				if ( $prefixLength <= $commonPrefixLength && $commonPrefixLength > 0 ) { | ||
| 256 | $output .= $this->nextItem( $prefix[$commonPrefixLength - 1] ); | ||
| 257 | } | ||
| 258 | |||
| 259 | # Open prefixes where appropriate. | ||
| 260 | 				if ( $lastPrefix && $prefixLength > $commonPrefixLength ) { | ||
| 261 | $output .= "\n"; | ||
| 262 | } | ||
| 263 | 				while ( $prefixLength > $commonPrefixLength ) { | ||
| 264 | $char = substr( $prefix, $commonPrefixLength, 1 ); | ||
| 265 | $output .= $this->openList( $char ); | ||
| 266 | |||
| 267 | View Code Duplication | 					if ( ';' === $char ) { | |
| 268 | # @todo FIXME: This is dupe of code above | ||
| 269 | 						if ( $this->findColonNoLinks( $t, $term, $t2 ) !== false ) { | ||
| 270 | $t = $t2; | ||
| 271 | $output .= $term . $this->nextItem( ':' ); | ||
| 272 | } | ||
| 273 | } | ||
| 274 | ++$commonPrefixLength; | ||
| 275 | } | ||
| 276 | 				if ( !$prefixLength && $lastPrefix ) { | ||
| 277 | $output .= "\n"; | ||
| 278 | } | ||
| 279 | $lastPrefix = $prefix2; | ||
| 280 | } | ||
| 281 | |||
| 282 | # If we have no prefixes, go to paragraph mode. | ||
| 283 | 			if ( 0 == $prefixLength ) { | ||
| 284 | # No prefix (not in list)--go to paragraph mode | ||
| 285 | # @todo consider using a stack for nestable elements like span, table and div | ||
| 286 | $openMatch = preg_match( | ||
| 287 | '/(?:<table|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|' | ||
| 288 | . '<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS', | ||
| 289 | $t | ||
| 290 | ); | ||
| 291 | $closeMatch = preg_match( | ||
| 292 | '/(?:<\\/table|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|' | ||
| 293 | . '<td|<th|<\\/?blockquote|<\\/?div|<hr|<\\/pre|<\\/p|<\\/mw:|' | ||
| 294 | . Parser::MARKER_PREFIX | ||
| 295 | . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', | ||
| 296 | $t | ||
| 297 | ); | ||
| 298 | |||
| 299 | 				if ( $openMatch || $closeMatch ) { | ||
| 300 | $pendingPTag = false; | ||
| 301 | # @todo bug 5718: paragraph closed | ||
| 302 | $output .= $this->closeParagraph(); | ||
| 303 | 					if ( $preOpenMatch && !$preCloseMatch ) { | ||
| 304 | $this->inPre = true; | ||
| 305 | } | ||
| 306 | $bqOffset = 0; | ||
| 307 | while ( preg_match( '/<(\\/?)blockquote[\s>]/i', $t, | ||
| 308 | $bqMatch, PREG_OFFSET_CAPTURE, $bqOffset ) | ||
| 309 | 					) { | ||
| 310 | $inBlockquote = !$bqMatch[1][0]; // is this a close tag? | ||
| 311 | $bqOffset = $bqMatch[0][1] + strlen( $bqMatch[0][0] ); | ||
| 312 | } | ||
| 313 | $inBlockElem = !$closeMatch; | ||
| 314 | 				} elseif ( !$inBlockElem && !$this->inPre ) { | ||
| 315 | if ( ' ' == substr( $t, 0, 1 ) | ||
| 316 | && ( $this->lastSection === 'pre' || trim( $t ) != '' ) | ||
| 317 | && !$inBlockquote | ||
| 318 | 					) { | ||
| 319 | # pre | ||
| 320 | View Code Duplication | 						if ( $this->lastSection !== 'pre' ) { | |
| 321 | $pendingPTag = false; | ||
| 322 | $output .= $this->closeParagraph() . '<pre>'; | ||
| 323 | $this->lastSection = 'pre'; | ||
| 324 | } | ||
| 325 | $t = substr( $t, 1 ); | ||
| 326 | 					} else { | ||
| 327 | # paragraph | ||
| 328 | 						if ( trim( $t ) === '' ) { | ||
| 329 | 							if ( $pendingPTag ) { | ||
| 330 | $output .= $pendingPTag . '<br />'; | ||
| 331 | $pendingPTag = false; | ||
| 332 | $this->lastSection = 'p'; | ||
| 333 | 							} else { | ||
| 334 | View Code Duplication | 								if ( $this->lastSection !== 'p' ) { | |
| 335 | $output .= $this->closeParagraph(); | ||
| 336 | $this->lastSection = ''; | ||
| 337 | $pendingPTag = '<p>'; | ||
| 338 | 								} else { | ||
| 339 | $pendingPTag = '</p><p>'; | ||
| 340 | } | ||
| 341 | } | ||
| 342 | 						} else { | ||
| 343 | 							if ( $pendingPTag ) { | ||
| 344 | $output .= $pendingPTag; | ||
| 345 | $pendingPTag = false; | ||
| 346 | $this->lastSection = 'p'; | ||
| 347 | 							} elseif ( $this->lastSection !== 'p' ) { | ||
| 348 | $output .= $this->closeParagraph() . '<p>'; | ||
| 349 | $this->lastSection = 'p'; | ||
| 350 | } | ||
| 351 | } | ||
| 352 | } | ||
| 353 | } | ||
| 354 | } | ||
| 355 | # somewhere above we forget to get out of pre block (bug 785) | ||
| 356 | 			if ( $preCloseMatch && $this->inPre ) { | ||
| 357 | $this->inPre = false; | ||
| 358 | } | ||
| 359 | 			if ( $pendingPTag === false ) { | ||
| 360 | $output .= $t; | ||
| 361 | 				if ( $prefixLength === 0 ) { | ||
| 362 | $output .= "\n"; | ||
| 363 | } | ||
| 364 | } | ||
| 365 | } | ||
| 366 | 		while ( $prefixLength ) { | ||
| 367 | $output .= $this->closeList( $prefix2[$prefixLength - 1] ); | ||
| 368 | --$prefixLength; | ||
| 369 | 			if ( !$prefixLength ) { | ||
| 370 | $output .= "\n"; | ||
| 371 | } | ||
| 372 | } | ||
| 373 | 		if ( $this->lastSection !== '' ) { | ||
| 374 | $output .= '</' . $this->lastSection . '>'; | ||
| 375 | $this->lastSection = ''; | ||
| 376 | } | ||
| 377 | |||
| 378 | return $output; | ||
| 379 | } | ||
| 380 | |||
| 536 |