X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fparser%2FBlockLevelPass.php;h=fab9ab7fb1828afb8e1cdfc746115bc7898d70bf;hb=74426f3cf796b149f1ae445e41815bbe148640b2;hp=2ef599a398d79bdb7510743d16f54ee6ca7372b5;hpb=3635092917533a865ae94a78243caef2cd99d577;p=lhc%2Fweb%2Fwiklou.git
diff --git a/includes/parser/BlockLevelPass.php b/includes/parser/BlockLevelPass.php
index 2ef599a398..8cf8f859b9 100644
--- a/includes/parser/BlockLevelPass.php
+++ b/includes/parser/BlockLevelPass.php
@@ -26,7 +26,7 @@ class BlockLevelPass {
private $DTopen = false;
private $inPre = false;
private $lastSection = '';
- private $linestart;
+ private $lineStart;
private $text;
# State constants for the definition list colon extraction
@@ -257,12 +257,17 @@ class BlockLevelPass {
$output .= $this->nextItem( $prefix[$commonPrefixLength - 1] );
}
+ # Close an open
if we have a (":") starting on this line
+ if ( $this->DTopen && $commonPrefixLength > 0 && $prefix[$commonPrefixLength - 1] === ':' ) {
+ $output .= $this->nextItem( ':' );
+ }
+
# Open prefixes where appropriate.
if ( $lastPrefix && $prefixLength > $commonPrefixLength ) {
$output .= "\n";
}
while ( $prefixLength > $commonPrefixLength ) {
- $char = substr( $prefix, $commonPrefixLength, 1 );
+ $char = $prefix[$commonPrefixLength];
$output .= $this->openList( $char );
if ( ';' === $char ) {
@@ -286,20 +291,20 @@ class BlockLevelPass {
# @todo consider using a stack for nestable elements like span, table and div
$openMatch = preg_match(
'/(?:closeParagraph();
if ( $preOpenMatch && !$preCloseMatch ) {
$this->inPre = true;
@@ -353,7 +358,7 @@ class BlockLevelPass {
}
}
}
- # somewhere above we forget to get out of pre block (bug 785)
+ # somewhere above we forget to get out of pre block (T2785)
if ( $preCloseMatch && $this->inPre ) {
$this->inPre = false;
}
@@ -412,130 +417,130 @@ class BlockLevelPass {
$c = $str[$i];
switch ( $state ) {
- case self::COLON_STATE_TEXT:
- switch ( $c ) {
- case "<":
- # Could be either a tag or an tag
- $state = self::COLON_STATE_TAGSTART;
- break;
- case ":":
- if ( $ltLevel === 0 ) {
- # We found it!
- $before = substr( $str, 0, $i );
- $after = substr( $str, $i + 1 );
- return $i;
+ case self::COLON_STATE_TEXT:
+ switch ( $c ) {
+ case "<":
+ # Could be either a tag or an tag
+ $state = self::COLON_STATE_TAGSTART;
+ break;
+ case ":":
+ if ( $ltLevel === 0 ) {
+ # We found it!
+ $before = substr( $str, 0, $i );
+ $after = substr( $str, $i + 1 );
+ return $i;
+ }
+ # Embedded in a tag; don't break it.
+ break;
+ default:
+ # Skip ahead looking for something interesting
+ if ( !preg_match( '/:|<|-\{/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
+ # Nothing else interesting
+ return false;
+ }
+ if ( $m[0][0] === '-{' ) {
+ $state = self::COLON_STATE_LC;
+ $lcLevel++;
+ $i = $m[0][1] + 1;
+ } else {
+ # Skip ahead to next interesting character.
+ $i = $m[0][1] - 1;
+ }
+ break;
}
- # Embedded in a tag; don't break it.
break;
- default:
- # Skip ahead looking for something interesting
- if ( !preg_match( '/:|<|-\{/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
- # Nothing else interesting
- return false;
- }
- if ( $m[0][0] === '-{' ) {
- $state = self::COLON_STATE_LC;
+ case self::COLON_STATE_LC:
+ # In language converter markup -{ ... }-
+ if ( !preg_match( '/-\{|\}-/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
+ # Nothing else interesting to find; abort!
+ # We're nested in language converter markup, but there
+ # are no close tags left. Abort!
+ break 2;
+ } elseif ( $m[0][0] === '-{' ) {
+ $i = $m[0][1] + 1;
$lcLevel++;
+ } elseif ( $m[0][0] === '}-' ) {
$i = $m[0][1] + 1;
- } else {
- # Skip ahead to next interesting character.
- $i = $m[0][1] - 1;
+ $lcLevel--;
+ if ( $lcLevel === 0 ) {
+ $state = self::COLON_STATE_TEXT;
+ }
}
break;
- }
- break;
- case self::COLON_STATE_LC:
- # In language converter markup -{ ... }-
- if ( !preg_match( '/-\{|\}-/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
- # Nothing else interesting to find; abort!
- # We're nested in language converter markup, but there
- # are no close tags left. Abort!
- break 2;
- } elseif ( $m[0][0] === '-{' ) {
- $i = $m[0][1] + 1;
- $lcLevel++;
- } elseif ( $m[0][0] === '}-' ) {
- $i = $m[0][1] + 1;
- $lcLevel--;
- if ( $lcLevel === 0 ) {
- $state = self::COLON_STATE_TEXT;
+ case self::COLON_STATE_TAG:
+ # In a
+ switch ( $c ) {
+ case ">":
+ $ltLevel++;
+ $state = self::COLON_STATE_TEXT;
+ break;
+ case "/":
+ # Slash may be followed by >?
+ $state = self::COLON_STATE_TAGSLASH;
+ break;
+ default:
+ # ignore
}
- }
- break;
- case self::COLON_STATE_TAG:
- # In a
- switch ( $c ) {
- case ">":
- $ltLevel++;
- $state = self::COLON_STATE_TEXT;
break;
- case "/":
- # Slash may be followed by >?
- $state = self::COLON_STATE_TAGSLASH;
+ case self::COLON_STATE_TAGSTART:
+ switch ( $c ) {
+ case "/":
+ $state = self::COLON_STATE_CLOSETAG;
+ break;
+ case "!":
+ $state = self::COLON_STATE_COMMENT;
+ break;
+ case ">":
+ # Illegal early close? This shouldn't happen D:
+ $state = self::COLON_STATE_TEXT;
+ break;
+ default:
+ $state = self::COLON_STATE_TAG;
+ }
break;
- default:
- # ignore
- }
- break;
- case self::COLON_STATE_TAGSTART:
- switch ( $c ) {
- case "/":
- $state = self::COLON_STATE_CLOSETAG;
+ case self::COLON_STATE_CLOSETAG:
+ # In a
+ if ( $c === ">" ) {
+ if ( $ltLevel > 0 ) {
+ $ltLevel--;
+ } else {
+ # ignore the excess close tag, but keep looking for
+ # colons. (This matches Parsoid behavior.)
+ wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
+ }
+ $state = self::COLON_STATE_TEXT;
+ }
break;
- case "!":
- $state = self::COLON_STATE_COMMENT;
+ case self::COLON_STATE_TAGSLASH:
+ if ( $c === ">" ) {
+ # Yes, a self-closed tag
+ $state = self::COLON_STATE_TEXT;
+ } else {
+ # Probably we're jumping the gun, and this is an attribute
+ $state = self::COLON_STATE_TAG;
+ }
break;
- case ">":
- # Illegal early close? This shouldn't happen D:
- $state = self::COLON_STATE_TEXT;
+ case self::COLON_STATE_COMMENT:
+ if ( $c === "-" ) {
+ $state = self::COLON_STATE_COMMENTDASH;
+ }
break;
- default:
- $state = self::COLON_STATE_TAG;
- }
- break;
- case self::COLON_STATE_CLOSETAG:
- # In a
- if ( $c === ">" ) {
- if ( $ltLevel > 0 ) {
- $ltLevel--;
+ case self::COLON_STATE_COMMENTDASH:
+ if ( $c === "-" ) {
+ $state = self::COLON_STATE_COMMENTDASHDASH;
} else {
- # ignore the excess close tag, but keep looking for
- # colons. (This matches Parsoid behavior.)
- wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
+ $state = self::COLON_STATE_COMMENT;
}
- $state = self::COLON_STATE_TEXT;
- }
- break;
- case self::COLON_STATE_TAGSLASH:
- if ( $c === ">" ) {
- # Yes, a self-closed tag
- $state = self::COLON_STATE_TEXT;
- } else {
- # Probably we're jumping the gun, and this is an attribute
- $state = self::COLON_STATE_TAG;
- }
- break;
- case self::COLON_STATE_COMMENT:
- if ( $c === "-" ) {
- $state = self::COLON_STATE_COMMENTDASH;
- }
- break;
- case self::COLON_STATE_COMMENTDASH:
- if ( $c === "-" ) {
- $state = self::COLON_STATE_COMMENTDASHDASH;
- } else {
- $state = self::COLON_STATE_COMMENT;
- }
- break;
- case self::COLON_STATE_COMMENTDASHDASH:
- if ( $c === ">" ) {
- $state = self::COLON_STATE_TEXT;
- } else {
- $state = self::COLON_STATE_COMMENT;
- }
- break;
- default:
- throw new MWException( "State machine error in " . __METHOD__ );
+ break;
+ case self::COLON_STATE_COMMENTDASHDASH:
+ if ( $c === ">" ) {
+ $state = self::COLON_STATE_TEXT;
+ } else {
+ $state = self::COLON_STATE_COMMENT;
+ }
+ break;
+ default:
+ throw new MWException( "State machine error in " . __METHOD__ );
}
}
if ( $ltLevel > 0 || $lcLevel > 0 ) {