123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <?php
- /**
- * See docs/magicword.txt.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Parser
- */
- /**
- * A factory that stores information about MagicWords, and creates them on demand with caching.
- *
- * Possible future improvements:
- * * Simultaneous searching for a number of magic words
- * * $mObjects in shared memory
- *
- * @since 1.32
- * @ingroup Parser
- */
- class MagicWordFactory {
- /** #@- */
- /** @var bool */
- private $mVariableIDsInitialised = false;
- /** @var string[] */
- private $mVariableIDs = [
- '!',
- 'currentmonth',
- 'currentmonth1',
- 'currentmonthname',
- 'currentmonthnamegen',
- 'currentmonthabbrev',
- 'currentday',
- 'currentday2',
- 'currentdayname',
- 'currentyear',
- 'currenttime',
- 'currenthour',
- 'localmonth',
- 'localmonth1',
- 'localmonthname',
- 'localmonthnamegen',
- 'localmonthabbrev',
- 'localday',
- 'localday2',
- 'localdayname',
- 'localyear',
- 'localtime',
- 'localhour',
- 'numberofarticles',
- 'numberoffiles',
- 'numberofedits',
- 'articlepath',
- 'pageid',
- 'sitename',
- 'server',
- 'servername',
- 'scriptpath',
- 'stylepath',
- 'pagename',
- 'pagenamee',
- 'fullpagename',
- 'fullpagenamee',
- 'namespace',
- 'namespacee',
- 'namespacenumber',
- 'currentweek',
- 'currentdow',
- 'localweek',
- 'localdow',
- 'revisionid',
- 'revisionday',
- 'revisionday2',
- 'revisionmonth',
- 'revisionmonth1',
- 'revisionyear',
- 'revisiontimestamp',
- 'revisionuser',
- 'revisionsize',
- 'subpagename',
- 'subpagenamee',
- 'talkspace',
- 'talkspacee',
- 'subjectspace',
- 'subjectspacee',
- 'talkpagename',
- 'talkpagenamee',
- 'subjectpagename',
- 'subjectpagenamee',
- 'numberofusers',
- 'numberofactiveusers',
- 'numberofpages',
- 'currentversion',
- 'rootpagename',
- 'rootpagenamee',
- 'basepagename',
- 'basepagenamee',
- 'currenttimestamp',
- 'localtimestamp',
- 'directionmark',
- 'contentlanguage',
- 'pagelanguage',
- 'numberofadmins',
- 'cascadingsources',
- ];
- /** Array of caching hints for ParserCache
- * @var array [ string => int ]
- */
- private $mCacheTTLs = [
- 'currentmonth' => 86400,
- 'currentmonth1' => 86400,
- 'currentmonthname' => 86400,
- 'currentmonthnamegen' => 86400,
- 'currentmonthabbrev' => 86400,
- 'currentday' => 3600,
- 'currentday2' => 3600,
- 'currentdayname' => 3600,
- 'currentyear' => 86400,
- 'currenttime' => 3600,
- 'currenthour' => 3600,
- 'localmonth' => 86400,
- 'localmonth1' => 86400,
- 'localmonthname' => 86400,
- 'localmonthnamegen' => 86400,
- 'localmonthabbrev' => 86400,
- 'localday' => 3600,
- 'localday2' => 3600,
- 'localdayname' => 3600,
- 'localyear' => 86400,
- 'localtime' => 3600,
- 'localhour' => 3600,
- 'numberofarticles' => 3600,
- 'numberoffiles' => 3600,
- 'numberofedits' => 3600,
- 'currentweek' => 3600,
- 'currentdow' => 3600,
- 'localweek' => 3600,
- 'localdow' => 3600,
- 'numberofusers' => 3600,
- 'numberofactiveusers' => 3600,
- 'numberofpages' => 3600,
- 'currentversion' => 86400,
- 'currenttimestamp' => 3600,
- 'localtimestamp' => 3600,
- 'pagesinnamespace' => 3600,
- 'numberofadmins' => 3600,
- 'numberingroup' => 3600,
- ];
- /** @var string[] */
- private $mDoubleUnderscoreIDs = [
- 'notoc',
- 'nogallery',
- 'forcetoc',
- 'toc',
- 'noeditsection',
- 'newsectionlink',
- 'nonewsectionlink',
- 'hiddencat',
- 'expectunusedcategory',
- 'index',
- 'noindex',
- 'staticredirect',
- 'notitleconvert',
- 'nocontentconvert',
- ];
- /** @var string[] */
- private $mSubstIDs = [
- 'subst',
- 'safesubst',
- ];
- /** @var array [ string => MagicWord ] */
- private $mObjects = [];
- /** @var MagicWordArray */
- private $mDoubleUnderscoreArray = null;
- /** @var Language */
- private $contLang;
- /** #@- */
- /**
- * @param Language $contLang Content language
- */
- public function __construct( Language $contLang ) {
- $this->contLang = $contLang;
- }
- public function getContentLanguage() {
- return $this->contLang;
- }
- /**
- * Factory: creates an object representing an ID
- *
- * @param string $id The internal name of the magic word
- *
- * @return MagicWord
- */
- public function get( $id ) {
- if ( !isset( $this->mObjects[$id] ) ) {
- $mw = new MagicWord( null, [], false, $this->contLang );
- $mw->load( $id );
- $this->mObjects[$id] = $mw;
- }
- return $this->mObjects[$id];
- }
- /**
- * Get an array of parser variable IDs
- *
- * @return string[]
- */
- public function getVariableIDs() {
- if ( !$this->mVariableIDsInitialised ) {
- # Get variable IDs
- Hooks::run( 'MagicWordwgVariableIDs', [ &$this->mVariableIDs ] );
- $this->mVariableIDsInitialised = true;
- }
- return $this->mVariableIDs;
- }
- /**
- * Get an array of parser substitution modifier IDs
- * @return string[]
- */
- public function getSubstIDs() {
- return $this->mSubstIDs;
- }
- /**
- * Allow external reads of TTL array
- *
- * @param string $id
- * @return int
- */
- public function getCacheTTL( $id ) {
- if ( array_key_exists( $id, $this->mCacheTTLs ) ) {
- return $this->mCacheTTLs[$id];
- } else {
- return -1;
- }
- }
- /**
- * Get a MagicWordArray of double-underscore entities
- *
- * @return MagicWordArray
- */
- public function getDoubleUnderscoreArray() {
- if ( is_null( $this->mDoubleUnderscoreArray ) ) {
- Hooks::run( 'GetDoubleUnderscoreIDs', [ &$this->mDoubleUnderscoreIDs ] );
- $this->mDoubleUnderscoreArray = $this->newArray( $this->mDoubleUnderscoreIDs );
- }
- return $this->mDoubleUnderscoreArray;
- }
- /**
- * Get a new MagicWordArray with provided $names
- *
- * @param array $names
- * @return MagicWordArray
- */
- public function newArray( array $names = [] ) : MagicWordArray {
- return new MagicWordArray( $names, $this );
- }
- }
|