51 $this->regex =
'/' . Parser::MARKER_PREFIX .
"([^\x7f<>&'\"]+)" . Parser::MARKER_SUFFIX .
'/';
52 $this->circularRefGuard = [];
55 if ( isset(
$options[
'depthLimit'] ) ) {
56 $this->depthLimit =
$options[
'depthLimit'];
58 if ( isset(
$options[
'sizeLimit'] ) ) {
59 $this->sizeLimit =
$options[
'sizeLimit'];
87 if ( !preg_match( $this->regex, $marker, $m ) ) {
131 $callback =
function ( $m )
use (
$type ) {
133 if ( isset( $this->
data[$type][$marker] ) ) {
134 if ( isset( $this->circularRefGuard[$marker] ) ) {
135 return $this->
getWarning(
'parser-unstrip-loop-warning' );
138 if ( $this->depth > $this->highestDepth ) {
141 if ( $this->depth >= $this->depthLimit ) {
146 if (
$value instanceof Closure ) {
150 $this->expandSize += strlen(
$value );
151 if ( $this->expandSize > $this->sizeLimit ) {
155 $this->circularRefGuard[$marker] =
true;
159 unset( $this->circularRefGuard[$marker] );
167 $text = preg_replace_callback( $this->regex, $callback, $text );
182 return $this->
getWarning(
"$type-warning", $max );
193 return '<span class="error">' .
195 ->numParams( $max )->inContentLanguage()->text() .
207 [
'limitreport-unstrip-depth',
213 [
'limitreport-unstrip-size',
236 $startPos = strpos( $text, Parser::MARKER_PREFIX, $pos );
237 $endPos = strpos( $text, Parser::MARKER_SUFFIX, $pos );
238 if ( $startPos ===
false || $endPos ===
false ) {
242 $endPos += strlen( Parser::MARKER_SUFFIX );
243 $marker = substr( $text, $startPos, $endPos - $startPos );
244 if ( !preg_match( $this->regex, $marker, $m ) ) {
249 if ( isset( $this->
data[
'nowiki'][$key] ) ) {
250 $subState->data[
'nowiki'][$key] = $this->
data[
'nowiki'][$key];
251 } elseif ( isset( $this->
data[
'general'][$key] ) ) {
252 $subState->data[
'general'][$key] = $this->
data[
'general'][$key];
269 public function merge( $otherState, $texts ) {
274 foreach ( $otherState->data
as $type => $items ) {
275 foreach ( $items
as $key =>
$value ) {
280 $callback =
function ( $m )
use ( $mergePrefix ) {
282 return Parser::MARKER_PREFIX . $mergePrefix .
'-' . $key . Parser::MARKER_SUFFIX;
284 $texts = preg_replace_callback( $otherState->regex, $callback, $texts );
295 return preg_replace( $this->regex,
'', $text );