X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fparser%2FPreprocessor_DOM.php;h=b71b9d242fd6e7dbd840f990758bb455db70b844;hb=1559be9f7aefb57dafbfd5dd5a363ff225b05fa1;hp=8a09be839cdf4965008b84f0d1bea84618fa35d9;hpb=70e760ee4e37edad1be0573b37c17fe6899e4806;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/parser/Preprocessor_DOM.php b/includes/parser/Preprocessor_DOM.php index 8a09be839c..b71b9d242f 100644 --- a/includes/parser/Preprocessor_DOM.php +++ b/includes/parser/Preprocessor_DOM.php @@ -23,9 +23,9 @@ /** * @ingroup Parser - * @codingStandardsIgnoreStart */ -class Preprocessor_DOM implements Preprocessor { +// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps +class Preprocessor_DOM extends Preprocessor { // @codingStandardsIgnoreEnd /** @@ -35,7 +35,7 @@ class Preprocessor_DOM implements Preprocessor { public $memoryLimit; - const CACHE_VERSION = 1; + const CACHE_PREFIX = 'preprocess-xml'; public function __construct( $parser ) { $this->parser = $parser; @@ -71,7 +71,7 @@ class Preprocessor_DOM implements Preprocessor { * @throws MWException */ public function newPartNodeArray( $values ) { - //NOTE: DOM manipulation is slower than building & parsing XML! (or so Tim sais) + // NOTE: DOM manipulation is slower than building & parsing XML! (or so Tim sais) $xml = ""; foreach ( $values as $k => $val ) { @@ -148,30 +148,11 @@ class Preprocessor_DOM implements Preprocessor { * @return PPNode_DOM */ public function preprocessToObj( $text, $flags = 0 ) { - global $wgMemc, $wgPreprocessorCacheThreshold; - - $xml = false; - $cacheable = ( $wgPreprocessorCacheThreshold !== false - && strlen( $text ) > $wgPreprocessorCacheThreshold ); - if ( $cacheable ) { - $cacheKey = wfMemcKey( 'preprocess-xml', md5( $text ), $flags ); - $cacheValue = $wgMemc->get( $cacheKey ); - if ( $cacheValue ) { - $version = substr( $cacheValue, 0, 8 ); - if ( intval( $version ) == self::CACHE_VERSION ) { - $xml = substr( $cacheValue, 8 ); - // From the cache - wfDebugLog( "Preprocessor", "Loaded preprocessor XML from memcached (key $cacheKey)" ); - } - } - if ( $xml === false ) { - $xml = $this->preprocessToXml( $text, $flags ); - $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . $xml; - $wgMemc->set( $cacheKey, $cacheValue, 86400 ); - wfDebugLog( "Preprocessor", "Saved preprocessor XML to memcached (key $cacheKey)" ); - } - } else { + + $xml = $this->cacheGetTree( $text, $flags ); + if ( $xml === false ) { $xml = $this->preprocessToXml( $text, $flags ); + $this->cacheSetTree( $text, $flags, $xml ); } // Fail if the number of elements exceeds acceptable limits @@ -179,8 +160,7 @@ class Preprocessor_DOM implements Preprocessor { $this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' ); $max = $this->parser->mOptions->getMaxGeneratedPPNodeCount(); if ( $this->parser->mGeneratedPPNodeCount > $max ) { - if ( $cacheable ) { - } + // if ( $cacheable ) { ... } throw new MWException( __METHOD__ . ': generated node count limit exceeded' ); } @@ -199,8 +179,7 @@ class Preprocessor_DOM implements Preprocessor { $obj = new PPNode_DOM( $dom->documentElement ); } - if ( $cacheable ) { - } + // if ( $cacheable ) { ... } if ( !$result ) { throw new MWException( __METHOD__ . ' generated invalid XML' ); @@ -257,7 +236,7 @@ class Preprocessor_DOM implements Preprocessor { $stack = new PPDStack; - $searchBase = "[{<\n"; #} + $searchBase = "[{<\n"; # } // For fast reverse searches $revText = strrev( $text ); $lengthText = strlen( $text ); @@ -282,7 +261,7 @@ class Preprocessor_DOM implements Preprocessor { $fakeLineStart = true; while ( true ) { - //$this->memCheck(); + // $this->memCheck(); if ( $findOnlyinclude ) { // Ignore all input up to the next @@ -848,12 +827,31 @@ class PPDStack { * @ingroup Parser */ class PPDStackElement { - public $open, // Opening character (\n for heading) - $close, // Matching closing character - $count, // Number of opening characters found (number of "=" for heading) - $parts, // Array of PPDPart objects describing pipe-separated parts. - $lineStart; // True if the open char appeared at the start of the input line. - // Not set for headings. + /** + * @var string Opening character (\n for heading) + */ + public $open; + + /** + * @var string Matching closing character + */ + public $close; + + /** + * @var int Number of opening characters found (number of "=" for heading) + */ + public $count; + + /** + * @var PPDPart[] Array of PPDPart objects describing pipe-separated parts. + */ + public $parts; + + /** + * @var bool True if the open char appeared at the start of the input line. + * Not set for headings. + */ + public $lineStart; public $partClass = 'PPDPart'; @@ -924,7 +922,10 @@ class PPDStackElement { * @ingroup Parser */ class PPDPart { - public $out; // Output accumulator string + /** + * @var string Output accumulator string + */ + public $out; // Optional member variables: // eqpos Position of equals sign in output accumulator @@ -939,8 +940,8 @@ class PPDPart { /** * An expansion frame, used as a context to expand the result of preprocessToObj() * @ingroup Parser - * @codingStandardsIgnoreStart */ +// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps class PPFrame_DOM implements PPFrame { // @codingStandardsIgnoreEnd @@ -1553,8 +1554,8 @@ class PPFrame_DOM implements PPFrame { /** * Expansion frame with template arguments * @ingroup Parser - * @codingStandardsIgnoreStart */ +// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps class PPTemplateFrame_DOM extends PPFrame_DOM { // @codingStandardsIgnoreEnd @@ -1720,8 +1721,8 @@ class PPTemplateFrame_DOM extends PPFrame_DOM { /** * Expansion frame with custom arguments * @ingroup Parser - * @codingStandardsIgnoreStart */ +// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps class PPCustomFrame_DOM extends PPFrame_DOM { // @codingStandardsIgnoreEnd @@ -1769,8 +1770,8 @@ class PPCustomFrame_DOM extends PPFrame_DOM { /** * @ingroup Parser - * @codingStandardsIgnoreStart */ +// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps class PPNode_DOM implements PPNode { // @codingStandardsIgnoreEnd