magicword.txt

Magic Words are some phrases used in the wikitext. They are used for two things:
* Variables (like {{PAGENAME}}, {{SERVER}}, ...): part of wikitext, that looks
  like templates but that don't accept any parameter.
* Parser functions (like {{fullurl:...}}, {{#special:...}}): behaves like 
  functions and accepts parameters.

The localized arrays keys are the internal name, and the values are an array, 
whose include their case-sensitivity and their alias forms. The first form 
defined is used by the program, for example, when moving a page and its old name
should include #REDIRECT.

They can be added in several arrays:
* LanguageGetMagic hook, by adding a new key in $magicWords array. You can get
  language code in the $lang parameter. Use both the localized name and the 
  English name.
* By adding a file to $wgExtensionMessagesFiles and defining there $magicWords.
  This array is associative with the language code in the first dimension key
  and then a "normal" array of magic words.
* Localized arrays (languages/messages/LanguageXX.php) include their different 
  names to be used by the users.

To add a new variable, you should use the "MagicWordwgVariableIDs" hook to add
the internal name to the $magicWords array. You'll need to define the value of
the variable with the "ParserGetVariableValueSwitch" hook.

For example to add a new variable:

$wgHooks['MagicWordwgVariableIDs'][] = 'wfAddCustomMagicWordID';
$wgHooks['LanguageGetMagic'][] = 'wfAddCustomMagicWordLang';
$wgHooks['ParserGetVariableValueSwitch'][] = 'wfGetCustomMagicWordValue';

function wfAddCustomMagicWordID( &$magicWords ) {
	$magicWords[] = 'mag_custom';
	return true;
}

function wfAddCustomMagicWordLang( &$magicWords, $langCode ) {
	switch ( $langCode ) {
		case 'es':
			$magicWords['mag_custom'] = array( 1, "ADUANERO", "CUSTOM" );
			break;
		default:
			$magicWords['mag_custom'] = array( 1, "CUSTOM" );
	}
	return true;
}

function wfGetCustomMagicWordValue( &$parser, &$varCache, &$index, &$ret ){
	if( $index == 'mag_custom' ){
		$ret = $varCache['mag_custom'] = "Custom value";
	}
	return true;
}

And to add a new parser function:

$wgHooks['LanguageGetMagic'][] = 'wfAddCustomMagicWordLang';
$wgHooks['ParserFirstCallInit'][] = 'wfRegisterCustomMagicWord';

function wfAddCustomMagicWordLang( &$magicWords, $langCode ) {
	switch ( $langCode ) {
		case 'es':
			$magicWords['mag_custom'] = array( 0, "aduanero", "custom" );
			break;
		default:
			$magicWords['mag_custom'] = array( 0, "custom" );
	}
	return true;
}

function wfRegisterCustomMagicWord( &$parser ){
	$parser->setFunctionHook( 'mag_custom', 'wfGetCustomMagicWordValue' );
	return true;
}

function wfGetCustomMagicWordValue( &$parser, $var1, $var2 ){
	return "custom: var1 is $var1, var2 is $var2";
}

Note: the 'ParserFirstCallInit' hook is only aviable since 1.12. To work with
an older version, you'll need to use an extension function.

Online documentation (contains more informations):
Magic words: http://www.mediawiki.org/wiki/Manual:Magic_words
Variables: http://www.mediawiki.org/wiki/Manual:Variable
Parser functions: http://www.mediawiki.org/wiki/Manual:Parser_functions