MediaWiki REL1_30
Preprocessor.php
Go to the documentation of this file.
1<?php
25
29abstract class Preprocessor {
30
31 const CACHE_VERSION = 1;
32
36 protected $rules = [
37 '{' => [
38 'end' => '}',
39 'names' => [
40 2 => 'template',
41 3 => 'tplarg',
42 ],
43 'min' => 2,
44 'max' => 3,
45 ],
46 '[' => [
47 'end' => ']',
48 'names' => [ 2 => null ],
49 'min' => 2,
50 'max' => 2,
51 ],
52 '-{' => [
53 'end' => '}-',
54 'names' => [ 2 => null ],
55 'min' => 2,
56 'max' => 2,
57 ],
58 ];
59
67 protected function cacheSetTree( $text, $flags, $tree ) {
68 $config = RequestContext::getMain()->getConfig();
69
70 $length = strlen( $text );
71 $threshold = $config->get( 'PreprocessorCacheThreshold' );
72 if ( $threshold === false || $length < $threshold || $length > 1e6 ) {
73 return;
74 }
75
76 $cache = ObjectCache::getLocalClusterInstance();
77 $key = $cache->makeKey(
78 defined( 'static::CACHE_PREFIX' ) ? static::CACHE_PREFIX : static::class,
79 md5( $text ), $flags );
80 $value = sprintf( "%08d", static::CACHE_VERSION ) . $tree;
81
82 $cache->set( $key, $value, 86400 );
83
84 LoggerFactory::getInstance( 'Preprocessor' )
85 ->info( "Cached preprocessor output (key: $key)" );
86 }
87
96 protected function cacheGetTree( $text, $flags ) {
97 $config = RequestContext::getMain()->getConfig();
98
99 $length = strlen( $text );
100 $threshold = $config->get( 'PreprocessorCacheThreshold' );
101 if ( $threshold === false || $length < $threshold || $length > 1e6 ) {
102 return false;
103 }
104
105 $cache = ObjectCache::getLocalClusterInstance();
106
107 $key = $cache->makeKey(
108 defined( 'static::CACHE_PREFIX' ) ? static::CACHE_PREFIX : static::class,
109 md5( $text ), $flags );
110
111 $value = $cache->get( $key );
112 if ( !$value ) {
113 return false;
114 }
115
116 $version = intval( substr( $value, 0, 8 ) );
117 if ( $version !== static::CACHE_VERSION ) {
118 return false;
119 }
120
121 LoggerFactory::getInstance( 'Preprocessor' )
122 ->info( "Loaded preprocessor output from cache (key: $key)" );
123
124 return substr( $value, 8 );
125 }
126
132 abstract public function newFrame();
133
142 abstract public function newCustomFrame( $args );
143
150 abstract public function newPartNodeArray( $values );
151
160 abstract public function preprocessToObj( $text, $flags = 0 );
161}
162
166interface PPFrame {
167 const NO_ARGS = 1;
168 const NO_TEMPLATES = 2;
169 const STRIP_COMMENTS = 4;
170 const NO_IGNORE = 8;
172 const NO_TAGS = 32;
173
174 const RECOVER_ORIG = 59; // = 1|2|8|16|32 no constant expression support in PHP yet
175
178
188 public function newChild( $args = false, $title = false, $indexOffset = 0 );
189
197 public function cachedExpand( $key, $root, $flags = 0 );
198
205 public function expand( $root, $flags = 0 );
206
214 public function implodeWithFlags( $sep, $flags /*, ... */ );
215
222 public function implode( $sep /*, ... */ );
223
231 public function virtualImplode( $sep /*, ... */ );
232
241 public function virtualBracketedImplode( $start, $sep, $end /*, ... */ );
242
248 public function isEmpty();
249
254 public function getArguments();
255
260 public function getNumberedArguments();
261
266 public function getNamedArguments();
267
273 public function getArgument( $name );
274
281 public function loopCheck( $title );
282
287 public function isTemplate();
288
300 public function setVolatile( $flag = true );
301
311 public function isVolatile();
312
325 public function getTTL();
326
336 public function setTTL( $ttl );
337
343 public function getTitle();
344}
345
359interface PPNode {
365 public function getChildren();
366
372 public function getFirstChild();
373
378 public function getNextSibling();
379
386 public function getChildrenOfType( $type );
387
391 public function getLength();
392
398 public function item( $i );
399
413 public function getName();
414
422 public function splitArg();
423
429 public function splitExt();
430
435 public function splitHeading();
436}
if( $line===false) $args
Definition cdb.php:63
PSR-3 logger instance factory.
preprocessToObj( $text, $flags=0)
Preprocess text to a PPNode.
cacheGetTree( $text, $flags)
Attempt to load a precomputed document tree for some given wikitext from the cache.
array $rules
Brace matching rules.
newPartNodeArray( $values)
Create a new custom node for programmatic use of parameter replacement as used in some extensions.
cacheSetTree( $text, $flags, $tree)
Store a document tree in the cache.
const CACHE_VERSION
newFrame()
Create a new top-level frame for expansion of a page.
newCustomFrame( $args)
Create a new custom frame for programmatic use of parameter replacement as used in some extensions.
static getMain()
Static methods.
it s the revision text itself In either if gzip is the revision text is gzipped $flags
Definition hooks.txt:2805
isEmpty()
Returns true if there are no arguments in this frame.
getArguments()
Returns all arguments of this frame.
const NO_TEMPLATES
const SUPPORTS_INDEX_OFFSET
This constant exists when $indexOffset is supported in newChild()
getTTL()
Get the TTL of the frame's output.
getArgument( $name)
Get an argument to this frame by name.
cachedExpand( $key, $root, $flags=0)
Expand a document tree node, caching the result on its parent with the given key.
const NO_TAGS
getNumberedArguments()
Returns all numbered arguments of this frame.
isVolatile()
Get the "volatile" flag.
virtualBracketedImplode( $start, $sep, $end)
Virtual implode with brackets.
const RECOVER_ORIG
implodeWithFlags( $sep, $flags)
Implode with flags for expand()
const RECOVER_COMMENTS
implode( $sep)
Implode with no flags specified.
const NO_ARGS
const NO_IGNORE
setTTL( $ttl)
Set the TTL of the output of this frame and all of its ancestors.
loopCheck( $title)
Returns true if the infinite loop check is OK, false if a loop is detected.
virtualImplode( $sep)
Makes an object that, when expand()ed, will be the same as one obtained with implode()
expand( $root, $flags=0)
Expand a document tree node.
isTemplate()
Return true if the frame is a template frame.
const STRIP_COMMENTS
getTitle()
Get a title of frame.
getNamedArguments()
Returns all named arguments of this frame.
newChild( $args=false, $title=false, $indexOffset=0)
Create a child frame.
setVolatile( $flag=true)
Set the "volatile" flag.
There are three types of nodes:
item( $i)
Returns an item of an array-type node.
getLength()
Returns the length of the array, or false if this is not an array-type node.
splitArg()
Split a "<part>" node into an associative array containing: name PPNode name index String index value...
splitExt()
Split an "<ext>" node into an associative array containing name, attr, inner and close All values in ...
getFirstChild()
Get the first child of a tree node.
getName()
Get the name of this node.
getChildren()
Get an array-type node containing the children of this node.
getChildrenOfType( $type)
Get all children of this tree node which have a given name.
splitHeading()
Split an "<h>" node.
getNextSibling()
Get the next sibling of any node.
$cache
Definition mcc.php:33