Skip to content

Commit

Permalink
bug 22297 - "syntax for substitution that doesn't break transclusion"
Browse files Browse the repository at this point in the history
Adds "safesubst:$1" that works similarly to "subst:$1"
(relevant to bug 5453, bug 16714, bug 4484)
  • Loading branch information
Conrad Irwin committed Jan 30, 2010
1 parent ee881d9 commit 13eb1fe
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 11 deletions.
1 change: 1 addition & 0 deletions RELEASE-NOTES
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
* (bug 22248) Output extension URLs in meta=siteinfo&siprop=extensions
* Support key-params arrays in 'descriptionmsg' in meta=siteinfo&siprop=extensions
* (bug 21922) YAML output should quote asterisk when used as key
* (bug 22297) safesubst: to allow substitution without breaking transclusion

=== Languages updated in 1.16 ===

Expand Down
11 changes: 11 additions & 0 deletions includes/MagicWord.php
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,10 @@ class MagicWord {
'nocontentconvert',
);

static public $mSubstIDs = array(
'subst',
'safesubst',
);

static public $mObjects = array();
static public $mDoubleUnderscoreArray = null;
Expand Down Expand Up @@ -216,6 +220,13 @@ static function getVariableIDs() {
return self::$mVariableIDs;
}

/**
* Get an array of parser substitution modifier IDs
*/
static function getSubstIDs() {
return self::$mSubstIDs;
}

/* Allow external reads of TTL array */
static function getCacheTTL($id) {
if (array_key_exists($id,self::$mCacheTTLs)) {
Expand Down
29 changes: 19 additions & 10 deletions includes/parser/Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ class Parser
*/
# Persistent:
var $mTagHooks, $mTransparentTagHooks, $mFunctionHooks, $mFunctionSynonyms, $mVariables,
$mImageParams, $mImageParamsMagicArray, $mStripList, $mMarkerIndex, $mPreprocessor,
$mExtLinkBracketedRegex, $mUrlProtocols, $mDefaultStripList, $mVarCache, $mConf,
$mFunctionTagHooks;
$mSubsts, $mImageParams, $mImageParamsMagicArray, $mStripList, $mMarkerIndex,
$mPreprocessor, $mExtLinkBracketedRegex, $mUrlProtocols, $mDefaultStripList,
$mVarCache, $mConf, $mFunctionTagHooks;


# Cleared with clearState():
Expand Down Expand Up @@ -2617,15 +2617,17 @@ function getVariableValue( $index, $frame=false ) {
}

/**
* initialise the magic variables (like CURRENTMONTHNAME)
* initialise the magic variables (like CURRENTMONTHNAME) and substitution modifiers
*
* @private
*/
function initialiseVariables() {
wfProfileIn( __METHOD__ );
$variableIDs = MagicWord::getVariableIDs();
$substIDs = MagicWord::getSubstIDs();

$this->mVariables = new MagicWordArray( $variableIDs );
$this->mSubsts = new MagicWordArray( $substIDs );
wfProfileOut( __METHOD__ );
}

Expand Down Expand Up @@ -2796,12 +2798,19 @@ function braceSubstitution( $piece, $frame ) {
# SUBST
wfProfileIn( __METHOD__.'-modifiers' );
if ( !$found ) {
$mwSubst = MagicWord::get( 'subst' );
if ( $mwSubst->matchStartAndRemove( $part1 ) xor $this->ot['wiki'] ) {
# One of two possibilities is true:
# 1) Found SUBST but not in the PST phase
# 2) Didn't find SUBST and in the PST phase
# In either case, return without further processing

$substMatch = $this->mSubsts->matchVariableStartToEnd( $part1 );

# Possibilities for substMatch[0]: "subst", "safesubst" or FALSE
# Whether to include depends also on whether we are in the pre-save-transform
#
# safesubst || (subst && PST) => transclude (handled by if)
# (false && PST) || (subst && !PST) => return input (handled by else if)
# false && !PST => transclude (no handling needed here)
if ( $substMatch[0] && ( $this->ot['wiki'] || $substMatch[0] == 'safesubst' ) ) {
$part1 = $substMatch[1];

} else if ( $substMatch[0] xor $this->ot['wiki'] ) {
$text = $frame->virtualBracketedImplode( '{{', '|', '}}', $titleWithSpaces, $args );
$isLocalObj = true;
$found = true;
Expand Down
3 changes: 2 additions & 1 deletion languages/messages/MessagesEn.php
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,8 @@
'subjectpagename' => array( 1, 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
'subjectpagenamee' => array( 1, 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
'msg' => array( 0, 'MSG:' ),
'subst' => array( 0, 'SUBST:' ),
'subst' => array( 0, 'SUBST:$1' ),
'safesubst' => array( 0, 'SAFESUBST:$1' ),
'msgnw' => array( 0, 'MSGNW:' ),
'img_thumbnail' => array( 1, 'thumbnail', 'thumb' ),
'img_manualthumb' => array( 1, 'thumbnail=$1', 'thumb=$1'),
Expand Down

0 comments on commit 13eb1fe

Please sign in to comment.