110 $this->mSynonyms = (
array)$syn;
111 $this->mCaseSensitive = $cs;
115 $this->contLang = MediaWikiServices::getInstance()->getContentLanguage();
127 public static function get( $id ) {
128 return MediaWikiServices::getInstance()->getMagicWordFactory()->get( $id );
138 return MediaWikiServices::getInstance()->getMagicWordFactory()->getVariableIDs();
147 return MediaWikiServices::getInstance()->getMagicWordFactory()->getSubstIDs();
158 return MediaWikiServices::getInstance()->getMagicWordFactory()->getCacheTTL( $id );
168 return MediaWikiServices::getInstance()->getMagicWordFactory()->getDoubleUnderscoreArray();
179 $this->contLang->getMagic( $this );
180 if ( !$this->mSynonyms ) {
181 $this->mSynonyms = [
'brionmademeputthishere' ];
182 throw new MWException(
"Error: invalid magic word '$id'" );
194 usort( $synonyms, [ $this,
'compareStringLength' ] );
197 foreach ( $synonyms as $synonym ) {
199 $escSyn[] = preg_quote( $synonym,
'/' );
201 $this->mBaseRegex = implode(
'|', $escSyn );
203 $case = $this->mCaseSensitive ?
'' :
'iu';
204 $this->mRegex =
"/{$this->mBaseRegex}/{$case}";
205 $this->mRegexStart =
"/^(?:{$this->mBaseRegex})/{$case}";
206 $this->mRegexStartToEnd =
"/^(?:{$this->mBaseRegex})$/{$case}";
207 $this->mVariableRegex = str_replace(
"\\$1",
"(.*?)", $this->mRegex );
208 $this->mVariableStartToEndRegex = str_replace(
"\\$1",
"(.*?)",
209 "/^(?:{$this->mBaseRegex})$/{$case}" );
234 if ( $this->mRegex ==
'' ) {
248 if ( $this->mRegex ===
'' ) {
252 return $this->mCaseSensitive ?
'' :
'iu';
261 if ( $this->mRegex ==
'' ) {
274 if ( $this->mRegexStartToEnd ==
'' ) {
286 if ( $this->mRegex ==
'' ) {
300 return (
bool)preg_match( $this->
getRegex(), $text );
339 if ( $matchcount == 0 ) {
342 # multiple matched parts (variable match); some will be empty because of
343 # synonyms. The variable will be the second non-empty one so remove any
344 # blank elements and re-sort the indices.
366 $this->mFound =
false;
367 $text = preg_replace_callback(
369 [ $this,
'pregRemoveAndRecord' ],
381 $this->mFound =
false;
382 $text = preg_replace_callback(
384 [ $this,
'pregRemoveAndRecord' ],
397 $this->mFound =
true;
410 public function replace( $replacement, $subject, $limit = -1 ) {
417 $this->mModified =
$res !== $subject;
433 $this->mModified =
$res !== $text;
443 if ( $this->mVariableRegex ==
'' ) {
455 if ( $this->mVariableStartToEndRegex ==
'' ) {
469 return $this->mSynonyms[$i];
497 foreach ( $this->mSynonyms as $syn ) {
498 $array[$this->contLang->lc( $syn )] =
$value;
Internationalisation code.
This class encapsulates "magic words" such as "#redirect", NOTOC, etc.
getVariableRegex()
Matches the word, where $1 is a wildcard.
compareStringLength( $s1, $s2)
A comparison function that returns -1, 0 or 1 depending on whether the first string is longer,...
initRegex()
Preliminary initialisation.
getWasModified()
Returns true if the last call to replace() or substituteCallback() returned a modified text,...
replace( $replacement, $subject, $limit=-1)
Replaces the word with something else.
getVariableStartToEndRegex()
Matches the entire string, where $1 is a wildcard.
getRegexStartToEnd()
Gets a regex matching the word from start to end of a string.
__construct( $id=null, $syn=[], $cs=false, Language $contLang=null)
#-
substituteCallback( $text, $callback)
Variable handling: {{SUBST:xxx}} style words Calls back a function to determine what to replace xxx w...
getBaseRegex()
regex without the slashes and what not
static getCacheTTL( $id)
Allow external reads of TTL array.
matchStartAndRemove(&$text)
static getVariableIDs()
Get an array of parser variable IDs.
getRegexStart()
Gets a regex matching the word, if it is at the string start.
matchStart( $text)
Returns true if the text starts with the word.
getSynonym( $i)
Accesses the synonym list directly.
getRegex()
Gets a regex representing matching the word.
load( $id)
Initialises this object with an ID.
matchVariableStartToEnd( $text)
Returns NULL if there's no match, the value of $1 otherwise The return code is the matched string,...
getRegexCase()
Gets the regexp case modifier to use, i.e.
addToArray(&$array, $value)
Adds all the synonyms of this MagicWord to an array, to allow quick lookup in a list of magic words.
matchStartToEnd( $text)
Returns true if the text matched the word.
string $mVariableStartToEndRegex
static getDoubleUnderscoreArray()
Get a MagicWordArray of double-underscore entities.
match( $text)
Returns true if the text contains the word.
static getSubstIDs()
Get an array of parser substitution modifier IDs.
pregRemoveAndRecord()
Used in matchAndRemove()
matchAndRemove(&$text)
Returns true if the text matches the word, and alters the input string, removing all instances of the...
static escapeRegexReplacement( $string)
Escape a string to make it suitable for inclusion in a preg_replace() replacement parameter.
The wiki should then use memcached to cache various data To use multiple just add more items to the array To increase the weight of a make its entry a array("192.168.0.1:11211", 2))