Require indentation of CASE statements in PHP code
Bug: T182546 Change-Id: I91a9555893a08e4ec58da97c6cc4d1e70000ff6b
This commit is contained in:
parent
a1ac6795ff
commit
e74bfe13f6
24 changed files with 1783 additions and 1785 deletions
|
|
@ -560,26 +560,26 @@ class DiffHistoryBlob implements HistoryBlob {
|
|||
$op = $x['op'];
|
||||
++$p;
|
||||
switch ( $op ) {
|
||||
case self::XDL_BDOP_INS:
|
||||
$x = unpack( 'Csize', substr( $diff, $p, 1 ) );
|
||||
$p++;
|
||||
$out .= substr( $diff, $p, $x['size'] );
|
||||
$p += $x['size'];
|
||||
break;
|
||||
case self::XDL_BDOP_INSB:
|
||||
$x = unpack( 'Vcsize', substr( $diff, $p, 4 ) );
|
||||
$p += 4;
|
||||
$out .= substr( $diff, $p, $x['csize'] );
|
||||
$p += $x['csize'];
|
||||
break;
|
||||
case self::XDL_BDOP_CPY:
|
||||
$x = unpack( 'Voff/Vcsize', substr( $diff, $p, 8 ) );
|
||||
$p += 8;
|
||||
$out .= substr( $base, $x['off'], $x['csize'] );
|
||||
break;
|
||||
default:
|
||||
wfDebug( __METHOD__ . ": invalid op\n" );
|
||||
return false;
|
||||
case self::XDL_BDOP_INS:
|
||||
$x = unpack( 'Csize', substr( $diff, $p, 1 ) );
|
||||
$p++;
|
||||
$out .= substr( $diff, $p, $x['size'] );
|
||||
$p += $x['size'];
|
||||
break;
|
||||
case self::XDL_BDOP_INSB:
|
||||
$x = unpack( 'Vcsize', substr( $diff, $p, 4 ) );
|
||||
$p += 4;
|
||||
$out .= substr( $diff, $p, $x['csize'] );
|
||||
$p += $x['csize'];
|
||||
break;
|
||||
case self::XDL_BDOP_CPY:
|
||||
$x = unpack( 'Voff/Vcsize', substr( $diff, $p, 8 ) );
|
||||
$p += 8;
|
||||
$out .= substr( $base, $x['off'], $x['csize'] );
|
||||
break;
|
||||
default:
|
||||
wfDebug( __METHOD__ . ": invalid op\n" );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
|
|
|
|||
|
|
@ -1308,16 +1308,15 @@ class Message implements MessageSpecifier, Serializable {
|
|||
*/
|
||||
protected function formatPlaintext( $plaintext, $format ) {
|
||||
switch ( $format ) {
|
||||
case self::FORMAT_TEXT:
|
||||
case self::FORMAT_PLAIN:
|
||||
return $plaintext;
|
||||
|
||||
case self::FORMAT_PARSE:
|
||||
case self::FORMAT_BLOCK_PARSE:
|
||||
case self::FORMAT_ESCAPED:
|
||||
default:
|
||||
return htmlspecialchars( $plaintext, ENT_QUOTES );
|
||||
case self::FORMAT_TEXT:
|
||||
case self::FORMAT_PLAIN:
|
||||
return $plaintext;
|
||||
|
||||
case self::FORMAT_PARSE:
|
||||
case self::FORMAT_BLOCK_PARSE:
|
||||
case self::FORMAT_ESCAPED:
|
||||
default:
|
||||
return htmlspecialchars( $plaintext, ENT_QUOTES );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -97,17 +97,17 @@ class LCStoreStaticArray implements LCStore {
|
|||
$data = $encoded[1];
|
||||
|
||||
switch ( $type ) {
|
||||
case 'v':
|
||||
return $data;
|
||||
case 's':
|
||||
return unserialize( $data );
|
||||
case 'a':
|
||||
return array_map( function ( $v ) {
|
||||
return LCStoreStaticArray::decode( $v );
|
||||
}, $data );
|
||||
default:
|
||||
throw new RuntimeException(
|
||||
'Unable to decode ' . var_export( $encoded, true ) );
|
||||
case 'v':
|
||||
return $data;
|
||||
case 's':
|
||||
return unserialize( $data );
|
||||
case 'a':
|
||||
return array_map( function ( $v ) {
|
||||
return LCStoreStaticArray::decode( $v );
|
||||
}, $data );
|
||||
default:
|
||||
throw new RuntimeException(
|
||||
'Unable to decode ' . var_export( $encoded, true ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -304,40 +304,40 @@ class SquidPurgeClient {
|
|||
*/
|
||||
protected function processReadBuffer() {
|
||||
switch ( $this->readState ) {
|
||||
case 'idle':
|
||||
return 'done';
|
||||
case 'status':
|
||||
case 'header':
|
||||
$lines = explode( "\r\n", $this->readBuffer, 2 );
|
||||
if ( count( $lines ) < 2 ) {
|
||||
case 'idle':
|
||||
return 'done';
|
||||
}
|
||||
if ( $this->readState == 'status' ) {
|
||||
$this->processStatusLine( $lines[0] );
|
||||
} else { // header
|
||||
$this->processHeaderLine( $lines[0] );
|
||||
}
|
||||
$this->readBuffer = $lines[1];
|
||||
return 'continue';
|
||||
case 'body':
|
||||
if ( $this->bodyRemaining !== null ) {
|
||||
if ( $this->bodyRemaining > strlen( $this->readBuffer ) ) {
|
||||
$this->bodyRemaining -= strlen( $this->readBuffer );
|
||||
case 'status':
|
||||
case 'header':
|
||||
$lines = explode( "\r\n", $this->readBuffer, 2 );
|
||||
if ( count( $lines ) < 2 ) {
|
||||
return 'done';
|
||||
}
|
||||
if ( $this->readState == 'status' ) {
|
||||
$this->processStatusLine( $lines[0] );
|
||||
} else { // header
|
||||
$this->processHeaderLine( $lines[0] );
|
||||
}
|
||||
$this->readBuffer = $lines[1];
|
||||
return 'continue';
|
||||
case 'body':
|
||||
if ( $this->bodyRemaining !== null ) {
|
||||
if ( $this->bodyRemaining > strlen( $this->readBuffer ) ) {
|
||||
$this->bodyRemaining -= strlen( $this->readBuffer );
|
||||
$this->readBuffer = '';
|
||||
return 'done';
|
||||
} else {
|
||||
$this->readBuffer = substr( $this->readBuffer, $this->bodyRemaining );
|
||||
$this->bodyRemaining = 0;
|
||||
$this->nextRequest();
|
||||
return 'continue';
|
||||
}
|
||||
} else {
|
||||
// No content length, read all data to EOF
|
||||
$this->readBuffer = '';
|
||||
return 'done';
|
||||
} else {
|
||||
$this->readBuffer = substr( $this->readBuffer, $this->bodyRemaining );
|
||||
$this->bodyRemaining = 0;
|
||||
$this->nextRequest();
|
||||
return 'continue';
|
||||
}
|
||||
} else {
|
||||
// No content length, read all data to EOF
|
||||
$this->readBuffer = '';
|
||||
return 'done';
|
||||
}
|
||||
default:
|
||||
throw new MWException( __METHOD__ . ': unexpected state' );
|
||||
default:
|
||||
throw new MWException( __METHOD__ . ': unexpected state' );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -543,13 +543,13 @@ class WikiImporter {
|
|||
$buffer = "";
|
||||
while ( $this->reader->read() ) {
|
||||
switch ( $this->reader->nodeType ) {
|
||||
case XMLReader::TEXT:
|
||||
case XMLReader::CDATA:
|
||||
case XMLReader::SIGNIFICANT_WHITESPACE:
|
||||
$buffer .= $this->reader->value;
|
||||
break;
|
||||
case XMLReader::END_ELEMENT:
|
||||
return $buffer;
|
||||
case XMLReader::TEXT:
|
||||
case XMLReader::CDATA:
|
||||
case XMLReader::SIGNIFICANT_WHITESPACE:
|
||||
$buffer .= $this->reader->value;
|
||||
break;
|
||||
case XMLReader::END_ELEMENT:
|
||||
return $buffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,137 +53,137 @@ class MWMessagePack {
|
|||
}
|
||||
|
||||
switch ( gettype( $value ) ) {
|
||||
case 'NULL':
|
||||
return "\xC0";
|
||||
case 'NULL':
|
||||
return "\xC0";
|
||||
|
||||
case 'boolean':
|
||||
return $value ? "\xC3" : "\xC2";
|
||||
case 'boolean':
|
||||
return $value ? "\xC3" : "\xC2";
|
||||
|
||||
case 'double':
|
||||
case 'float':
|
||||
return self::$bigendian
|
||||
? "\xCB" . pack( 'd', $value )
|
||||
: "\xCB" . strrev( pack( 'd', $value ) );
|
||||
case 'double':
|
||||
case 'float':
|
||||
return self::$bigendian
|
||||
? "\xCB" . pack( 'd', $value )
|
||||
: "\xCB" . strrev( pack( 'd', $value ) );
|
||||
|
||||
case 'string':
|
||||
$length = strlen( $value );
|
||||
if ( $length < 32 ) {
|
||||
return pack( 'Ca*', 0xA0 | $length, $value );
|
||||
} elseif ( $length <= 0xFFFF ) {
|
||||
return pack( 'Cna*', 0xDA, $length, $value );
|
||||
} elseif ( $length <= 0xFFFFFFFF ) {
|
||||
return pack( 'CNa*', 0xDB, $length, $value );
|
||||
}
|
||||
throw new InvalidArgumentException( __METHOD__
|
||||
. ": string too long (length: $length; max: 4294967295)" );
|
||||
|
||||
case 'integer':
|
||||
if ( $value >= 0 ) {
|
||||
if ( $value <= 0x7F ) {
|
||||
// positive fixnum
|
||||
return chr( $value );
|
||||
case 'string':
|
||||
$length = strlen( $value );
|
||||
if ( $length < 32 ) {
|
||||
return pack( 'Ca*', 0xA0 | $length, $value );
|
||||
} elseif ( $length <= 0xFFFF ) {
|
||||
return pack( 'Cna*', 0xDA, $length, $value );
|
||||
} elseif ( $length <= 0xFFFFFFFF ) {
|
||||
return pack( 'CNa*', 0xDB, $length, $value );
|
||||
}
|
||||
if ( $value <= 0xFF ) {
|
||||
// uint8
|
||||
return pack( 'CC', 0xCC, $value );
|
||||
}
|
||||
if ( $value <= 0xFFFF ) {
|
||||
// uint16
|
||||
return pack( 'Cn', 0xCD, $value );
|
||||
}
|
||||
if ( $value <= 0xFFFFFFFF ) {
|
||||
// uint32
|
||||
return pack( 'CN', 0xCE, $value );
|
||||
}
|
||||
if ( $value <= 0xFFFFFFFFFFFFFFFF ) {
|
||||
// uint64
|
||||
$hi = ( $value & 0xFFFFFFFF00000000 ) >> 32;
|
||||
$lo = $value & 0xFFFFFFFF;
|
||||
return self::$bigendian
|
||||
? pack( 'CNN', 0xCF, $lo, $hi )
|
||||
: pack( 'CNN', 0xCF, $hi, $lo );
|
||||
}
|
||||
} else {
|
||||
if ( $value >= -32 ) {
|
||||
// negative fixnum
|
||||
return pack( 'c', $value );
|
||||
}
|
||||
if ( $value >= -0x80 ) {
|
||||
// int8
|
||||
return pack( 'Cc', 0xD0, $value );
|
||||
}
|
||||
if ( $value >= -0x8000 ) {
|
||||
// int16
|
||||
$p = pack( 's', $value );
|
||||
return self::$bigendian
|
||||
? pack( 'Ca2', 0xD1, $p )
|
||||
: pack( 'Ca2', 0xD1, strrev( $p ) );
|
||||
}
|
||||
if ( $value >= -0x80000000 ) {
|
||||
// int32
|
||||
$p = pack( 'l', $value );
|
||||
return self::$bigendian
|
||||
? pack( 'Ca4', 0xD2, $p )
|
||||
: pack( 'Ca4', 0xD2, strrev( $p ) );
|
||||
}
|
||||
if ( $value >= -0x8000000000000000 ) {
|
||||
// int64
|
||||
// pack() does not support 64-bit ints either so pack into two 32-bits
|
||||
$p1 = pack( 'l', $value & 0xFFFFFFFF );
|
||||
$p2 = pack( 'l', ( $value >> 32 ) & 0xFFFFFFFF );
|
||||
return self::$bigendian
|
||||
? pack( 'Ca4a4', 0xD3, $p1, $p2 )
|
||||
: pack( 'Ca4a4', 0xD3, strrev( $p2 ), strrev( $p1 ) );
|
||||
}
|
||||
}
|
||||
throw new InvalidArgumentException( __METHOD__ . ": invalid integer '$value'" );
|
||||
|
||||
case 'array':
|
||||
$buffer = '';
|
||||
$length = count( $value );
|
||||
if ( $length > 0xFFFFFFFF ) {
|
||||
throw new InvalidArgumentException( __METHOD__
|
||||
. ": array too long (length: $length, max: 4294967295)" );
|
||||
}
|
||||
. ": string too long (length: $length; max: 4294967295)" );
|
||||
|
||||
$index = 0;
|
||||
foreach ( $value as $k => $v ) {
|
||||
if ( $index !== $k || $index === $length ) {
|
||||
break;
|
||||
case 'integer':
|
||||
if ( $value >= 0 ) {
|
||||
if ( $value <= 0x7F ) {
|
||||
// positive fixnum
|
||||
return chr( $value );
|
||||
}
|
||||
if ( $value <= 0xFF ) {
|
||||
// uint8
|
||||
return pack( 'CC', 0xCC, $value );
|
||||
}
|
||||
if ( $value <= 0xFFFF ) {
|
||||
// uint16
|
||||
return pack( 'Cn', 0xCD, $value );
|
||||
}
|
||||
if ( $value <= 0xFFFFFFFF ) {
|
||||
// uint32
|
||||
return pack( 'CN', 0xCE, $value );
|
||||
}
|
||||
if ( $value <= 0xFFFFFFFFFFFFFFFF ) {
|
||||
// uint64
|
||||
$hi = ( $value & 0xFFFFFFFF00000000 ) >> 32;
|
||||
$lo = $value & 0xFFFFFFFF;
|
||||
return self::$bigendian
|
||||
? pack( 'CNN', 0xCF, $lo, $hi )
|
||||
: pack( 'CNN', 0xCF, $hi, $lo );
|
||||
}
|
||||
} else {
|
||||
$index++;
|
||||
if ( $value >= -32 ) {
|
||||
// negative fixnum
|
||||
return pack( 'c', $value );
|
||||
}
|
||||
if ( $value >= -0x80 ) {
|
||||
// int8
|
||||
return pack( 'Cc', 0xD0, $value );
|
||||
}
|
||||
if ( $value >= -0x8000 ) {
|
||||
// int16
|
||||
$p = pack( 's', $value );
|
||||
return self::$bigendian
|
||||
? pack( 'Ca2', 0xD1, $p )
|
||||
: pack( 'Ca2', 0xD1, strrev( $p ) );
|
||||
}
|
||||
if ( $value >= -0x80000000 ) {
|
||||
// int32
|
||||
$p = pack( 'l', $value );
|
||||
return self::$bigendian
|
||||
? pack( 'Ca4', 0xD2, $p )
|
||||
: pack( 'Ca4', 0xD2, strrev( $p ) );
|
||||
}
|
||||
if ( $value >= -0x8000000000000000 ) {
|
||||
// int64
|
||||
// pack() does not support 64-bit ints either so pack into two 32-bits
|
||||
$p1 = pack( 'l', $value & 0xFFFFFFFF );
|
||||
$p2 = pack( 'l', ( $value >> 32 ) & 0xFFFFFFFF );
|
||||
return self::$bigendian
|
||||
? pack( 'Ca4a4', 0xD3, $p1, $p2 )
|
||||
: pack( 'Ca4a4', 0xD3, strrev( $p2 ), strrev( $p1 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
$associative = $index !== $length;
|
||||
throw new InvalidArgumentException( __METHOD__ . ": invalid integer '$value'" );
|
||||
|
||||
if ( $associative ) {
|
||||
if ( $length < 16 ) {
|
||||
$buffer .= pack( 'C', 0x80 | $length );
|
||||
} elseif ( $length <= 0xFFFF ) {
|
||||
$buffer .= pack( 'Cn', 0xDE, $length );
|
||||
} else {
|
||||
$buffer .= pack( 'CN', 0xDF, $length );
|
||||
case 'array':
|
||||
$buffer = '';
|
||||
$length = count( $value );
|
||||
if ( $length > 0xFFFFFFFF ) {
|
||||
throw new InvalidArgumentException( __METHOD__
|
||||
. ": array too long (length: $length, max: 4294967295)" );
|
||||
}
|
||||
|
||||
$index = 0;
|
||||
foreach ( $value as $k => $v ) {
|
||||
$buffer .= self::pack( $k );
|
||||
$buffer .= self::pack( $v );
|
||||
if ( $index !== $k || $index === $length ) {
|
||||
break;
|
||||
} else {
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ( $length < 16 ) {
|
||||
$buffer .= pack( 'C', 0x90 | $length );
|
||||
} elseif ( $length <= 0xFFFF ) {
|
||||
$buffer .= pack( 'Cn', 0xDC, $length );
|
||||
} else {
|
||||
$buffer .= pack( 'CN', 0xDD, $length );
|
||||
}
|
||||
foreach ( $value as $v ) {
|
||||
$buffer .= self::pack( $v );
|
||||
}
|
||||
}
|
||||
return $buffer;
|
||||
$associative = $index !== $length;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException( __METHOD__ . ': unsupported type ' . gettype( $value ) );
|
||||
if ( $associative ) {
|
||||
if ( $length < 16 ) {
|
||||
$buffer .= pack( 'C', 0x80 | $length );
|
||||
} elseif ( $length <= 0xFFFF ) {
|
||||
$buffer .= pack( 'Cn', 0xDE, $length );
|
||||
} else {
|
||||
$buffer .= pack( 'CN', 0xDF, $length );
|
||||
}
|
||||
foreach ( $value as $k => $v ) {
|
||||
$buffer .= self::pack( $k );
|
||||
$buffer .= self::pack( $v );
|
||||
}
|
||||
} else {
|
||||
if ( $length < 16 ) {
|
||||
$buffer .= pack( 'C', 0x90 | $length );
|
||||
} elseif ( $length <= 0xFFFF ) {
|
||||
$buffer .= pack( 'Cn', 0xDC, $length );
|
||||
} else {
|
||||
$buffer .= pack( 'CN', 0xDD, $length );
|
||||
}
|
||||
foreach ( $value as $v ) {
|
||||
$buffer .= self::pack( $v );
|
||||
}
|
||||
}
|
||||
return $buffer;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException( __METHOD__ . ': unsupported type ' . gettype( $value ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -479,23 +479,23 @@ class XmlTypeCheck {
|
|||
continue;
|
||||
}
|
||||
switch ( $field ) {
|
||||
case 'typepublic':
|
||||
case 'typesystem':
|
||||
$parsed['type'] = $value;
|
||||
break;
|
||||
case 'pubquote':
|
||||
case 'pubapos':
|
||||
$parsed['publicid'] = $value;
|
||||
break;
|
||||
case 'pubsysquote':
|
||||
case 'pubsysapos':
|
||||
case 'sysquote':
|
||||
case 'sysapos':
|
||||
$parsed['systemid'] = $value;
|
||||
break;
|
||||
case 'internal':
|
||||
$parsed['internal'] = $value;
|
||||
break;
|
||||
case 'typepublic':
|
||||
case 'typesystem':
|
||||
$parsed['type'] = $value;
|
||||
break;
|
||||
case 'pubquote':
|
||||
case 'pubapos':
|
||||
$parsed['publicid'] = $value;
|
||||
break;
|
||||
case 'pubsysquote':
|
||||
case 'pubsysapos':
|
||||
case 'sysquote':
|
||||
case 'sysapos':
|
||||
$parsed['systemid'] = $value;
|
||||
break;
|
||||
case 'internal':
|
||||
$parsed['internal'] = $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $parsed;
|
||||
|
|
|
|||
|
|
@ -112,14 +112,14 @@ class BitmapHandler extends TransformationalImageHandler {
|
|||
*/
|
||||
protected function imageMagickSubsampling( $pixelFormat ) {
|
||||
switch ( $pixelFormat ) {
|
||||
case 'yuv444':
|
||||
return [ '1x1', '1x1', '1x1' ];
|
||||
case 'yuv422':
|
||||
return [ '2x1', '1x1', '1x1' ];
|
||||
case 'yuv420':
|
||||
return [ '2x2', '1x1', '1x1' ];
|
||||
default:
|
||||
throw new MWException( 'Invalid pixel format for JPEG output' );
|
||||
case 'yuv444':
|
||||
return [ '1x1', '1x1', '1x1' ];
|
||||
case 'yuv422':
|
||||
return [ '2x1', '1x1', '1x1' ];
|
||||
case 'yuv420':
|
||||
return [ '2x2', '1x1', '1x1' ];
|
||||
default:
|
||||
throw new MWException( 'Invalid pixel format for JPEG output' );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -162,18 +162,17 @@ class XCFHandler extends BitmapHandler {
|
|||
// Unclear from base media type if it has an alpha layer,
|
||||
// so just assume that it does since it "potentially" could.
|
||||
switch ( $header['base_type'] ) {
|
||||
case 0:
|
||||
$metadata['colorType'] = 'truecolour-alpha';
|
||||
break;
|
||||
case 1:
|
||||
$metadata['colorType'] = 'greyscale-alpha';
|
||||
break;
|
||||
case 2:
|
||||
$metadata['colorType'] = 'index-coloured';
|
||||
break;
|
||||
default:
|
||||
$metadata['colorType'] = 'unknown';
|
||||
|
||||
case 0:
|
||||
$metadata['colorType'] = 'truecolour-alpha';
|
||||
break;
|
||||
case 1:
|
||||
$metadata['colorType'] = 'greyscale-alpha';
|
||||
break;
|
||||
case 2:
|
||||
$metadata['colorType'] = 'index-coloured';
|
||||
break;
|
||||
default:
|
||||
$metadata['colorType'] = 'unknown';
|
||||
}
|
||||
} else {
|
||||
// Marker to prevent repeated attempted extraction
|
||||
|
|
|
|||
|
|
@ -194,15 +194,15 @@ class WikiPage implements Page, IDBAccessObject {
|
|||
*/
|
||||
private static function convertSelectType( $type ) {
|
||||
switch ( $type ) {
|
||||
case 'fromdb':
|
||||
return self::READ_NORMAL;
|
||||
case 'fromdbmaster':
|
||||
return self::READ_LATEST;
|
||||
case 'forupdate':
|
||||
return self::READ_LOCKING;
|
||||
default:
|
||||
// It may already be an integer or whatever else
|
||||
return $type;
|
||||
case 'fromdb':
|
||||
return self::READ_NORMAL;
|
||||
case 'fromdbmaster':
|
||||
return self::READ_LATEST;
|
||||
case 'forupdate':
|
||||
return self::READ_LOCKING;
|
||||
default:
|
||||
// It may already be an integer or whatever else
|
||||
return $type;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -417,130 +417,130 @@ class BlockLevelPass {
|
|||
$c = $str[$i];
|
||||
|
||||
switch ( $state ) {
|
||||
case self::COLON_STATE_TEXT:
|
||||
switch ( $c ) {
|
||||
case "<":
|
||||
# Could be either a <start> tag or an </end> 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 <start> tag or an </end> 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;
|
||||
$lcLevel++;
|
||||
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;
|
||||
} else {
|
||||
# Skip ahead to next interesting character.
|
||||
$i = $m[0][1] - 1;
|
||||
$lcLevel++;
|
||||
} elseif ( $m[0][0] === '}-' ) {
|
||||
$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 ) {
|
||||
case self::COLON_STATE_TAG:
|
||||
# In a <tag>
|
||||
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_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;
|
||||
case self::COLON_STATE_CLOSETAG:
|
||||
# In a </tag>
|
||||
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 self::COLON_STATE_TAG:
|
||||
# In a <tag>
|
||||
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_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;
|
||||
case self::COLON_STATE_CLOSETAG:
|
||||
# In a </tag>
|
||||
if ( $c === ">" ) {
|
||||
if ( $ltLevel > 0 ) {
|
||||
$ltLevel--;
|
||||
case self::COLON_STATE_TAGSLASH:
|
||||
if ( $c === ">" ) {
|
||||
# Yes, a self-closed tag <blah/>
|
||||
$state = self::COLON_STATE_TEXT;
|
||||
} else {
|
||||
# ignore the excess close tag, but keep looking for
|
||||
# colons. (This matches Parsoid behavior.)
|
||||
wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
|
||||
# Probably we're jumping the gun, and this is an attribute
|
||||
$state = self::COLON_STATE_TAG;
|
||||
}
|
||||
$state = self::COLON_STATE_TEXT;
|
||||
}
|
||||
break;
|
||||
case self::COLON_STATE_TAGSLASH:
|
||||
if ( $c === ">" ) {
|
||||
# Yes, a self-closed tag <blah/>
|
||||
$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_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__ );
|
||||
}
|
||||
}
|
||||
if ( $ltLevel > 0 || $lcLevel > 0 ) {
|
||||
|
|
|
|||
|
|
@ -5022,40 +5022,40 @@ class Parser {
|
|||
$paramName = $paramMap[$magicName];
|
||||
|
||||
switch ( $paramName ) {
|
||||
case 'gallery-internal-alt':
|
||||
$alt = $this->stripAltText( $match, false );
|
||||
break;
|
||||
case 'gallery-internal-link':
|
||||
$linkValue = strip_tags( $this->replaceLinkHoldersText( $match ) );
|
||||
$chars = self::EXT_LINK_URL_CLASS;
|
||||
$addr = self::EXT_LINK_ADDR;
|
||||
$prots = $this->mUrlProtocols;
|
||||
// check to see if link matches an absolute url, if not then it must be a wiki link.
|
||||
if ( preg_match( '/^-{R|(.*)}-$/', $linkValue ) ) {
|
||||
// Result of LanguageConverter::markNoConversion
|
||||
// invoked on an external link.
|
||||
$linkValue = substr( $linkValue, 4, -2 );
|
||||
}
|
||||
if ( preg_match( "/^($prots)$addr$chars*$/u", $linkValue ) ) {
|
||||
$link = $linkValue;
|
||||
$this->mOutput->addExternalLink( $link );
|
||||
} else {
|
||||
$localLinkTitle = Title::newFromText( $linkValue );
|
||||
if ( $localLinkTitle !== null ) {
|
||||
$this->mOutput->addLink( $localLinkTitle );
|
||||
$link = $localLinkTitle->getLinkURL();
|
||||
case 'gallery-internal-alt':
|
||||
$alt = $this->stripAltText( $match, false );
|
||||
break;
|
||||
case 'gallery-internal-link':
|
||||
$linkValue = strip_tags( $this->replaceLinkHoldersText( $match ) );
|
||||
$chars = self::EXT_LINK_URL_CLASS;
|
||||
$addr = self::EXT_LINK_ADDR;
|
||||
$prots = $this->mUrlProtocols;
|
||||
// check to see if link matches an absolute url, if not then it must be a wiki link.
|
||||
if ( preg_match( '/^-{R|(.*)}-$/', $linkValue ) ) {
|
||||
// Result of LanguageConverter::markNoConversion
|
||||
// invoked on an external link.
|
||||
$linkValue = substr( $linkValue, 4, -2 );
|
||||
}
|
||||
if ( preg_match( "/^($prots)$addr$chars*$/u", $linkValue ) ) {
|
||||
$link = $linkValue;
|
||||
$this->mOutput->addExternalLink( $link );
|
||||
} else {
|
||||
$localLinkTitle = Title::newFromText( $linkValue );
|
||||
if ( $localLinkTitle !== null ) {
|
||||
$this->mOutput->addLink( $localLinkTitle );
|
||||
$link = $localLinkTitle->getLinkURL();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Must be a handler specific parameter.
|
||||
if ( $handler->validateParam( $paramName, $match ) ) {
|
||||
$handlerOptions[$paramName] = $match;
|
||||
} else {
|
||||
// Guess not, consider it as caption.
|
||||
wfDebug( "$parameterMatch failed parameter validation\n" );
|
||||
$label = '|' . $parameterMatch;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Must be a handler specific parameter.
|
||||
if ( $handler->validateParam( $paramName, $match ) ) {
|
||||
$handlerOptions[$paramName] = $match;
|
||||
} else {
|
||||
// Guess not, consider it as caption.
|
||||
wfDebug( "$parameterMatch failed parameter validation\n" );
|
||||
$label = '|' . $parameterMatch;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
@ -5217,52 +5217,52 @@ class Parser {
|
|||
} else {
|
||||
# Validate internal parameters
|
||||
switch ( $paramName ) {
|
||||
case 'manualthumb':
|
||||
case 'alt':
|
||||
case 'class':
|
||||
# @todo FIXME: Possibly check validity here for
|
||||
# manualthumb? downstream behavior seems odd with
|
||||
# missing manual thumbs.
|
||||
$validated = true;
|
||||
$value = $this->stripAltText( $value, $holders );
|
||||
break;
|
||||
case 'link':
|
||||
$chars = self::EXT_LINK_URL_CLASS;
|
||||
$addr = self::EXT_LINK_ADDR;
|
||||
$prots = $this->mUrlProtocols;
|
||||
if ( $value === '' ) {
|
||||
$paramName = 'no-link';
|
||||
$value = true;
|
||||
case 'manualthumb':
|
||||
case 'alt':
|
||||
case 'class':
|
||||
# @todo FIXME: Possibly check validity here for
|
||||
# manualthumb? downstream behavior seems odd with
|
||||
# missing manual thumbs.
|
||||
$validated = true;
|
||||
} elseif ( preg_match( "/^((?i)$prots)/", $value ) ) {
|
||||
if ( preg_match( "/^((?i)$prots)$addr$chars*$/u", $value, $m ) ) {
|
||||
$paramName = 'link-url';
|
||||
$this->mOutput->addExternalLink( $value );
|
||||
if ( $this->mOptions->getExternalLinkTarget() ) {
|
||||
$params[$type]['link-target'] = $this->mOptions->getExternalLinkTarget();
|
||||
$value = $this->stripAltText( $value, $holders );
|
||||
break;
|
||||
case 'link':
|
||||
$chars = self::EXT_LINK_URL_CLASS;
|
||||
$addr = self::EXT_LINK_ADDR;
|
||||
$prots = $this->mUrlProtocols;
|
||||
if ( $value === '' ) {
|
||||
$paramName = 'no-link';
|
||||
$value = true;
|
||||
$validated = true;
|
||||
} elseif ( preg_match( "/^((?i)$prots)/", $value ) ) {
|
||||
if ( preg_match( "/^((?i)$prots)$addr$chars*$/u", $value, $m ) ) {
|
||||
$paramName = 'link-url';
|
||||
$this->mOutput->addExternalLink( $value );
|
||||
if ( $this->mOptions->getExternalLinkTarget() ) {
|
||||
$params[$type]['link-target'] = $this->mOptions->getExternalLinkTarget();
|
||||
}
|
||||
$validated = true;
|
||||
}
|
||||
} else {
|
||||
$linkTitle = Title::newFromText( $value );
|
||||
if ( $linkTitle ) {
|
||||
$paramName = 'link-title';
|
||||
$value = $linkTitle;
|
||||
$this->mOutput->addLink( $linkTitle );
|
||||
$validated = true;
|
||||
}
|
||||
$validated = true;
|
||||
}
|
||||
} else {
|
||||
$linkTitle = Title::newFromText( $value );
|
||||
if ( $linkTitle ) {
|
||||
$paramName = 'link-title';
|
||||
$value = $linkTitle;
|
||||
$this->mOutput->addLink( $linkTitle );
|
||||
$validated = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'frameless':
|
||||
case 'framed':
|
||||
case 'thumbnail':
|
||||
// use first appearing option, discard others.
|
||||
$validated = !$seenformat;
|
||||
$seenformat = true;
|
||||
break;
|
||||
default:
|
||||
# Most other things appear to be empty or numeric...
|
||||
$validated = ( $value === false || is_numeric( trim( $value ) ) );
|
||||
break;
|
||||
case 'frameless':
|
||||
case 'framed':
|
||||
case 'thumbnail':
|
||||
// use first appearing option, discard others.
|
||||
$validated = !$seenformat;
|
||||
$seenformat = true;
|
||||
break;
|
||||
default:
|
||||
# Most other things appear to be empty or numeric...
|
||||
$validated = ( $value === false || is_numeric( trim( $value ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1922,18 +1922,18 @@ class PPNode_Hash_Tree implements PPNode {
|
|||
continue;
|
||||
}
|
||||
switch ( $child[self::NAME] ) {
|
||||
case 'name':
|
||||
$bits['name'] = new self( $children, $i );
|
||||
break;
|
||||
case 'attr':
|
||||
$bits['attr'] = new self( $children, $i );
|
||||
break;
|
||||
case 'inner':
|
||||
$bits['inner'] = new self( $children, $i );
|
||||
break;
|
||||
case 'close':
|
||||
$bits['close'] = new self( $children, $i );
|
||||
break;
|
||||
case 'name':
|
||||
$bits['name'] = new self( $children, $i );
|
||||
break;
|
||||
case 'attr':
|
||||
$bits['attr'] = new self( $children, $i );
|
||||
break;
|
||||
case 'inner':
|
||||
$bits['inner'] = new self( $children, $i );
|
||||
break;
|
||||
case 'close':
|
||||
$bits['close'] = new self( $children, $i );
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( !isset( $bits['name'] ) ) {
|
||||
|
|
@ -2001,15 +2001,15 @@ class PPNode_Hash_Tree implements PPNode {
|
|||
continue;
|
||||
}
|
||||
switch ( $child[self::NAME] ) {
|
||||
case 'title':
|
||||
$bits['title'] = new self( $children, $i );
|
||||
break;
|
||||
case 'part':
|
||||
$parts[] = new self( $children, $i );
|
||||
break;
|
||||
case '@lineStart':
|
||||
$bits['lineStart'] = '1';
|
||||
break;
|
||||
case 'title':
|
||||
$bits['title'] = new self( $children, $i );
|
||||
break;
|
||||
case 'part':
|
||||
$parts[] = new self( $children, $i );
|
||||
break;
|
||||
case '@lineStart':
|
||||
$bits['lineStart'] = '1';
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( !isset( $bits['title'] ) ) {
|
||||
|
|
|
|||
|
|
@ -112,11 +112,11 @@ abstract class SearchEngine {
|
|||
*/
|
||||
public function supports( $feature ) {
|
||||
switch ( $feature ) {
|
||||
case 'search-update':
|
||||
return true;
|
||||
case 'title-suffix-filter':
|
||||
default:
|
||||
return false;
|
||||
case 'search-update':
|
||||
return true;
|
||||
case 'title-suffix-filter':
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -209,10 +209,10 @@ class SearchMySQL extends SearchDatabase {
|
|||
|
||||
public function supports( $feature ) {
|
||||
switch ( $feature ) {
|
||||
case 'title-suffix-filter':
|
||||
return true;
|
||||
default:
|
||||
return parent::supports( $feature );
|
||||
case 'title-suffix-filter':
|
||||
return true;
|
||||
default:
|
||||
return parent::supports( $feature );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -182,44 +182,44 @@ abstract class BaseTemplate extends QuickTemplate {
|
|||
continue;
|
||||
}
|
||||
switch ( $boxName ) {
|
||||
case 'SEARCH':
|
||||
// Search is a special case, skins should custom implement this
|
||||
$boxes[$boxName] = [
|
||||
'id' => 'p-search',
|
||||
'header' => $this->getMsg( 'search' )->text(),
|
||||
'generated' => false,
|
||||
'content' => true,
|
||||
];
|
||||
break;
|
||||
case 'TOOLBOX':
|
||||
$msgObj = $this->getMsg( 'toolbox' );
|
||||
$boxes[$boxName] = [
|
||||
'id' => 'p-tb',
|
||||
'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
|
||||
'generated' => false,
|
||||
'content' => $this->getToolbox(),
|
||||
];
|
||||
break;
|
||||
case 'LANGUAGES':
|
||||
if ( $this->data['language_urls'] !== false ) {
|
||||
$msgObj = $this->getMsg( 'otherlanguages' );
|
||||
case 'SEARCH':
|
||||
// Search is a special case, skins should custom implement this
|
||||
$boxes[$boxName] = [
|
||||
'id' => 'p-lang',
|
||||
'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
|
||||
'id' => 'p-search',
|
||||
'header' => $this->getMsg( 'search' )->text(),
|
||||
'generated' => false,
|
||||
'content' => $this->data['language_urls'] ?: [],
|
||||
'content' => true,
|
||||
];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$msgObj = $this->getMsg( $boxName );
|
||||
$boxes[$boxName] = [
|
||||
'id' => "p-$boxName",
|
||||
'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
|
||||
'generated' => true,
|
||||
'content' => $content,
|
||||
];
|
||||
break;
|
||||
break;
|
||||
case 'TOOLBOX':
|
||||
$msgObj = $this->getMsg( 'toolbox' );
|
||||
$boxes[$boxName] = [
|
||||
'id' => 'p-tb',
|
||||
'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
|
||||
'generated' => false,
|
||||
'content' => $this->getToolbox(),
|
||||
];
|
||||
break;
|
||||
case 'LANGUAGES':
|
||||
if ( $this->data['language_urls'] !== false ) {
|
||||
$msgObj = $this->getMsg( 'otherlanguages' );
|
||||
$boxes[$boxName] = [
|
||||
'id' => 'p-lang',
|
||||
'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
|
||||
'generated' => false,
|
||||
'content' => $this->data['language_urls'] ?: [],
|
||||
];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$msgObj = $this->getMsg( $boxName );
|
||||
$boxes[$boxName] = [
|
||||
'id' => "p-$boxName",
|
||||
'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
|
||||
'generated' => true,
|
||||
'content' => $content,
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -354,18 +354,18 @@ class ClassCollector {
|
|||
// Note: When changing class name discovery logic,
|
||||
// AutoLoaderTest.php may also need to be updated.
|
||||
switch ( $token[0] ) {
|
||||
case T_NAMESPACE:
|
||||
case T_CLASS:
|
||||
case T_INTERFACE:
|
||||
case T_TRAIT:
|
||||
case T_DOUBLE_COLON:
|
||||
$this->startToken = $token;
|
||||
break;
|
||||
case T_STRING:
|
||||
if ( $token[1] === 'class_alias' ) {
|
||||
case T_NAMESPACE:
|
||||
case T_CLASS:
|
||||
case T_INTERFACE:
|
||||
case T_TRAIT:
|
||||
case T_DOUBLE_COLON:
|
||||
$this->startToken = $token;
|
||||
$this->alias = [];
|
||||
}
|
||||
break;
|
||||
case T_STRING:
|
||||
if ( $token[1] === 'class_alias' ) {
|
||||
$this->startToken = $token;
|
||||
$this->alias = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -376,78 +376,78 @@ class ClassCollector {
|
|||
*/
|
||||
protected function tryEndExpect( $token ) {
|
||||
switch ( $this->startToken[0] ) {
|
||||
case T_DOUBLE_COLON:
|
||||
// Skip over T_CLASS after T_DOUBLE_COLON because this is something like
|
||||
// "self::static" which accesses the class name. It doens't define a new class.
|
||||
$this->startToken = null;
|
||||
break;
|
||||
case T_NAMESPACE:
|
||||
if ( $token === ';' || $token === '{' ) {
|
||||
$this->namespace = $this->implodeTokens() . '\\';
|
||||
} else {
|
||||
$this->tokens[] = $token;
|
||||
}
|
||||
break;
|
||||
|
||||
case T_STRING:
|
||||
if ( $this->alias !== null ) {
|
||||
// Flow 1 - Two string literals:
|
||||
// - T_STRING class_alias
|
||||
// - '('
|
||||
// - T_CONSTANT_ENCAPSED_STRING 'TargetClass'
|
||||
// - ','
|
||||
// - T_WHITESPACE
|
||||
// - T_CONSTANT_ENCAPSED_STRING 'AliasName'
|
||||
// - ')'
|
||||
// Flow 2 - Use of ::class syntax for first parameter
|
||||
// - T_STRING class_alias
|
||||
// - '('
|
||||
// - T_STRING TargetClass
|
||||
// - T_DOUBLE_COLON ::
|
||||
// - T_CLASS class
|
||||
// - ','
|
||||
// - T_WHITESPACE
|
||||
// - T_CONSTANT_ENCAPSED_STRING 'AliasName'
|
||||
// - ')'
|
||||
if ( $token === '(' ) {
|
||||
// Start of a function call to class_alias()
|
||||
$this->alias = [ 'target' => false, 'name' => false ];
|
||||
} elseif ( $token === ',' ) {
|
||||
// Record that we're past the first parameter
|
||||
if ( $this->alias['target'] === false ) {
|
||||
$this->alias['target'] = true;
|
||||
}
|
||||
} elseif ( is_array( $token ) && $token[0] === T_CONSTANT_ENCAPSED_STRING ) {
|
||||
if ( $this->alias['target'] === true ) {
|
||||
// We already saw a first argument, this must be the second.
|
||||
// Strip quotes from the string literal.
|
||||
$this->alias['name'] = substr( $token[1], 1, -1 );
|
||||
}
|
||||
} elseif ( $token === ')' ) {
|
||||
// End of function call
|
||||
$this->classes[] = $this->alias['name'];
|
||||
$this->alias = null;
|
||||
$this->startToken = null;
|
||||
} elseif ( !is_array( $token ) || (
|
||||
$token[0] !== T_STRING &&
|
||||
$token[0] !== T_DOUBLE_COLON &&
|
||||
$token[0] !== T_CLASS &&
|
||||
$token[0] !== T_WHITESPACE
|
||||
) ) {
|
||||
// Ignore this call to class_alias() - compat/Timestamp.php
|
||||
$this->alias = null;
|
||||
$this->startToken = null;
|
||||
case T_DOUBLE_COLON:
|
||||
// Skip over T_CLASS after T_DOUBLE_COLON because this is something like
|
||||
// "self::static" which accesses the class name. It doens't define a new class.
|
||||
$this->startToken = null;
|
||||
break;
|
||||
case T_NAMESPACE:
|
||||
if ( $token === ';' || $token === '{' ) {
|
||||
$this->namespace = $this->implodeTokens() . '\\';
|
||||
} else {
|
||||
$this->tokens[] = $token;
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case T_CLASS:
|
||||
case T_INTERFACE:
|
||||
case T_TRAIT:
|
||||
$this->tokens[] = $token;
|
||||
if ( is_array( $token ) && $token[0] === T_STRING ) {
|
||||
$this->classes[] = $this->namespace . $this->implodeTokens();
|
||||
}
|
||||
case T_STRING:
|
||||
if ( $this->alias !== null ) {
|
||||
// Flow 1 - Two string literals:
|
||||
// - T_STRING class_alias
|
||||
// - '('
|
||||
// - T_CONSTANT_ENCAPSED_STRING 'TargetClass'
|
||||
// - ','
|
||||
// - T_WHITESPACE
|
||||
// - T_CONSTANT_ENCAPSED_STRING 'AliasName'
|
||||
// - ')'
|
||||
// Flow 2 - Use of ::class syntax for first parameter
|
||||
// - T_STRING class_alias
|
||||
// - '('
|
||||
// - T_STRING TargetClass
|
||||
// - T_DOUBLE_COLON ::
|
||||
// - T_CLASS class
|
||||
// - ','
|
||||
// - T_WHITESPACE
|
||||
// - T_CONSTANT_ENCAPSED_STRING 'AliasName'
|
||||
// - ')'
|
||||
if ( $token === '(' ) {
|
||||
// Start of a function call to class_alias()
|
||||
$this->alias = [ 'target' => false, 'name' => false ];
|
||||
} elseif ( $token === ',' ) {
|
||||
// Record that we're past the first parameter
|
||||
if ( $this->alias['target'] === false ) {
|
||||
$this->alias['target'] = true;
|
||||
}
|
||||
} elseif ( is_array( $token ) && $token[0] === T_CONSTANT_ENCAPSED_STRING ) {
|
||||
if ( $this->alias['target'] === true ) {
|
||||
// We already saw a first argument, this must be the second.
|
||||
// Strip quotes from the string literal.
|
||||
$this->alias['name'] = substr( $token[1], 1, -1 );
|
||||
}
|
||||
} elseif ( $token === ')' ) {
|
||||
// End of function call
|
||||
$this->classes[] = $this->alias['name'];
|
||||
$this->alias = null;
|
||||
$this->startToken = null;
|
||||
} elseif ( !is_array( $token ) || (
|
||||
$token[0] !== T_STRING &&
|
||||
$token[0] !== T_DOUBLE_COLON &&
|
||||
$token[0] !== T_CLASS &&
|
||||
$token[0] !== T_WHITESPACE
|
||||
) ) {
|
||||
// Ignore this call to class_alias() - compat/Timestamp.php
|
||||
$this->alias = null;
|
||||
$this->startToken = null;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case T_CLASS:
|
||||
case T_INTERFACE:
|
||||
case T_TRAIT:
|
||||
$this->tokens[] = $token;
|
||||
if ( is_array( $token ) && $token[0] === T_STRING ) {
|
||||
$this->classes[] = $this->namespace . $this->implodeTokens();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,133 +37,133 @@ class AvroValidator {
|
|||
*/
|
||||
public static function getErrors( AvroSchema $schema, $datum ) {
|
||||
switch ( $schema->type ) {
|
||||
case AvroSchema::NULL_TYPE:
|
||||
if ( !is_null( $datum ) ) {
|
||||
return self::wrongType( 'null', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::BOOLEAN_TYPE:
|
||||
if ( !is_bool( $datum ) ) {
|
||||
return self::wrongType( 'boolean', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::STRING_TYPE:
|
||||
case AvroSchema::BYTES_TYPE:
|
||||
if ( !is_string( $datum ) ) {
|
||||
return self::wrongType( 'string', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::INT_TYPE:
|
||||
if ( !is_int( $datum ) ) {
|
||||
return self::wrongType( 'integer', $datum );
|
||||
}
|
||||
if ( AvroSchema::INT_MIN_VALUE > $datum
|
||||
|| $datum > AvroSchema::INT_MAX_VALUE
|
||||
) {
|
||||
return self::outOfRange(
|
||||
AvroSchema::INT_MIN_VALUE,
|
||||
AvroSchema::INT_MAX_VALUE,
|
||||
$datum
|
||||
);
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::LONG_TYPE:
|
||||
if ( !is_int( $datum ) ) {
|
||||
return self::wrongType( 'integer', $datum );
|
||||
}
|
||||
if ( AvroSchema::LONG_MIN_VALUE > $datum
|
||||
|| $datum > AvroSchema::LONG_MAX_VALUE
|
||||
) {
|
||||
return self::outOfRange(
|
||||
AvroSchema::LONG_MIN_VALUE,
|
||||
AvroSchema::LONG_MAX_VALUE,
|
||||
$datum
|
||||
);
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::FLOAT_TYPE:
|
||||
case AvroSchema::DOUBLE_TYPE:
|
||||
if ( !is_float( $datum ) && !is_int( $datum ) ) {
|
||||
return self::wrongType( 'float or integer', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::ARRAY_SCHEMA:
|
||||
if ( !is_array( $datum ) ) {
|
||||
return self::wrongType( 'array', $datum );
|
||||
}
|
||||
$errors = [];
|
||||
foreach ( $datum as $d ) {
|
||||
$result = self::getErrors( $schema->items(), $d );
|
||||
if ( $result ) {
|
||||
case AvroSchema::NULL_TYPE:
|
||||
if ( !is_null( $datum ) ) {
|
||||
return self::wrongType( 'null', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::BOOLEAN_TYPE:
|
||||
if ( !is_bool( $datum ) ) {
|
||||
return self::wrongType( 'boolean', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::STRING_TYPE:
|
||||
case AvroSchema::BYTES_TYPE:
|
||||
if ( !is_string( $datum ) ) {
|
||||
return self::wrongType( 'string', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::INT_TYPE:
|
||||
if ( !is_int( $datum ) ) {
|
||||
return self::wrongType( 'integer', $datum );
|
||||
}
|
||||
if ( AvroSchema::INT_MIN_VALUE > $datum
|
||||
|| $datum > AvroSchema::INT_MAX_VALUE
|
||||
) {
|
||||
return self::outOfRange(
|
||||
AvroSchema::INT_MIN_VALUE,
|
||||
AvroSchema::INT_MAX_VALUE,
|
||||
$datum
|
||||
);
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::LONG_TYPE:
|
||||
if ( !is_int( $datum ) ) {
|
||||
return self::wrongType( 'integer', $datum );
|
||||
}
|
||||
if ( AvroSchema::LONG_MIN_VALUE > $datum
|
||||
|| $datum > AvroSchema::LONG_MAX_VALUE
|
||||
) {
|
||||
return self::outOfRange(
|
||||
AvroSchema::LONG_MIN_VALUE,
|
||||
AvroSchema::LONG_MAX_VALUE,
|
||||
$datum
|
||||
);
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::FLOAT_TYPE:
|
||||
case AvroSchema::DOUBLE_TYPE:
|
||||
if ( !is_float( $datum ) && !is_int( $datum ) ) {
|
||||
return self::wrongType( 'float or integer', $datum );
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::ARRAY_SCHEMA:
|
||||
if ( !is_array( $datum ) ) {
|
||||
return self::wrongType( 'array', $datum );
|
||||
}
|
||||
$errors = [];
|
||||
foreach ( $datum as $d ) {
|
||||
$result = self::getErrors( $schema->items(), $d );
|
||||
if ( $result ) {
|
||||
$errors[] = $result;
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
case AvroSchema::MAP_SCHEMA:
|
||||
if ( !is_array( $datum ) ) {
|
||||
return self::wrongType( 'array', $datum );
|
||||
}
|
||||
$errors = [];
|
||||
foreach ( $datum as $k => $v ) {
|
||||
if ( !is_string( $k ) ) {
|
||||
$errors[] = self::wrongType( 'string key', $k );
|
||||
}
|
||||
$result = self::getErrors( $schema->values(), $v );
|
||||
if ( $result ) {
|
||||
$errors[$k] = $result;
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
case AvroSchema::UNION_SCHEMA:
|
||||
$errors = [];
|
||||
foreach ( $schema->schemas() as $schema ) {
|
||||
$result = self::getErrors( $schema, $datum );
|
||||
if ( !$result ) {
|
||||
return [];
|
||||
}
|
||||
$errors[] = $result;
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
case AvroSchema::MAP_SCHEMA:
|
||||
if ( !is_array( $datum ) ) {
|
||||
return self::wrongType( 'array', $datum );
|
||||
}
|
||||
$errors = [];
|
||||
foreach ( $datum as $k => $v ) {
|
||||
if ( !is_string( $k ) ) {
|
||||
$errors[] = self::wrongType( 'string key', $k );
|
||||
if ( $errors ) {
|
||||
return [ "Expected any one of these to be true", $errors ];
|
||||
}
|
||||
$result = self::getErrors( $schema->values(), $v );
|
||||
if ( $result ) {
|
||||
$errors[$k] = $result;
|
||||
return "No schemas provided to union";
|
||||
case AvroSchema::ENUM_SCHEMA:
|
||||
if ( !in_array( $datum, $schema->symbols() ) ) {
|
||||
$symbols = implode( ', ', $schema->symbols );
|
||||
return "Expected one of $symbols but recieved $datum";
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
case AvroSchema::UNION_SCHEMA:
|
||||
$errors = [];
|
||||
foreach ( $schema->schemas() as $schema ) {
|
||||
$result = self::getErrors( $schema, $datum );
|
||||
if ( !$result ) {
|
||||
return [];
|
||||
return [];
|
||||
case AvroSchema::FIXED_SCHEMA:
|
||||
if ( !is_string( $datum ) ) {
|
||||
return self::wrongType( 'string', $datum );
|
||||
}
|
||||
$errors[] = $result;
|
||||
}
|
||||
if ( $errors ) {
|
||||
return [ "Expected any one of these to be true", $errors ];
|
||||
}
|
||||
return "No schemas provided to union";
|
||||
case AvroSchema::ENUM_SCHEMA:
|
||||
if ( !in_array( $datum, $schema->symbols() ) ) {
|
||||
$symbols = implode( ', ', $schema->symbols );
|
||||
return "Expected one of $symbols but recieved $datum";
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::FIXED_SCHEMA:
|
||||
if ( !is_string( $datum ) ) {
|
||||
return self::wrongType( 'string', $datum );
|
||||
}
|
||||
$len = strlen( $datum );
|
||||
if ( $len !== $schema->size() ) {
|
||||
return "Expected string of length {$schema->size()}, "
|
||||
. "but recieved one of length $len";
|
||||
}
|
||||
return [];
|
||||
case AvroSchema::RECORD_SCHEMA:
|
||||
case AvroSchema::ERROR_SCHEMA:
|
||||
case AvroSchema::REQUEST_SCHEMA:
|
||||
if ( !is_array( $datum ) ) {
|
||||
return self::wrongType( 'array', $datum );
|
||||
}
|
||||
$errors = [];
|
||||
foreach ( $schema->fields() as $field ) {
|
||||
$name = $field->name();
|
||||
if ( !array_key_exists( $name, $datum ) ) {
|
||||
$errors[$name] = 'Missing expected field';
|
||||
continue;
|
||||
$len = strlen( $datum );
|
||||
if ( $len !== $schema->size() ) {
|
||||
return "Expected string of length {$schema->size()}, "
|
||||
. "but recieved one of length $len";
|
||||
}
|
||||
$result = self::getErrors( $field->type(), $datum[$name] );
|
||||
if ( $result ) {
|
||||
$errors[$name] = $result;
|
||||
return [];
|
||||
case AvroSchema::RECORD_SCHEMA:
|
||||
case AvroSchema::ERROR_SCHEMA:
|
||||
case AvroSchema::REQUEST_SCHEMA:
|
||||
if ( !is_array( $datum ) ) {
|
||||
return self::wrongType( 'array', $datum );
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
default:
|
||||
return "Unknown avro schema type: {$schema->type}";
|
||||
$errors = [];
|
||||
foreach ( $schema->fields() as $field ) {
|
||||
$name = $field->name();
|
||||
if ( !array_key_exists( $name, $datum ) ) {
|
||||
$errors[$name] = 'Missing expected field';
|
||||
continue;
|
||||
}
|
||||
$result = self::getErrors( $field->type(), $datum[$name] );
|
||||
if ( $result ) {
|
||||
$errors[$name] = $result;
|
||||
}
|
||||
}
|
||||
return $errors;
|
||||
default:
|
||||
return "Unknown avro schema type: {$schema->type}";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3117,18 +3117,18 @@ class Language {
|
|||
*/
|
||||
function getArrow( $direction = 'forwards' ) {
|
||||
switch ( $direction ) {
|
||||
case 'forwards':
|
||||
return $this->isRTL() ? '←' : '→';
|
||||
case 'backwards':
|
||||
return $this->isRTL() ? '→' : '←';
|
||||
case 'left':
|
||||
return '←';
|
||||
case 'right':
|
||||
return '→';
|
||||
case 'up':
|
||||
return '↑';
|
||||
case 'down':
|
||||
return '↓';
|
||||
case 'forwards':
|
||||
return $this->isRTL() ? '←' : '→';
|
||||
case 'backwards':
|
||||
return $this->isRTL() ? '→' : '←';
|
||||
case 'left':
|
||||
return '←';
|
||||
case 'right':
|
||||
return '→';
|
||||
case 'up':
|
||||
return '↑';
|
||||
case 'down':
|
||||
return '↓';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,30 +43,30 @@ class LanguageGa extends Language {
|
|||
}
|
||||
|
||||
switch ( $case ) {
|
||||
case 'ainmlae':
|
||||
switch ( $word ) {
|
||||
case 'an Domhnach':
|
||||
$word = 'Dé Domhnaigh';
|
||||
break;
|
||||
case 'an Luan':
|
||||
$word = 'Dé Luain';
|
||||
break;
|
||||
case 'an Mháirt':
|
||||
$word = 'Dé Mháirt';
|
||||
break;
|
||||
case 'an Chéadaoin':
|
||||
$word = 'Dé Chéadaoin';
|
||||
break;
|
||||
case 'an Déardaoin':
|
||||
$word = 'Déardaoin';
|
||||
break;
|
||||
case 'an Aoine':
|
||||
$word = 'Dé hAoine';
|
||||
break;
|
||||
case 'an Satharn':
|
||||
$word = 'Dé Sathairn';
|
||||
break;
|
||||
}
|
||||
case 'ainmlae':
|
||||
switch ( $word ) {
|
||||
case 'an Domhnach':
|
||||
$word = 'Dé Domhnaigh';
|
||||
break;
|
||||
case 'an Luan':
|
||||
$word = 'Dé Luain';
|
||||
break;
|
||||
case 'an Mháirt':
|
||||
$word = 'Dé Mháirt';
|
||||
break;
|
||||
case 'an Chéadaoin':
|
||||
$word = 'Dé Chéadaoin';
|
||||
break;
|
||||
case 'an Déardaoin':
|
||||
$word = 'Déardaoin';
|
||||
break;
|
||||
case 'an Aoine':
|
||||
$word = 'Dé hAoine';
|
||||
break;
|
||||
case 'an Satharn':
|
||||
$word = 'Dé Sathairn';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $word;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,65 +47,65 @@ class LanguageLa extends Language {
|
|||
}
|
||||
|
||||
switch ( $case ) {
|
||||
case 'genitive':
|
||||
// only a few declensions, and even for those mostly the singular only
|
||||
$in = [
|
||||
'/u[ms]$/', # 2nd declension singular
|
||||
'/ommunia$/', # 3rd declension neuter plural (partly)
|
||||
'/a$/', # 1st declension singular
|
||||
'/libri$/', '/nuntii$/', '/datae$/', # 2nd declension plural (partly)
|
||||
'/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
|
||||
'/es$/' # 5th declension singular
|
||||
];
|
||||
$out = [
|
||||
'i',
|
||||
'ommunium',
|
||||
'ae',
|
||||
'librorum', 'nuntiorum', 'datorum',
|
||||
'tionis', 'ntis', 'atis',
|
||||
'ei'
|
||||
];
|
||||
return preg_replace( $in, $out, $word );
|
||||
case 'accusative':
|
||||
// only a few declensions, and even for those mostly the singular only
|
||||
$in = [
|
||||
'/u[ms]$/', # 2nd declension singular
|
||||
'/a$/', # 1st declension singular
|
||||
'/ommuniam$/', # 3rd declension neuter plural (partly)
|
||||
'/libri$/', '/nuntii$/', '/datam$/', # 2nd declension plural (partly)
|
||||
'/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
|
||||
'/es$/' # 5th declension singular
|
||||
];
|
||||
$out = [
|
||||
'um',
|
||||
'am',
|
||||
'ommunia',
|
||||
'libros', 'nuntios', 'data',
|
||||
'tionem', 'ntem', 'atem',
|
||||
'em'
|
||||
];
|
||||
return preg_replace( $in, $out, $word );
|
||||
case 'ablative':
|
||||
// only a few declensions, and even for those mostly the singular only
|
||||
$in = [
|
||||
'/u[ms]$/', # 2nd declension singular
|
||||
'/ommunia$/', # 3rd declension neuter plural (partly)
|
||||
'/a$/', # 1st declension singular
|
||||
'/libri$/', '/nuntii$/', '/data$/', # 2nd declension plural (partly)
|
||||
'/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
|
||||
'/es$/' # 5th declension singular
|
||||
];
|
||||
$out = [
|
||||
'o',
|
||||
'ommunibus',
|
||||
'a',
|
||||
'libris', 'nuntiis', 'datis',
|
||||
'tione', 'nte', 'ate',
|
||||
'e'
|
||||
];
|
||||
return preg_replace( $in, $out, $word );
|
||||
default:
|
||||
return $word;
|
||||
case 'genitive':
|
||||
// only a few declensions, and even for those mostly the singular only
|
||||
$in = [
|
||||
'/u[ms]$/', # 2nd declension singular
|
||||
'/ommunia$/', # 3rd declension neuter plural (partly)
|
||||
'/a$/', # 1st declension singular
|
||||
'/libri$/', '/nuntii$/', '/datae$/', # 2nd declension plural (partly)
|
||||
'/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
|
||||
'/es$/' # 5th declension singular
|
||||
];
|
||||
$out = [
|
||||
'i',
|
||||
'ommunium',
|
||||
'ae',
|
||||
'librorum', 'nuntiorum', 'datorum',
|
||||
'tionis', 'ntis', 'atis',
|
||||
'ei'
|
||||
];
|
||||
return preg_replace( $in, $out, $word );
|
||||
case 'accusative':
|
||||
// only a few declensions, and even for those mostly the singular only
|
||||
$in = [
|
||||
'/u[ms]$/', # 2nd declension singular
|
||||
'/a$/', # 1st declension singular
|
||||
'/ommuniam$/', # 3rd declension neuter plural (partly)
|
||||
'/libri$/', '/nuntii$/', '/datam$/', # 2nd declension plural (partly)
|
||||
'/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
|
||||
'/es$/' # 5th declension singular
|
||||
];
|
||||
$out = [
|
||||
'um',
|
||||
'am',
|
||||
'ommunia',
|
||||
'libros', 'nuntios', 'data',
|
||||
'tionem', 'ntem', 'atem',
|
||||
'em'
|
||||
];
|
||||
return preg_replace( $in, $out, $word );
|
||||
case 'ablative':
|
||||
// only a few declensions, and even for those mostly the singular only
|
||||
$in = [
|
||||
'/u[ms]$/', # 2nd declension singular
|
||||
'/ommunia$/', # 3rd declension neuter plural (partly)
|
||||
'/a$/', # 1st declension singular
|
||||
'/libri$/', '/nuntii$/', '/data$/', # 2nd declension plural (partly)
|
||||
'/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
|
||||
'/es$/' # 5th declension singular
|
||||
];
|
||||
$out = [
|
||||
'o',
|
||||
'ommunibus',
|
||||
'a',
|
||||
'libris', 'nuntiis', 'datis',
|
||||
'tione', 'nte', 'ate',
|
||||
'e'
|
||||
];
|
||||
return preg_replace( $in, $out, $word );
|
||||
default:
|
||||
return $word;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -708,15 +708,15 @@ class ParserTestRunner {
|
|||
public function meetsRequirements( $requirements ) {
|
||||
foreach ( $requirements as $requirement ) {
|
||||
switch ( $requirement['type'] ) {
|
||||
case 'hook':
|
||||
$ok = $this->requireHook( $requirement['name'] );
|
||||
break;
|
||||
case 'functionHook':
|
||||
$ok = $this->requireFunctionHook( $requirement['name'] );
|
||||
break;
|
||||
case 'transparentHook':
|
||||
$ok = $this->requireTransparentHook( $requirement['name'] );
|
||||
break;
|
||||
case 'hook':
|
||||
$ok = $this->requireHook( $requirement['name'] );
|
||||
break;
|
||||
case 'functionHook':
|
||||
$ok = $this->requireFunctionHook( $requirement['name'] );
|
||||
break;
|
||||
case 'transparentHook':
|
||||
$ok = $this->requireTransparentHook( $requirement['name'] );
|
||||
break;
|
||||
}
|
||||
if ( !$ok ) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -162,18 +162,18 @@ class TestFileEditor {
|
|||
if ( isset( $changes[$sectionName] ) ) {
|
||||
$change = $changes[$sectionName];
|
||||
switch ( $change['op'] ) {
|
||||
case 'rename':
|
||||
$test[$i]['name'] = $change['value'];
|
||||
$test[$i]['headingLine'] = "!! {$change['value']}";
|
||||
break;
|
||||
case 'update':
|
||||
$test[$i]['contents'] = $change['value'];
|
||||
break;
|
||||
case 'delete':
|
||||
$test[$i]['deleted'] = true;
|
||||
break;
|
||||
default:
|
||||
throw new Exception( "Unknown op: ${change['op']}" );
|
||||
case 'rename':
|
||||
$test[$i]['name'] = $change['value'];
|
||||
$test[$i]['headingLine'] = "!! {$change['value']}";
|
||||
break;
|
||||
case 'update':
|
||||
$test[$i]['contents'] = $change['value'];
|
||||
break;
|
||||
case 'delete':
|
||||
$test[$i]['deleted'] = true;
|
||||
break;
|
||||
default:
|
||||
throw new Exception( "Unknown op: ${change['op']}" );
|
||||
}
|
||||
// Acknowledge
|
||||
// Note that we use the old section name for the rename op
|
||||
|
|
|
|||
Loading…
Reference in a new issue