Page MenuHomePhabricator

preSaveTransform-diff.txt

Authored By
bzimport
Nov 21 2014, 8:36 PM
Size
3 KB
Referenced Files
None
Subscribers
None

preSaveTransform-diff.txt

diff --git a/includes/parser/CoreTagHooks.php b/includes/parser/CoreTagHooks.php
index 7d488c4..6c33cd5 100644
--- a/includes/parser/CoreTagHooks.php
+++ b/includes/parser/CoreTagHooks.php
@@ -18,7 +18,7 @@ class CoreTagHooks {
global $wgRawHtml;
$parser->setHook( 'pre', array( __CLASS__, 'pre' ) );
$parser->setHook( 'nowiki', array( __CLASS__, 'nowiki' ) );
- $parser->setHook( 'gallery', array( __CLASS__, 'gallery' ) );
+ $parser->setHook( 'gallery', array( __CLASS__, 'gallery' ) , array('preSaveTrans' => true) );
if ( $wgRawHtml ) {
$parser->setHook( 'html', array( __CLASS__, 'html' ) );
}
diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php
index 20c8b95..3510d44 100644
--- a/includes/parser/Parser.php
+++ b/includes/parser/Parser.php
@@ -106,6 +106,7 @@ class Parser {
var $mFunctionTagHooks = array();
var $mStripList = array();
var $mDefaultStripList = array();
+ var $mPstAcceptableXmlTags = array();
var $mVarCache = array();
var $mImageParams = array();
var $mImageParamsMagicArray = array();
@@ -181,6 +182,11 @@ class Parser {
var $mUniqPrefix;
/**
+ * @var string
+ */
+ var $mDuringPreSaveTransform = false;
+
+ /**
* Constructor
*
* @param $conf array
@@ -845,7 +851,11 @@ class Parser {
* @return array
*/
function getStripList() {
- return $this->mStripList;
+ if ( $this->mDuringPreSaveTransform ) {
+ return $this->mStripList;
+ } else {
+ return array_merge($this->mStripList, $this->mPstAcceptableXmlTags);
+ }
}
/**
@@ -4303,6 +4313,8 @@ class Parser {
public function preSaveTransform( $text, Title $title, User $user, ParserOptions $options, $clearState = true ) {
$this->startParse( $title, $options, self::OT_WIKI, $clearState );
$this->setUser( $user );
+
+ $this->mDuringPreSaveTransform = true;
$pairs = array(
"\r\n" => "\n",
@@ -4314,6 +4326,8 @@ class Parser {
$text = $this->mStripState->unstripBoth( $text );
$this->setUser( null ); #Reset
+
+ $this->mDuringPreSaveTransform = false;
return $text;
}
@@ -4609,16 +4623,21 @@ class Parser {
* @param $callback Mixed: the callback function (and object) to use for the tag
* @return Mixed|null The old value of the mTagHooks array associated with the hook
*/
- public function setHook( $tag, $callback ) {
+ public function setHook( $tag, $callback, $options = array() ) {
$tag = strtolower( $tag );
if ( preg_match( '/[<>\r\n]/', $tag, $m ) ) {
throw new MWException( "Invalid character {$m[0]} in setHook('$tag', ...) call" );
}
$oldVal = isset( $this->mTagHooks[$tag] ) ? $this->mTagHooks[$tag] : null;
$this->mTagHooks[$tag] = $callback;
- if ( !in_array( $tag, $this->mStripList ) ) {
- $this->mStripList[] = $tag;
- }
+
+ if ( isset($options['preSaveTrans']) && $options['preSaveTrans'] === true ) {
+ if ( !in_array( $tag, $this->mPstAcceptableXmlTags ) ) {
+ $this->mPstAcceptableXmlTags[] = $tag;
+ }
+ } elseif ( !in_array( $tag, $this->mStripList ) ) {
+ $this->mStripList[] = $tag;
+ }
return $oldVal;
}
@@ -4657,6 +4676,8 @@ class Parser {
$this->mTagHooks = array();
$this->mFunctionTagHooks = array();
$this->mStripList = $this->mDefaultStripList;
+ $this->mPstAcceptableXmlTags = array();
+ $this->mDuringPreSaveTransform = false;
}
/**

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1699
Default Alt Text
preSaveTransform-diff.txt (3 KB)

Event Timeline