* @ingroup Parser
*/
class DateFormatter {
- public $mSource, $mTarget;
- public $monthNames = '', $rxDM, $rxMD, $rxDMY, $rxYDM, $rxMDY, $rxYMD;
+ private $mSource, $mTarget;
+ private $monthNames = '';
- public $regexes, $pDays, $pMonths, $pYears;
- public $rules, $xMonths, $preferences;
+ private $regexes;
+ private $rules, $xMonths, $preferences;
- protected $lang, $mLinked;
+ private $lang, $mLinked;
+
+ /** @var string[] */
+ private $keys;
+
+ /** @var string[] */
+ private $targets;
const ALL = -1;
const NONE = 0;
$this->targets[self::ISO2] = '[[y-m-d]]';
# Rules
- # pref source target
+ # pref source target
$this->rules[self::DMY][self::MD] = self::DM;
$this->rules[self::ALL][self::MD] = self::MD;
$this->rules[self::MDY][self::DM] = self::MD;
$this->rules[self::ALL][self::DM] = self::DM;
$this->rules[self::NONE][self::ISO2] = self::ISO1;
- $this->preferences = array(
+ $this->preferences = [
'default' => self::NONE,
'dmy' => self::DMY,
'mdy' => self::MDY,
'ymd' => self::YMD,
'ISO 8601' => self::ISO1,
- );
+ ];
}
/**
* Get a DateFormatter object
*
* @param Language|string|null $lang In which language to format the date
- * Defaults to the site content language
+ * Defaults to the site content language
* @return DateFormatter
*/
public static function getInstance( $lang = null ) {
global $wgContLang, $wgMainCacheType;
$lang = $lang ? wfGetLangObj( $lang ) : $wgContLang;
- $cache = ObjectCache::newAccelerator( $wgMainCacheType );
+ $cache = ObjectCache::getLocalServerInstance( $wgMainCacheType );
static $dateFormatter = false;
if ( !$dateFormatter ) {
*
* @return string
*/
- public function reformat( $preference, $text, $options = array( 'linked' ) ) {
+ public function reformat( $preference, $text, $options = [ 'linked' ] ) {
$linked = in_array( 'linked', $options );
$match_whole = in_array( 'match-whole', $options );
// Horrible hack
if ( !$linked ) {
- $regex = str_replace( array( '\[\[', '\]\]' ), '', $regex );
+ $regex = str_replace( [ '\[\[', '\]\]' ], '', $regex );
}
if ( $match_whole ) {
// Another horrible hack
$this->mLinked = $linked;
- $text = preg_replace_callback( $regex, array( &$this, 'replace' ), $text );
+ $text = preg_replace_callback( $regex, [ $this, 'replace' ], $text );
unset( $this->mLinked );
}
return $text;
}
/**
+ * Regexp replacement callback
+ *
* @param array $matches
* @return string
*/
- public function replace( $matches ) {
+ private function replace( $matches ) {
# Extract information from $matches
$linked = true;
if ( isset( $this->mLinked ) ) {
$linked = $this->mLinked;
}
- $bits = array();
+ $bits = [];
$key = $this->keys[$this->mSource];
$keyLength = strlen( $key );
for ( $p = 0; $p < $keyLength; $p++ ) {
}
}
- return $this->formatDate( $bits, $linked );
+ return $this->formatDate( $bits, $matches[0], $linked );
}
/**
* @param array $bits
+ * @param string $orig Original input string, to be returned
+ * on formatting failure.
* @param bool $link
* @return string
*/
- public function formatDate( $bits, $link = true ) {
+ private function formatDate( $bits, $orig, $link = true ) {
$format = $this->targets[$this->mTarget];
if ( !$link ) {
// strip piped links
$format = preg_replace( '/\[\[[^|]+\|([^\]]+)\]\]/', '$1', $format );
// strip remaining links
- $format = str_replace( array( '[[', ']]' ), '', $format );
+ $format = str_replace( [ '[[', ']]' ], '', $format );
}
# Construct new date
}
}
if ( $fail ) {
- /** @todo FIXME: $matches doesn't exist here, what's expected? */
- $text = $matches[0];
+ // This occurs when parsing a date with day or month outside the bounds
+ // of possibilities.
+ $text = $orig;
}
- $isoBits = array();
+ $isoBits = [];
if ( isset( $bits['y'] ) ) {
$isoBits[] = $bits['y'];
}
// Output is not strictly HTML (it's wikitext), but <span> is whitelisted.
$text = Html::rawElement( 'span',
- array( 'class' => 'mw-formatted-date', 'title' => $isoDate ), $text );
+ [ 'class' => 'mw-formatted-date', 'title' => $isoDate ], $text );
return $text;
}
* Return a regex that can be used to find month names in string
* @return string regex to find the months with
*/
- public function getMonthRegex() {
- $names = array();
+ private function getMonthRegex() {
+ $names = [];
for ( $i = 1; $i <= 12; $i++ ) {
$names[] = $this->lang->getMonthName( $i );
$names[] = $this->lang->getMonthAbbreviation( $i );
* @param string $monthName Month name
* @return string ISO month name
*/
- public function makeIsoMonth( $monthName ) {
+ private function makeIsoMonth( $monthName ) {
$n = $this->xMonths[$this->lang->lc( $monthName )];
return sprintf( '%02d', $n );
}
* @param string $year Year name
* @return string ISO year name
*/
- public function makeIsoYear( $year ) {
+ private function makeIsoYear( $year ) {
# Assumes the year is in a nice format, as enforced by the regex
if ( substr( $year, -2 ) == 'BC' ) {
$num = intval( substr( $year, 0, -3 ) ) - 1;
* @return int|string int representing year number in case of AD dates, or string containing
* year number and 'BC' at the end otherwise.
*/
- public function makeNormalYear( $iso ) {
+ private function makeNormalYear( $iso ) {
if ( $iso[0] == '-' ) {
$text = ( intval( substr( $iso, 1 ) ) + 1 ) . ' BC';
} else {