1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
<?php
declare( strict_types = 1 );
namespace MediaWiki\Extension\Translate\Validation;
use InvalidArgumentException;
use MediaWiki\Extension\Translate\Validation\Validators\BraceBalanceValidator;
use MediaWiki\Extension\Translate\Validation\Validators\EscapeCharacterValidator;
use MediaWiki\Extension\Translate\Validation\Validators\GettextNewlineValidator;
use MediaWiki\Extension\Translate\Validation\Validators\GettextPluralValidator;
use MediaWiki\Extension\Translate\Validation\Validators\InsertableRegexValidator;
use MediaWiki\Extension\Translate\Validation\Validators\InsertableRubyVariableValidator;
use MediaWiki\Extension\Translate\Validation\Validators\IosVariableValidator;
use MediaWiki\Extension\Translate\Validation\Validators\MatchSetValidator;
use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiLinkValidator;
use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPageNameValidator;
use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiParameterValidator;
use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPluralValidator;
use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiTimeListValidator;
use MediaWiki\Extension\Translate\Validation\Validators\NewlineValidator;
use MediaWiki\Extension\Translate\Validation\Validators\NotEmptyValidator;
use MediaWiki\Extension\Translate\Validation\Validators\NumericalParameterValidator;
use MediaWiki\Extension\Translate\Validation\Validators\PrintfValidator;
use MediaWiki\Extension\Translate\Validation\Validators\PythonInterpolationValidator;
use MediaWiki\Extension\Translate\Validation\Validators\ReplacementValidator;
use MediaWiki\Extension\Translate\Validation\Validators\SmartFormatPluralValidator;
use MediaWiki\Extension\Translate\Validation\Validators\UnicodePluralValidator;
use RuntimeException;
/**
* A factory class used to instantiate instances of pre-provided Validators
*
* @author Abijeet Patro
* @license GPL-2.0-or-later
* @since 2019.06
*/
class ValidatorFactory {
/** @var string[] */
protected static $validators = [
'BraceBalance' => BraceBalanceValidator::class,
'EscapeCharacter' => EscapeCharacterValidator::class,
'GettextNewline' => GettextNewlineValidator::class,
'GettextPlural' => GettextPluralValidator::class,
'InsertableRegex' => InsertableRegexValidator::class,
'InsertableRubyVariable' => InsertableRubyVariableValidator::class,
'IosVariable' => IosVariableValidator::class,
'MatchSet' => MatchSetValidator::class,
'MediaWikiLink' => MediaWikiLinkValidator::class,
'MediaWikiPageName' => MediaWikiPageNameValidator::class,
'MediaWikiParameter' => MediaWikiParameterValidator::class,
'MediaWikiPlural' => MediaWikiPluralValidator::class,
'MediaWikiTimeList' => MediaWikiTimeListValidator::class,
'Newline' => NewlineValidator::class,
'NotEmpty' => NotEmptyValidator::class,
'NumericalParameter' => NumericalParameterValidator::class,
'Printf' => PrintfValidator::class,
'PythonInterpolation' => PythonInterpolationValidator::class,
'Replacement' => ReplacementValidator::class,
'SmartFormatPlural' => SmartFormatPluralValidator::class,
'UnicodePlural' => UnicodePluralValidator::class,
// BC: remove when unused
'WikiLink' => MediaWikiLinkValidator::class,
// BC: remove when unused
'WikiParameter' => MediaWikiParameterValidator::class,
];
/**
* Returns a validator instance based on the id specified
*
* @param string $id Id of the pre-defined validator class
* @param mixed|null $params
* @throws InvalidArgumentException
* @return MessageValidator
*/
public static function get( $id, $params = null ) {
if ( !isset( self::$validators[ $id ] ) ) {
throw new InvalidArgumentException( "Could not find validator with id - '$id'. " );
}
return self::loadInstance( self::$validators[ $id ], $params );
}
/**
* Takes a Validator class name, and returns an instance of that class.
*
* @param string $class Custom validator class name
* @param mixed|null $params
* @throws InvalidArgumentException
* @return MessageValidator
*/
public static function loadInstance( $class, $params = null ): MessageValidator {
if ( !class_exists( $class ) ) {
throw new InvalidArgumentException( "Could not find validator class - '$class'. " );
}
return new $class( $params );
}
/**
* Adds / Updates available list of validators
* @param string $id Id of the validator
* @param string $validator Validator class name
* @param string $ns
*/
public static function set( $id, $validator, $ns = '\\' ) {
if ( !class_exists( $ns . $validator ) ) {
throw new RuntimeException( 'Could not find validator class - ' . $ns . $validator );
}
self::$validators[ $id ] = $ns . $validator;
}
}
|