Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Get MediaWiki
Get extensions
Tech blog
Contribute
Support
User help
FAQ
Technical manual
Support desk
Communication
Development
Developer portal
Code statistics
mediawiki.org
Community portal
Recent changes
Translate content
Random page
Village pump
Sandbox
Search
Search
English
Appearance
Donate
Create account
Log in
Personal tools
Donate
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Export translations
Translate
English
Language statistics
Message group statistics
Export
Tools
Tools
move to sidebar
hide
Actions
Language statistics
Message group statistics
Export
General
Upload file
Special pages
Printable version
Get shortened URL
Download QR code
In other projects
Appearance
move to sidebar
hide
Settings
Group
"Keep me logged in" extended to one year
2017 wikitext editor
2021-12 security release/FAQ
_High priority
A/B testing
Abstract Wikipedia team
Academic hub
Accessibility
Accessibility guide for developers
Account creation
Actor migration
Administrators
Advertising
Africa Wikimedia Technical Community
Africa Wikimedia Technical Community/Project Scope
Africa Wikimedia Technical Community/Request by Country
Africa Wikimedia Technical Community/Team
Age classification
Alea
Alternative parsers
Analytics
Android keyboard for bilinguals
Anti-Harassment Tools/Action Blocks
Apache configuration
APC
API
API versioning
API/Architecture work
API:Account creation
API:All search modules
API:Allcategories
API:Alldeletedrevisions
API:Allfileusages
API:Allimages
API:Alllinks
API:Allmessages
API:Allpages
API:Allredirects
API:Allrevisions
API:Alltransclusions
API:Allusers
API:Article ideas generator
API:Assert
API:Authmanagerinfo
API:Backlinks
API:Block
API:Blocks
API:Caching data
API:Calling internally
API:Categories
API:Categoryinfo
API:Categorymembers
API:ChangeContentModel
API:Changing wiki content
API:Checktoken
API:ClearHasMsg
API:Client code
API:Client code/Gold standard
API:Client code/Java
API:Compare
API:Continue
API:Contributors
API:Cross-site requests
API:Data formats
API:Database field and API property associations
API:Delete
API:Deletedrevisions
API:Deletedrevs
API:Duplicatefiles
API:Edit
API:Edit - Set user preferences
API:Emailuser
API:Embeddedin
API:Errors and warnings
API:Etiquette
API:Expandtemplates
API:Extensions
API:Extlinks
API:Exturlusage
API:FAQ
API:Feedcontributions
API:Feedrecentchanges
API:Filearchive
API:Filerepoinfo
API:Filerevert
API:Filetransform
API:Fileusage
API:Geosearch
API:Get the contents of a page
API:Globalusage
API:Help
API:Holidays viewer
API:Imageinfo
API:Imagerotate
API:Images
API:Imageusage
API:Implementation Strategy
API:Import
API:Info
API:Iwbacklinks
API:Iwlinks
API:JSON version 2
API:Langbacklinks
API:Langlinks
API:Languageinfo
API:Languagesearch
API:Links
API:Linkshere
API:Lists
API:Localisation
API:Logevents
API:Logging
API:Login
API:Logout
API:Main module
API:Main page
API:Managetags
API:Mergehistory
API:Meta
API:Move
API:Nearby places viewer
API:Opensearch
API:Options
API:Page info in search results
API:Pagepropnames
API:Pageprops
API:Pageswithprop
API:Parameter information
API:Parsing wikitext
API:Patrol
API:Picture of the day viewer
API:Prefixsearch
API:Properties
API:Protect
API:Protectedtitles
API:Purge
API:Query
API:Querypage
API:Random
API:RecentChanges
API:Redirects
API:Resetpassword
API:REST API
API:REST API/Reference
API:Restricting API usage
API:Revisiondelete
API:Revisions
API:Rollback
API:Rsd
API:Search
API:Search and discovery
API:Setnotificationtimestamp
API:SetPageLanguage
API:Siteinfo
API:Stashedit
API:Stashimageinfo
API:Tag
API:Tags
API:Templated parameters
API:Templates
API:Tokens
API:Tokens (action)
API:Transcludedin
API:Tutorial
API:Undelete
API:Upload
API:User group membership
API:User group membership/Sample code 1
API:Usercontribs
API:Userinfo
API:Users
API:Validatepassword
API:Watch
API:Watchlist
API:Watchlist feed
API:Watchlistraw
Article creation
Assert
At-ease
AuthPlugin
Autoblock
Awmd-stats
BagOStuff
Banana-checker
Bcp47Code
BEM
Best practices for extensions
Beta Cluster
Beta Features
Beta Features/Gallery
Beta Features/PHP7
Blacklist
BlueSpice
Books about MediaWiki
Brickimedia
Bubble notifications
Bug management/Bug report life cycle
Bug management/Phabricator etiquette
Bugwrangler
Bugzilla
Build with Ghana NLP/Header
Bundled extensions and skins
Button
Calendars
Campaigns
Canasta
CAPTCHA
Categories
Category:$wgSMTP
Category:3D extensions
Category:AbortAutoblock extensions
Category:AbortEmailNotification extensions
Category:AbortTalkPageEmailNotification extensions
Category:AbuseFilter-builder extensions
Category:AbuseFilter-computeVariable extensions
Category:AbuseFilter-contentToString extensions
Category:AbuseFilter-deprecatedVariables extensions
Category:AbuseFilter-generateTitleVars extensions
Category:AbuseFilter-generateUserVars extensions
Category:AbuseFilterAlterVariables extensions
Category:AbuseFilterCustomActions extensions
Category:AbuseFilterGenerateVarsForRecentChange extensions
Category:AbuseFilterShouldFilterAction extensions
Category:Accessibility
Category:Accessibility for reading
Category:Actions variables
Category:AddNewAccount extensions
Category:Admin templates
Category:AdminLinks extensions
Category:Advertising
Category:Advertising extensions
Category:AfterBuildFeedLinks extensions
Category:AfterImportPage extensions
Category:AfterParserFetchFileAndTitle extensions
Category:Age classification
Category:Agora
Category:AGPL licensed extensions
Category:AGPL licensed skins
Category:Ajax extensions
Category:Ajax variables
Category:Alert templates
Category:All extensions
Category:All skins
Category:All snippets
Category:All tools
Category:AllInfoboxesQueryRecached extensions
Category:AlternateEdit extensions
Category:AlternateEditPreview extensions
Category:AlternateUserMailer extensions
Category:Amazon extensions
Category:Analytics
Category:Analytics extensions
Category:AncientPagesQuery extensions
Category:Animation extensions
Category:Annotation extensions
Category:Antivirus variables
Category:Apache licensed extensions
Category:API extensions
Category:API templates
Category:API tools
Category:API variables
Category:APIAfterExecute extensions
Category:ApiBeforeMain extensions
Category:ApiCheckCanExecute extensions
Category:ApiDeprecationHelp extensions
Category:ApiFeedContributions::feedItem extensions
Category:APIFlowAfterExecute extensions
Category:ApiFormatHighlight extensions
Category:APIGetAllowedParams extensions
Category:ApiLogFeatureUsage extensions
Category:ApiMain::moduleManager extensions
Category:ApiMakeParserOptions extensions
Category:ApiMaxLagInfo extensions
Category:ApiOpenSearchSuggest extensions
Category:ApiOptions extensions
Category:ApiParseMakeOutputPage extensions
Category:ApiQuery::moduleManager extensions
Category:APIQueryAfterExecute extensions
Category:ApiQueryBaseAfterQuery extensions
Category:ApiQueryBaseBeforeQuery extensions
Category:ApiQueryBaseProcessRow extensions
Category:APIQuerySiteInfoGeneralInfo extensions
Category:APIQuerySiteInfoStatisticsInfo extensions
Category:ApiQueryTokensRegisterTypes extensions
Category:ApiQueryWatchlistExtractOutputData extensions
Category:ApiQueryWatchlistPrepareWatchedItemQueryServiceOptions extensions
Category:ApiRsdServiceApis extensions
Category:ApprovedRevsFileRevisionApproved extensions
Category:ApprovedRevsFileRevisionUnapproved extensions
Category:ApprovedRevsRevisionApproved extensions
Category:ApprovedRevsRevisionUnapproved extensions
Category:Architectural modules of MediaWiki
Category:Archival templates
Category:Archived extensions
Category:Archived extensions without an oldid
Category:Archived Semantic MediaWiki extensions
Category:Archived skins
Category:Archived Wikibase extensions
Category:Array extensions
Category:Article
Category:Article::MissingArticleConditions extensions
Category:ArticleConfirmDelete extensions
Category:ArticleContentOnDiff extensions
Category:ArticleDelete extensions
Category:ArticleDeleteAfterSuccess extensions
Category:ArticleDeleteComplete extensions
Category:ArticleEditUpdateNewTalk extensions
Category:ArticleFromTitle extensions
Category:ArticleInsertComplete extensions
Category:ArticleMergeComplete extensions
Category:ArticleParserOptions extensions
Category:ArticlePrepareTextForEdit extensions
Category:ArticleProtectComplete extensions
Category:ArticlePurge extensions
Category:ArticleRevisionViewCustom extensions
Category:ArticleRevisionVisibilitySet extensions
Category:ArticleUndelete extensions
Category:ArticleUpdateBeforeRedirect extensions
Category:ArticleViewFooter extensions
Category:ArticleViewHeader extensions
Category:Attachment extensions
Category:Audio player extensions
Category:AuthChangeFormFields extensions
Category:Authentication and login
Category:Authentication variables
Category:AuthManagerFilterProviders extensions
Category:AuthManagerLoginAuthenticateAudit extensions
Category:AuthRemoteuserFilterUserName extensions
Category:Auto-generated Page
Category:AutopromoteCondition extensions
Category:BaseTemplateToolbox extensions
Category:BeforeCreateEchoEvent extensions
Category:BeforeDisplayNoArticleText extensions
Category:BeforeEchoEventInsert extensions
Category:BeforeInitialize extensions
Category:BeforePageDisplay extensions
Category:BeforePageDisplayMobile extensions
Category:BeforePageRedirect extensions
Category:BeforeParserFetchFileAndTitle extensions
Category:BeforeParserFetchTemplateRevisionRecord extensions
Category:BeforeRevertedTagUpdate extensions
Category:Benchmark maintenance scripts
Category:Benchmarks
Category:Beta Feature extensions
Category:Beta Features
Category:Beta status extensions
Category:Beta status skins
Category:Beta status tools
Category:BitmapHandlerCheckImageArea extensions
Category:BitmapHandlerTransform extensions
Category:Block
Category:BlockIpComplete extensions
Category:BlueSpice
Category:BlueSpiceDiscoveryTemplateDataProviderAfterInit extensions
Category:Bots
Category:Breadcrumbs extensions
Category:BsAdapterAjaxPingResult extensions
Category:BSD licensed extensions
Category:BSD licensed skins
Category:BSGroupManagerGroupDeleted extensions
Category:BSGroupManagerGroupNameChanged extensions
Category:BSUEModulePDFBeforeAddingStyleBlocks extensions
Category:BSUEModulePDFBeforeCreatePDF extensions
Category:BSUEModulePDFgetPage extensions
Category:BSUserManagerAfterDeleteUser extensions
Category:Bugzilla
Category:Bulk upload
Category:Cache
Category:Cache variables
Category:Calendar extensions
Category:Calendar widget extensions
Category:CanonicalNamespaces extensions
Category:CargoTablesActionLinks extensions
Category:CargoTablesSetActionLinks extensions
Category:CargoTablesSetAllowedActions extensions
Category:Categories templates
Category:Categorizing templates
Category:Category
Category:Category extensions
Category:Category intersection extensions
Category:Category variables
Category:CategoryAfterPageAdded extensions
Category:CategoryAfterPageRemoved extensions
Category:CategoryPageView extensions
Category:CategoryViewer::doCategoryQuery extensions
Category:CategoryViewer::generateLink extensions
Category:CentralAuthLoginRedirectData extensions
Category:CentralAuthPostLoginRedirect extensions
Category:CentralAuthSilentLoginRedirect extensions
Category:CentralIdLookup providers
Category:ChameleonSkinTemplateOutputPageBeforeExec extensions
Category:ChangesListInitRows extensions
Category:ChangesListInsertArticleLink extensions
Category:ChangesListSpecialPageQuery extensions
Category:ChangesListSpecialPageStructuredFilters extensions
Category:ChangeTagCanCreate extensions
Category:ChangeTagsAllowedAdd extensions
Category:ChangeTagsListActive extensions
Category:Chat extensions
Category:CheckUserInsertChangesRow extensions
Category:CheckUserInsertForRecentChange extensions
Category:Chinese-specific variables
Category:Chris G's botclasses
Category:CirrusSearchAddQueryFeatures extensions
Category:CirrusSearchAnalysisConfig extensions
Category:CirrusSearchProfileService extensions
Category:CirrusSearchRegisterFullTextQueryClassifiers extensions
Category:CirrusSearchSimilarityConfig extensions
Category:Class documentation
Category:CodeEditorGetPageLanguage extensions
Category:Collation::factory extensions
Category:Comment::add extensions
Category:Comment::delete extensions
Category:Comments::isSpam extensions
Category:Community configuration
Category:Community policies
Category:Community Tech
Category:CommunityConfigurationProvider initList extensions
Category:Compatibility information templates
Category:Composer
Category:Configure
Category:ConfirmEmailComplete extensions
Category:Contact form extensions
Category:Content Discovery
Category:Content maintenance extensions
Category:Content maintenance scripts
Category:Content Security Policy variables
Category:Content Translation
Category:ContentAlterParserOutput extensions
Category:ContentGetParserOutput extensions
Category:ContentHandler
Category:ContentHandler extensions
Category:ContentHandler variables
Category:ContentHandlerDefaultModelFor extensions
Category:ContentHandlerForModelID extensions
Category:ContentModelCanBeUsedOn extensions
Category:ContentSecurityPolicyDefaultSource extensions
Category:ContentSecurityPolicyScriptSource extensions
Category:Continuous integration
Category:ContribsPager::getQueryInfo extensions
Category:ContribsPager::reallyDoQuery extensions
Category:ContributeCards extensions
Category:ContributionsLineEnding extensions
Category:ContributionsToolLinks extensions
Category:Cookies variables
Category:Copyright variables
Category:CosmosRailBuilder extensions
Category:CreateWikiCreation extensions
Category:CreateWikiDeletion extensions
Category:CreateWikiRename extensions
Category:CreateWikiStatePrivate extensions
Category:CreateWikiStatePublic extensions
Category:CreateWikiTables extensions
Category:Creative Commons licensed extensions
Category:Creative Commons licensed skins
Category:CSS
Category:CustomEditor extensions
Category:Customization techniques
Category:Dark mode
Category:Data exchange with other local wikis
Category:Data exchange with other systems
Category:Data exchange with other wikis
Category:Data exchange with remote wikis
Category:Data extraction extensions
Category:Data management extensions
Category:Database
Category:Database extensions
Category:Database maintenance scripts
Category:Database tools
Category:Database variables
Category:DBMS content extensions
Category:Debug
Category:Debug variables
Category:DeleteAccount extensions
Category:Deleted extensions with security vulnerabilities
Category:DeleteUnknownPreferences extensions
Category:Deployment
Category:Deprecated hooks
Category:Design
Category:Design Research
Category:Desktop Improvements
Category:Developer templates
Category:Development environments
Category:Development guidelines
Category:Development maintenance scripts
Category:Development notes
Category:Development tools
Category:Dictionary extensions
Category:DifferenceEngineNewHeader extensions
Category:DifferenceEngineOldHeader extensions
Category:DifferenceEngineShowDiff extensions
Category:DifferenceEngineShowDiffPage extensions
Category:DifferenceEngineViewHeader extensions
Category:DiffTools extensions
Category:Disambiguation extensions
Category:Disambiguation pages
Category:Disambiguation templates
Category:Discord extensions
Category:Discovery
Category:Discussion and forum extensions
Category:Discussions
Category:DisplayOldSubtitle extensions
Category:Disqus extensions
Category:DjVu variables
Category:Document viewer extensions
Category:Documentation
Category:Documentation examples
Category:Documentation shared content templates
Category:DynamicPageList extensions
Category:Echo
Category:EchoAbortEmailNotification extensions
Category:EchoCanAbortNewMessagesAlert extensions
Category:EchoGetBundleRules extensions
Category:EchoGetDefaultNotifiedUsers extensions
Category:EchoGetEventsForRevision extensions
Category:Edit
Category:Edit box extensions
Category:Edit extensions
Category:Edit Recovery
Category:Edit user interface variables
Category:EditFilter extensions
Category:EditFilterMergedContent extensions
Category:EditFormInitialText extensions
Category:EditFormPreloadText extensions
Category:Editor surveys
Category:EditPage::attemptSave extensions
Category:EditPage::attemptSave:after extensions
Category:EditPage::importFormData extensions
Category:EditPage::showEditForm:fields extensions
Category:EditPage::showEditForm:initial extensions
Category:EditPage::showReadOnlyForm:initial extensions
Category:EditPage::showStandardInputs:options extensions
Category:EditPageBeforeConflictDiff extensions
Category:EditPageBeforeEditButtons extensions
Category:EditPageBeforeEditToolbar extensions
Category:EditPageCopyrightWarning extensions
Category:EditPageGetCheckboxesDefinition extensions
Category:EditPageGetPreviewContent extensions
Category:EditPageNoSuchSection extensions
Category:Email
Category:Email extensions
Category:Email variables
Category:EmailConfirmed extensions
Category:EmailUser extensions
Category:EmailUserComplete extensions
Category:EmailUserForm extensions
Category:EnhancedChangesListModifyBlockLineData extensions
Category:EnhancedChangesListModifyLineData extensions
Category:Entry point URLs
Category:Error message templates
Category:Essays
Category:Events
Category:Everything to do with watchlists
Category:EXIF variables
Category:Experimental extensions
Category:Experimental tools
Category:Extended syntax extensions
Category:Extension bundles
Category:Extension comparisons
Category:Extension creation
Category:Extension examples
Category:Extension fields variables
Category:Extension help
Category:Extension registration
Category:Extension templates
Category:Extension variables
Category:Extension:EImage
Category:Extension:Graph
Category:Extension:ProofreadPage
Category:Extension:Translate
Category:Extension:Wikisource
Category:Extensions
Category:Extensions available as Debian packages
Category:Extensions bundled with MediaWiki
Category:Extensions bundled with MediaWiki 1.18
Category:Extensions bundled with MediaWiki 1.21
Category:Extensions bundled with MediaWiki 1.25
Category:Extensions bundled with MediaWiki 1.31
Category:Extensions bundled with MediaWiki 1.34
Category:Extensions bundled with MediaWiki 1.35
Category:Extensions bundled with MediaWiki 1.38
Category:Extensions bundled with MediaWiki 1.40
Category:Extensions by ArchiXL
Category:Extensions by audio element
Category:Extensions by Brickimedia
Category:Extensions by category
Category:Extensions by content source
Category:Extensions by developer
Category:Extensions by Fandom
Category:Extensions by Femiwiki
Category:Extensions by gesinn.it
Category:Extensions by HalloWelt
Category:Extensions by hook usage
Category:Extensions by implementation type
Category:Extensions by integration target
Category:Extensions by license
Category:Extensions by Miraheze
Category:Extensions by MITRE
Category:Extensions by MyWikis
Category:Extensions by page action
Category:Extensions by Professional Wiki
Category:Extensions by requirement
Category:Extensions by security risk
Category:Extensions by ShoutWiki
Category:Extensions by source location
Category:Extensions by status
Category:Extensions by usage
Category:Extensions by visual element
Category:Extensions by Wikibase Solutions
Category:Extensions by wikiHow
Category:Extensions by WikiTeq
Category:Extensions for data exchange with other local wikis
Category:Extensions for data exchange with other systems
Category:Extensions for data exchange with other wikis
Category:Extensions for data exchange with remote wikis
Category:Extensions in Bitbucket version control
Category:Extensions in GitHub version control
Category:Extensions in GitLab version control
Category:Extensions in SourceForge version control
Category:Extensions in version control
Category:Extensions in Wikimedia version control
Category:Extensions included in BlueSpice
Category:Extensions included in Canasta
Category:Extensions included in Fandom
Category:Extensions included in Miraheze
Category:Extensions included in MyWikis
Category:Extensions included in Open CSP
Category:Extensions included in ProWiki
Category:Extensions included in semantic::core
Category:Extensions included in ShoutWiki
Category:Extensions included in Telepedia
Category:Extensions included in wiki.gg
Category:Extensions included in WikiForge
Category:Extensions incompatible with 1.38
Category:Extensions incompatible with 1.39
Category:Extensions incompatible with 1.42
Category:Extensions migrated from Wiki-Tools
Category:Extensions not using extension registration
Category:Extensions requiring Composer with git
Category:Extensions requiring shell access
Category:Extensions supporting Composer
Category:Extensions supporting fundraising and donations
Category:Extensions that are just for fun
Category:Extensions used by XML Database Dumps
Category:Extensions used on Wikimedia
Category:Extensions using deprecated hooks
Category:Extensions using hooks from redlinked sources
Category:Extensions using redlinked hooks
Category:Extensions using removed hooks
Category:Extensions using unrecognized hooks
Category:Extensions which add rights
Category:Extensions which host their code in-wiki
Category:Extensions with arbitrary execution vulnerabilities
Category:Extensions with invalid or missing type
Category:Extensions with invalid status
Category:Extensions with no license specified
Category:Extensions with security vulnerabilities
Category:Extensions with StructuredDiscussions support
Category:Extensions with unknown license
Category:Extensions with unknown status
Category:Extensions with VisualEditor support
Category:Extensions with XSS vulnerabilities
Category:ExtensionTypes extensions
Category:External link templates
Category:Fandom
Category:FDL licensed extensions
Category:Feed generator extensions
Category:Feed variables
Category:FetchChangesList extensions
Category:File maintenance scripts
Category:File namespace templates
Category:File repository extensions
Category:File system content extensions
Category:FileDeleteComplete extensions
Category:FileUndeleteComplete extensions
Category:FileUpload extensions
Category:Firefox Extensions
Category:Flickr extensions
Category:FlowAddModules extensions
Category:Form extensions
Category:FormatAutocomments extensions
Category:Formatting templates
Category:Frontend
Category:Frontend variables
Category:Fundraising
Category:Future
Category:Gadgets
Category:GalleryGetModes extensions
Category:Geocode extensions
Category:Gerrit
Category:GeSHi extensions
Category:GetActionName extensions
Category:GetAllBlockActions extensions
Category:GetAutoPromoteGroups extensions
Category:GetBetaFeaturePreferences extensions
Category:GetCacheVaryCookies extensions
Category:GetContentModels extensions
Category:GetDifferenceEngine extensions
Category:GetDoubleUnderscoreIDs extensions
Category:GetEntityByLinkedTitleLookup extensions
Category:GetEntityContentModelForTitle extensions
Category:GetExtendedMetadata extensions
Category:GetFullURL extensions
Category:GetHumanTimestamp extensions
Category:GetLinkColours extensions
Category:GetLocalURL extensions
Category:GetLocalURL::Article extensions
Category:GetLogTypesOnUser extensions
Category:GetMagicVariableIDs extensions
Category:GetNewMessagesAlert extensions
Category:GetPreferences extensions
Category:GetUserBlock extensions
Category:GetUserPermissionsErrors extensions
Category:GetUserPermissionsErrorsExpensive extensions
Category:Git
Category:GitLab
Category:Global object variables
Category:Global Objects variables
Category:Global templates
Category:GlobalBlockingGetRetroactiveAutoblockIPs extensions
Category:GlobalBlockingGlobalBlockAudit extensions
Category:Glossary
Category:Google extensions
Category:Google Maps extensions
Category:GoogleNewsSitemap::Query extensions
Category:GPL licensed extensions
Category:GPL licensed skins
Category:Graph extensions
Category:Graphical Timelines
Category:GraphViz extensions
Category:Growth
Category:Growth 2014
Category:Hatnote templates
Category:Header templates
Category:Headers and footers extensions
Category:Help
Category:Help needed templates
Category:History and diffs
Category:HistoryPageToolLinks extensions
Category:HistoryTools extensions
Category:Hook extensions
Category:Hook templates
Category:Hooks
Category:Hooks added in MediaWiki 1.10.1
Category:Hooks added in MediaWiki 1.11.0
Category:Hooks added in MediaWiki 1.12.0
Category:Hooks added in MediaWiki 1.13.0
Category:Hooks added in MediaWiki 1.14.0
Category:Hooks added in MediaWiki 1.15.0
Category:Hooks added in MediaWiki 1.16.0
Category:Hooks added in MediaWiki 1.17.0
Category:Hooks added in MediaWiki 1.18.0
Category:Hooks added in MediaWiki 1.21.0
Category:Hooks added in MediaWiki 1.22.0
Category:Hooks added in MediaWiki 1.24.0
Category:Hooks added in MediaWiki 1.25.0
Category:Hooks added in MediaWiki 1.26.0
Category:Hooks added in MediaWiki 1.27.0
Category:Hooks added in MediaWiki 1.37.0
Category:Hooks added in MediaWiki 1.4.0
Category:Hooks added in MediaWiki 1.5.0
Category:Hooks added in MediaWiki 1.6.0
Category:Hooks added in MediaWiki 1.6.4
Category:Hooks added in MediaWiki 1.7.0
Category:Hooks added in MediaWiki 1.8.0
Category:Hooks added in MediaWiki ???
Category:Hooks deprecated in MediaWiki 1.21.0
Category:Hooks deprecated in MediaWiki 1.28.0
Category:Hooks deprecated in MediaWiki 1.35.0
Category:Hooks deprecated in MediaWiki 1.37.0
Category:Hooks deprecated in MediaWiki 1.39
Category:Hooks removed in MediaWiki 1.29.0
Category:Hooks removed in MediaWiki 1.34.0
Category:Hooks removed in MediaWiki 1.36.0
Category:Hooks removed in MediaWiki 1.37.0
Category:Hooks removed in MediaWiki 1.38.0
Category:Hooks removed in MediaWiki 1.41.0
Category:HTCP multicast purging variables
Category:HTML body extensions
Category:HTML head extensions
Category:HTML variables
Category:HTMLFileCache::useFileCache extensions
Category:HtmlPageLinkRendererBegin extensions
Category:HtmlPageLinkRendererEnd extensions
Category:HTTP client variables
Category:Huggle
Category:Image extensions
Category:Image map extensions
Category:Image variables
Category:Image with comment templates
Category:ImageBeforeProduceHTML extensions
Category:ImageMagick variables
Category:ImageOpenShowImageInlineBefore extensions
Category:ImagePageAfterImageLinks extensions
Category:ImagePageFileHistoryLine extensions
Category:ImagePageFindFile extensions
Category:Images
Category:ImgAuthBeforeStream extensions
Category:Import extensions
Category:Import/Export
Category:Import/Export variables
Category:ImportHandlePageXMLTag extensions
Category:ImportHandleRevisionXMLTag extensions
Category:ImportHandleUnknownUser extensions
Category:Incompatible extensions
Category:Incorrect documentation
Category:Info templates
Category:InfoAction extensions
Category:Infobox extensions
Category:Infobox templates
Category:InitializeArticleMaybeRedirect extensions
Category:Inline templates
Category:Installation
Category:Installation guide templates
Category:Interface messages
Category:Internal link templates
Category:InternalParseBeforeLinks extensions
Category:Internationalization extensions
Category:Internationalization templates
Category:Interwiki
Category:Interwiki cache variables
Category:Interwiki extensions
Category:Interwiki maintenance scripts
Category:Interwiki variables
Category:Inuka Projects
Category:InvalidateEmailComplete extensions
Category:IRC
Category:IRC bot
Category:IRC extensions
Category:ISC licensed extensions
Category:IsTrustedProxy extensions
Category:IsUploadAllowedFromUrl extensions
Category:JavaScript
Category:JavaScript variables
Category:Job queue
Category:Job queue variables
Category:Jobs maintenance scripts
Category:JRE extensions
Category:JsonValidateSave extensions
Category:Language Engineering
Category:Language maintenance scripts
Category:Language templates
Category:Language-specific variables
Category:Language::getMessagesFileName extensions
Category:LanguageGetMagic extensions
Category:LanguageGetTranslatedLanguageNames extensions
Category:Languages pages
Category:LDAP extensions
Category:LDAP Stack Member
Category:Leaflet extensions
Category:LGPL licensed extensions
Category:Libraries
Category:License templates
Category:Link
Category:Link extensions
Category:Link markup extensions
Category:Link templates
Category:LinkedWiki
Category:LinkerMakeExternalImage extensions
Category:LinkerMakeExternalLink extensions
Category:LinksUpdate extensions
Category:LinksUpdateComplete extensions
Category:Linter
Category:LiquidThreads
Category:List
Category:List extensions
Category:ListDefinedTags extensions
Category:LoadBalancer settings variables
Category:LoadExtensionSchemaUpdates extensions
Category:LoadUserOptions extensions
Category:LocalFilePurgeThumbnails extensions
Category:Localisation
Category:Localisation extensions
Category:LocalisationCacheRecache extensions
Category:LocalUserCreated extensions
Category:Log
Category:Log extensions
Category:Log variables
Category:LogEventsListGetExtraInputs extensions
Category:LogEventsListLineEnding extensions
Category:Logging variables
Category:Login extensions
Category:LoginFormValidErrorMessages extensions
Category:LonelyPagesQuery extensions
Category:Lua
Category:Magic words
Category:MagicWordwgVariableIDs extensions
Category:Main page templates
Category:Maintenance
Category:Maintenance scripts
Category:Maintenance scripts setting variables
Category:MaintenanceRefreshLinksInit extensions
Category:MakeGlobalVariablesScript extensions
Category:Manual
Category:ManualLogEntryBeforePublish extensions
Category:Map extensions
Category:Mapping
Category:MarkPatrolledComplete extensions
Category:Markup languages
Category:Math display extensions
Category:Math extensions
Category:Math variables
Category:Mbox templates
Category:Media handling extensions
Category:Media Viewer
Category:MediaWiki action API
Category:MediaWiki administration
Category:MediaWiki API
Category:MediaWiki API generators
Category:MediaWiki API query lists
Category:MediaWiki APIs
Category:MediaWiki code
Category:MediaWiki code pages without class names
Category:MediaWiki Communication
Category:MediaWiki components
Category:MediaWiki concepts
Category:MediaWiki configuration
Category:MediaWiki configuration settings
Category:MediaWiki configuration settings containing sensitive data
Category:MediaWiki configuration settings deprecated in version 1.13.0
Category:MediaWiki configuration settings deprecated in version 1.16.0
Category:MediaWiki configuration settings deprecated in version 1.17.0
Category:MediaWiki configuration settings deprecated in version 1.18.0
Category:MediaWiki configuration settings deprecated in version 1.20.0
Category:MediaWiki configuration settings deprecated in version 1.21.0
Category:MediaWiki configuration settings deprecated in version 1.22.0
Category:MediaWiki configuration settings deprecated in version 1.23.0
Category:MediaWiki configuration settings deprecated in version 1.24.0
Category:MediaWiki configuration settings deprecated in version 1.25.0
Category:MediaWiki configuration settings deprecated in version 1.26.0
Category:MediaWiki configuration settings deprecated in version 1.27.0
Category:MediaWiki configuration settings deprecated in version 1.29.0
Category:MediaWiki configuration settings deprecated in version 1.3.0
Category:MediaWiki configuration settings deprecated in version 1.30.0
Category:MediaWiki configuration settings deprecated in version 1.31.0
Category:MediaWiki configuration settings deprecated in version 1.32.0
Category:MediaWiki configuration settings deprecated in version 1.33.0
Category:MediaWiki configuration settings deprecated in version 1.34.0
Category:MediaWiki configuration settings deprecated in version 1.35.0
Category:MediaWiki configuration settings deprecated in version 1.36.0
Category:MediaWiki configuration settings deprecated in version 1.37.0
Category:MediaWiki configuration settings deprecated in version 1.38.0
Category:MediaWiki configuration settings deprecated in version 1.39.0
Category:MediaWiki configuration settings deprecated in version 1.4.0
Category:MediaWiki configuration settings deprecated in version 1.41.0
Category:MediaWiki configuration settings deprecated in version 1.42.0
Category:MediaWiki configuration settings deprecated in version 1.43.0
Category:MediaWiki configuration settings deprecated in version 1.5.0
Category:MediaWiki configuration settings deprecated in version 1.6.0
Category:MediaWiki configuration settings introduced before version 1.1.0
Category:MediaWiki configuration settings introduced in version 1.1.0
Category:MediaWiki configuration settings introduced in version 1.10.0
Category:MediaWiki configuration settings introduced in version 1.11.0
Category:MediaWiki configuration settings introduced in version 1.12.0
Category:MediaWiki configuration settings introduced in version 1.13.0
Category:MediaWiki configuration settings introduced in version 1.14.0
Category:MediaWiki configuration settings introduced in version 1.15.0
Category:MediaWiki configuration settings introduced in version 1.16.0
Category:MediaWiki configuration settings introduced in version 1.16.1
Category:MediaWiki configuration settings introduced in version 1.17.0
Category:MediaWiki configuration settings introduced in version 1.18.0
Category:MediaWiki configuration settings introduced in version 1.18.1
Category:MediaWiki configuration settings introduced in version 1.19.0
Category:MediaWiki configuration settings introduced in version 1.2.0
Category:MediaWiki configuration settings introduced in version 1.2.1
Category:MediaWiki configuration settings introduced in version 1.2.4
Category:MediaWiki configuration settings introduced in version 1.2.5
Category:MediaWiki configuration settings introduced in version 1.2.6
Category:MediaWiki configuration settings introduced in version 1.20.0
Category:MediaWiki configuration settings introduced in version 1.21.0
Category:MediaWiki configuration settings introduced in version 1.22.0
Category:MediaWiki configuration settings introduced in version 1.23.0
Category:MediaWiki configuration settings introduced in version 1.23.12
Category:MediaWiki configuration settings introduced in version 1.23.7
Category:MediaWiki configuration settings introduced in version 1.24.0
Category:MediaWiki configuration settings introduced in version 1.25.0
Category:MediaWiki configuration settings introduced in version 1.25.3
Category:MediaWiki configuration settings introduced in version 1.26.0
Category:MediaWiki configuration settings introduced in version 1.27.0
Category:MediaWiki configuration settings introduced in version 1.27.4
Category:MediaWiki configuration settings introduced in version 1.28.0
Category:MediaWiki configuration settings introduced in version 1.29.0
Category:MediaWiki configuration settings introduced in version 1.3.0
Category:MediaWiki configuration settings introduced in version 1.3.3
Category:MediaWiki configuration settings introduced in version 1.3.4
Category:MediaWiki configuration settings introduced in version 1.3.8
Category:MediaWiki configuration settings introduced in version 1.30.0
Category:MediaWiki configuration settings introduced in version 1.31.0
Category:MediaWiki configuration settings introduced in version 1.32.0
Category:MediaWiki configuration settings introduced in version 1.33.0
Category:MediaWiki configuration settings introduced in version 1.34.0
Category:MediaWiki configuration settings introduced in version 1.34.3
Category:MediaWiki configuration settings introduced in version 1.35.0
Category:MediaWiki configuration settings introduced in version 1.35.1
Category:MediaWiki configuration settings introduced in version 1.35.3
Category:MediaWiki configuration settings introduced in version 1.36.0
Category:MediaWiki configuration settings introduced in version 1.37.0
Category:MediaWiki configuration settings introduced in version 1.37.2
Category:MediaWiki configuration settings introduced in version 1.38.0
Category:MediaWiki configuration settings introduced in version 1.39.0
Category:MediaWiki configuration settings introduced in version 1.4.0
Category:MediaWiki configuration settings introduced in version 1.4.1
Category:MediaWiki configuration settings introduced in version 1.4.2
Category:MediaWiki configuration settings introduced in version 1.4.5
Category:MediaWiki configuration settings introduced in version 1.4.6
Category:MediaWiki configuration settings introduced in version 1.40.0
Category:MediaWiki configuration settings introduced in version 1.40.1
Category:MediaWiki configuration settings introduced in version 1.41.0
Category:MediaWiki configuration settings introduced in version 1.42.0
Category:MediaWiki configuration settings introduced in version 1.43.0
Category:MediaWiki configuration settings introduced in version 1.44.0
Category:MediaWiki configuration settings introduced in version 1.5.0
Category:MediaWiki configuration settings introduced in version 1.5.1
Category:MediaWiki configuration settings introduced in version 1.5.7
Category:MediaWiki configuration settings introduced in version 1.6.0
Category:MediaWiki configuration settings introduced in version 1.6.4
Category:MediaWiki configuration settings introduced in version 1.7.0
Category:MediaWiki configuration settings introduced in version 1.8.0
Category:MediaWiki configuration settings introduced in version 1.8.1
Category:MediaWiki configuration settings introduced in version 1.9.0
Category:MediaWiki configuration settings removed in version 1.10.0
Category:MediaWiki configuration settings removed in version 1.11.0
Category:MediaWiki configuration settings removed in version 1.13.0
Category:MediaWiki configuration settings removed in version 1.14.0
Category:MediaWiki configuration settings removed in version 1.16.0
Category:MediaWiki configuration settings removed in version 1.17.0
Category:MediaWiki configuration settings removed in version 1.18.0
Category:MediaWiki configuration settings removed in version 1.19.0
Category:MediaWiki configuration settings removed in version 1.2.0
Category:MediaWiki configuration settings removed in version 1.20.0
Category:MediaWiki configuration settings removed in version 1.20.1
Category:MediaWiki configuration settings removed in version 1.21.0
Category:MediaWiki configuration settings removed in version 1.22.0
Category:MediaWiki configuration settings removed in version 1.23.0
Category:MediaWiki configuration settings removed in version 1.24.0
Category:MediaWiki configuration settings removed in version 1.25.0
Category:MediaWiki configuration settings removed in version 1.26.0
Category:MediaWiki configuration settings removed in version 1.27.0
Category:MediaWiki configuration settings removed in version 1.28.0
Category:MediaWiki configuration settings removed in version 1.29.0
Category:MediaWiki configuration settings removed in version 1.3.0
Category:MediaWiki configuration settings removed in version 1.30.0
Category:MediaWiki configuration settings removed in version 1.31.0
Category:MediaWiki configuration settings removed in version 1.32.0
Category:MediaWiki configuration settings removed in version 1.33.0
Category:MediaWiki configuration settings removed in version 1.34.0
Category:MediaWiki configuration settings removed in version 1.35.0
Category:MediaWiki configuration settings removed in version 1.36.0
Category:MediaWiki configuration settings removed in version 1.37.0
Category:MediaWiki configuration settings removed in version 1.38.0
Category:MediaWiki configuration settings removed in version 1.39.0
Category:MediaWiki configuration settings removed in version 1.4.0
Category:MediaWiki configuration settings removed in version 1.4.1
Category:MediaWiki configuration settings removed in version 1.4.5
Category:MediaWiki configuration settings removed in version 1.40.0
Category:MediaWiki configuration settings removed in version 1.41.0
Category:MediaWiki configuration settings removed in version 1.42.0
Category:MediaWiki configuration settings removed in version 1.43.0
Category:MediaWiki configuration settings removed in version 1.44.0
Category:MediaWiki configuration settings removed in version 1.5.0
Category:MediaWiki configuration settings removed in version 1.6.0
Category:MediaWiki configuration settings removed in version 1.7.0
Category:MediaWiki configuration settings removed in version 1.8.0
Category:MediaWiki configuration settings removed in version 1.9.0
Category:MediaWiki configuration settings still in use
Category:MediaWiki configuration settings version unknown
Category:MediaWiki database tables
Category:MediaWiki database tables that lack a primary key
Category:MediaWiki deprecated or obsolete features
Category:MediaWiki developer meetings
Category:MediaWiki development
Category:MediaWiki development process
Category:MediaWiki documentation needed
Category:MediaWiki features requiring implementation by local wikis
Category:MediaWiki for site admins
Category:MediaWiki for translators
Category:MediaWiki for users
Category:MediaWiki history
Category:MediaWiki hooks
Category:MediaWiki Introduction
Category:MediaWiki news templates
Category:MediaWiki Projects
Category:MediaWiki References
Category:MediaWiki Release Notes
Category:MediaWiki Releases
Category:MediaWiki Stakeholders' Group
Category:MediaWiki technical documentation
Category:MediaWiki tools
Category:MediaWiki Users and Developers Conference
Category:MediaWiki version information templates
Category:MediaWiki version templates
Category:MediaWiki-Vagrant
Category:MediaWiki.org administrators
Category:MediaWiki.org interface
Category:MediaWiki.org users
Category:MediaWiki.org website
Category:MediaWiki.org WikiProjects
Category:MediaWikiPerformAction extensions
Category:MediaWikiServices extensions
Category:Meetings
Category:Mentorship programs
Category:Menu extensions
Category:MergeAccountFromTo extensions
Category:MessageCacheFetchOverrides extensions
Category:MessageCacheReplace extensions
Category:MessagesPreLoad extensions
Category:Metadata
Category:MIME types variables
Category:MinervaPreRender extensions
Category:Miraheze
Category:Miscellaneous settings variables
Category:MIT licensed extensions
Category:MIT licensed skins
Category:Mobile
Category:Mobile skins
Category:Mobile support variables
Category:MobileFrontend
Category:MobileFrontendBeforeDOM extensions
Category:MobileFrontendFeaturesRegistration extensions
Category:MobileMenu extensions
Category:Modifiable variables extensions
Category:ModifyExportQuery extensions
Category:Module documentation pages
Category:Modules
Category:MonacoRightSidebar extensions
Category:MovePageCheckPermissions extensions
Category:MovePageIsValidMove extensions
Category:MultiContentSave extensions
Category:Multimedia
Category:Music editor extensions
Category:MWStakeCommonUIRegisterSkinSlotComponents extensions
Category:MWStakeRunJobsTriggerRegisterHandlers extensions
Category:MySQL specific variables
Category:Namespace
Category:Namespace extensions
Category:Namespace variables
Category:NamespaceIsMovable extensions
Category:Navigation templates
Category:New contributors
Category:New contributors task lists
Category:New Editor Engagement
Category:NewDifferenceEngine extensions
Category:News bar extensions
Category:Notice templates
Category:Notification extensions
Category:NukeDeletePage extensions
Category:Number extensions
Category:Obsolete extensions
Category:Offline
Category:Old upgrade documentation
Category:OldChangesListRecentChangesLine extensions
Category:On-line learning extensions
Category:OOjs
Category:OOUI
Category:OpenLayers extensions
Category:ORES
Category:ORESCheckModels extensions
Category:OtherBlockLogLink extensions
Category:Outdated pages
Category:Output variables
Category:OutputPageBeforeHTML extensions
Category:OutputPageBodyAttributes extensions
Category:OutputPageCheckLastModified extensions
Category:OutputPageMakeCategoryLinks extensions
Category:OutputPageParserOutput extensions
Category:Page action extensions
Category:Page content extensions
Category:Page creation extensions
Category:Page deletion extensions
Category:Page existence detection
Category:Page metadata extensions
Category:Page renaming extensions
Category:Page specific user rights extensions
Category:Page titles and redirects variables
Category:PageContentLanguage extensions
Category:PageContentSave extensions
Category:PageDeleteComplete extensions
Category:PageForms::AddRLModules extensions
Category:PageForms::EditFormInitialText extensions
Category:PageForms::EditFormPreloadText extensions
Category:PageForms::HTMLBeforeForm extensions
Category:PageForms::RenderingEnd extensions
Category:PageForms::TemplateFieldEnd extensions
Category:PageForms::TemplateFieldStart extensions
Category:PageHistoryBeforeList extensions
Category:PageHistoryLineEnding extensions
Category:PageHistoryPager::getQueryInfo extensions
Category:PageMoveComplete extensions
Category:PageMoveCompleting extensions
Category:PageRenderingHash extensions
Category:Pages kept for historical interest
Category:Pages that need checking
Category:Pages to be expanded
Category:Pages to be merged
Category:Pages using columns with the default column width
Category:Pages with a wanted MediaWiki version number
Category:PageSaveComplete extensions
Category:PageSchemasRegisterHandlers extensions
Category:PageUndeleteComplete extensions
Category:PageViewUpdates extensions
Category:Parameters to special pages
Category:Parser
Category:Parser extensions
Category:Parser function extensions
Category:Parser manuals
Category:Parser variables
Category:ParserAfterParse extensions
Category:ParserAfterTidy extensions
Category:ParserBeforeInternalParse extensions
Category:ParserBeforePreprocess extensions
Category:ParserBeforeStrip extensions
Category:ParserCacheSaveComplete extensions
Category:ParserClearState extensions
Category:ParserCloned extensions
Category:ParserFetchTemplateData extensions
Category:ParserFirstCallInit extensions
Category:ParserGetVariableValueSwitch extensions
Category:ParserLimitReport extensions
Category:ParserLimitReportFormat extensions
Category:ParserLimitReportPrepare extensions
Category:ParserMakeImageParams extensions
Category:ParserModifyImageHTML extensions
Category:ParserOptionsRegister extensions
Category:ParserOutputPostCacheTransform extensions
Category:ParserOutputStashForEdit extensions
Category:ParserTestGlobals extensions
Category:Parsoid
Category:PasswordPoliciesForUser extensions
Category:Path
Category:Path variables
Category:PayPal extensions
Category:PDF extensions
Category:Performance development
Category:Performance tuning
Category:PerformRetroactiveAutoblock extensions
Category:Permission
Category:Permission variables
Category:Personalization
Category:Personalization extensions
Category:Phabricator
Category:PHP extensions
Category:PHP libraries
Category:PhpTags extensions
Category:PhpTagsRuntimeFirstInit extensions
Category:PluggableAuth plugins
Category:PluggableAuthPopulateGroups extensions
Category:PluggableAuthUserAuthorization extensions
Category:Policy
Category:Poll extensions
Category:Polling templates
Category:Popup extensions
Category:PostgreSQL specific variables
Category:PostLoginRedirect extensions
Category:Powerpedia related extensions
Category:Preferences
Category:PreferencesFormPreSave extensions
Category:PreferencesGetIcon extensions
Category:Preview
Category:Programming languages
Category:Project help
Category:Project status
Category:ProtectionForm::buildForm extensions
Category:ProtectionForm::save extensions
Category:ProtectionForm::showLogExtract extensions
Category:ProtectionFormAddFormFields extensions
Category:Proxies variables
Category:Public domain licensed extensions
Category:Public domain licensed skins
Category:Pywikibot
Category:Pywikibot archive
Category:Pywikibot compat
Category:Pywikibot compat scripts
Category:Pywikibot compat to core
Category:Pywikibot configuration files
Category:Pywikibot scripts
Category:Random content extensions
Category:Random page
Category:Random page extensions
Category:RandomPageQuery extensions
Category:Rating extensions
Category:RawPageViewBeforeOutput extensions
Category:Real name display extensions
Category:Recent changes
Category:Recent Changes extensions
Category:Recent changes variables
Category:RecentChange save extensions
Category:RecentChangesPurgeRows extensions
Category:Redirect
Category:Redirect extensions
Category:Redirect templates
Category:Redirect variables
Category:RedirectSpecialArticleRedirectParams extensions
Category:Reduction variables
Category:Referencing extensions
Category:RejectParserCacheValue extensions
Category:Release Engineering Team
Category:Remote content extensions
Category:Removed hooks
Category:RenameUserComplete extensions
Category:RenameUserPreRename extensions
Category:RenameUserSQL extensions
Category:RenameUserWarning extensions
Category:RequestContextCreateSkin extensions
Category:RequestContextCreateSkinMobile extensions
Category:Research
Category:Resource loader variables
Category:ResourceLoader
Category:ResourceLoaderForeignApiModules extensions
Category:ResourceLoaderGetConfigVars extensions
Category:ResourceLoaderJqueryMsgModuleMagicWords extensions
Category:ResourceLoaderRegisterModules extensions
Category:ResourceLoaderSiteModulePages extensions
Category:ResourceLoaderSiteStylesModulePages extensions
Category:ResourceLoaderTestModules extensions
Category:Revision management extensions
Category:RevisionDataUpdates extensions
Category:RevisionFromEditComplete extensions
Category:RevisionRecordInserted extensions
Category:RevisionUndeleted extensions
Category:Robot policies variables
Category:Robot policy
Category:RollbackComplete extensions
Category:RSS extensions
Category:Sample code
Category:SaveUserOptions extensions
Category:Scoring platform
Category:Scribunto extensions
Category:ScribuntoExternalLibraries extensions
Category:ScribuntoExternalLibraryPaths extensions
Category:Script embedding extensions
Category:Script variables
Category:Search
Category:Search engine optimization
Category:Search engine optimization extensions
Category:Search extensions
Category:Search messages
Category:Search templates
Category:Search variables
Category:Search widget extensions
Category:SearchableNamespaces extensions
Category:SearchAfterNoDirectMatch extensions
Category:SearchDataForIndex extensions
Category:SearchDataForIndex2 extensions
Category:SearchGetNearMatch extensions
Category:SearchGetNearMatchComplete extensions
Category:SearchIndexFields extensions
Category:SearchResultInitFromTitle extensions
Category:SearchResultProvideDescription extensions
Category:SearchResultProvideThumbnail extensions
Category:SectionTranslationBeforePublish extensions
Category:SecurePoll GetUserParams extensions
Category:Security
Category:Security variables
Category:Selenium/Node.js
Category:SelfLinkBegin extensions
Category:Semantic Bundle extensions
Category:Semantic MediaWiki extensions
Category:SendWatchlistEmailNotification extensions
Category:SessionCheckInfo extensions
Category:SetupAfterCache extensions
Category:Shared database
Category:Shared uploads variables
Category:Shell variables
Category:Shortcut templates
Category:ShortPagesQuery extensions
Category:ShoutWiki
Category:ShowMissingArticle extensions
Category:ShowSearchHit extensions
Category:ShowSearchHitTitle extensions
Category:SidebarBeforeOutput extensions
Category:Simple extensions
Category:Site customization variables
Category:Site management extensions
Category:Site Statistics variables
Category:Sitemap
Category:SiteNoticeAfter extensions
Category:Skin extensions
Category:Skin templates
Category:Skin variables
Category:SkinAddFooterLinks extensions
Category:SkinAfterBottomScripts extensions
Category:SkinAfterContent extensions
Category:SkinAfterPortlet extensions
Category:SkinBuildSidebar extensions
Category:SkinCopyrightFooter extensions
Category:SkinCopyrightFooterMessage extensions
Category:SkinEditSectionLinks extensions
Category:SkinMinervaDefaultModules extensions
Category:SkinMinervaOptionsInit extensions
Category:SkinMinervaReplaceNotificationsBadge extensions
Category:Skinning
Category:SkinPageReadyConfig extensions
Category:SkinPreloadExistence extensions
Category:Skins available as Debian packages
Category:Skins based on Bootstrap
Category:Skins based on WordPress themes
Category:Skins bundled with MediaWiki
Category:Skins bundled with MediaWiki 1.3
Category:Skins bundled with MediaWiki 1.31
Category:Skins bundled with MediaWiki 1.38
Category:Skins by Brickimedia
Category:Skins by developer
Category:Skins by Femiwiki
Category:Skins by license
Category:Skins by Professional Wiki
Category:Skins by ShoutWiki
Category:Skins by status
Category:Skins by usage
Category:Skins in Bitbucket version control
Category:Skins in GitHub version control
Category:Skins in version control
Category:Skins in Wikimedia version control
Category:Skins included in BlueSpice
Category:Skins included in Canasta
Category:Skins included in Miraheze
Category:Skins included in MyWikis
Category:Skins included in ProWiki
Category:Skins included in semantic::core
Category:Skins included in ShoutWiki
Category:Skins included in Telepedia
Category:Skins included in wiki.gg
Category:Skins included in WikiForge
Category:Skins supporting Composer
Category:Skins that have additional setup requirements
Category:Skins used on Wikimedia
Category:Skins using deprecated features
Category:Skins with dark mode
Category:Skins with no license specified
Category:Skins with unknown license
Category:Skins with unknown status
Category:Skins without an example
Category:SkinTemplateContentActions extensions
Category:SkinTemplateGetLanguageLink extensions
Category:SkinTemplateNavigation extensions
Category:SkinTemplateNavigation::Universal extensions
Category:SkinTemplateOutputPageBeforeExec extensions
Category:SkinTemplateToolboxEnd extensions
Category:SMW::Browse::AfterIncomingPropertiesLookupComplete extensions
Category:SMW::Config::BeforeCompletion extensions
Category:SMW::DataType::initTypes extensions
Category:SMW::GetPreferences extensions
Category:SMW::Parser::BeforeMagicWordsFinder extensions
Category:SMW::Property::initProperties extensions
Category:SMW::Settings::BeforeInitializationComplete extensions
Category:SMW::Setup::AfterInitializationComplete extensions
Category:SMW::SQLStore::AddCustomFixedPropertyTables extensions
Category:SMW::SQLStore::AfterDataUpdateComplete extensions
Category:SMW::SQLStore::AfterDeleteSubjectComplete extensions
Category:SmwInitProperties extensions
Category:SMWResultFormat extensions
Category:SMWStore::updateDataBefore extensions
Category:Snippets
Category:Social bookmarking extensions
Category:Social tools
Category:SoftwareInfo extensions
Category:Spam management
Category:Spam management extensions
Category:SPARQL
Category:SPARQL extensions
Category:Special page extensions
Category:Special Pages
Category:Special pages variables
Category:SpecialContributions::formatRow::flags extensions
Category:SpecialContributions::getForm::filters extensions
Category:SpecialContributionsBeforeMainOutput extensions
Category:Specialized groups
Category:SpecialListusersFormatRow extensions
Category:SpecialListusersHeader extensions
Category:SpecialListusersHeaderForm extensions
Category:SpecialListusersQueryInfo extensions
Category:SpecialLogAddLogSearchRelations extensions
Category:SpecialMobileEditWatchlist::images extensions
Category:SpecialMovepageAfterMove extensions
Category:SpecialMuteModifyFormFields extensions
Category:SpecialNewpagesConditions extensions
Category:SpecialNewPagesFilters extensions
Category:SpecialPage initList extensions
Category:SpecialPageAfterExecute extensions
Category:SpecialPageBeforeExecute extensions
Category:SpecialPageBeforeFormDisplay extensions
Category:SpecialPasswordResetOnSubmit extensions
Category:SpecialPrefixIndexGetFormFilters extensions
Category:SpecialPrefixIndexQuery extensions
Category:SpecialRandomGetRandomTitle extensions
Category:SpecialRecentChangesPanel extensions
Category:SpecialSearchCreateLink extensions
Category:SpecialSearchGoResult extensions
Category:SpecialSearchNoResults extensions
Category:SpecialSearchPowerBox extensions
Category:SpecialSearchProfileForm extensions
Category:SpecialSearchProfiles extensions
Category:SpecialSearchResults extensions
Category:SpecialSearchResultsAppend extensions
Category:SpecialSearchResultsPrepend extensions
Category:SpecialSearchSetupEngine extensions
Category:SpecialStatsAddExtra extensions
Category:SpecialTrackingCategories::generateCatLink extensions
Category:SpecialTrackingCategories::preprocess extensions
Category:SpecialUploadComplete extensions
Category:SpecialWatchlistGetNonRevisionTypes extensions
Category:SpecialWhatLinksHereQuery extensions
Category:Spreadsheets extensions
Category:SQLite specific variables
Category:Squid variables
Category:Stable extensions
Category:Stable skins
Category:Stable tools
Category:StandardDialogsRegisterPageInfoPanelModules extensions
Category:Statistics
Category:Statistics extensions
Category:Stats maintenance scripts
Category:Storage maintenance scripts
Category:Structured Data Across Wikimedia
Category:Structured Discussions
Category:Subpage
Category:Subpage extensions
Category:Subpage variables
Category:Summer of Code
Category:Summer of Code 2006
Category:Summer of Code 2009
Category:Summer of Code 2010
Category:Surveys
Category:SVG
Category:SVG extensions
Category:SVG variables
Category:SVN
Category:Syntax highlighting extensions
Category:System message
Category:Table extensions
Category:Tables
Category:Tag cloud extensions
Category:Tag extensions
Category:Talk header templates
Category:Talk pages project
Category:Task extensions
Category:Template
Category:Template documentation
Category:Template documentation pages
Category:Template examples
Category:Template extensions
Category:TemplateData documentation
Category:Templates
Category:Templates by style
Category:Templates using TemplateData
Category:Templates using TemplateStyles
Category:Temporal templates
Category:Temporary Accounts
Category:TestCanonicalRedirect extensions
Category:Testing
Category:TeX
Category:TeX variables
Category:Throttling
Category:Thumbnail settings variables
Category:ThumbnailBeforeProduceHTML extensions
Category:Thumbnailing
Category:Tidy
Category:Tidy variables
Category:Time
Category:Timezone settings variables
Category:TinyMCEDisable extensions
Category:Title templates
Category:TitleGetEditNotices extensions
Category:TitleGetRestrictionTypes extensions
Category:TitleIsAlwaysKnown extensions
Category:TitleMove extensions
Category:TitleMoveComplete extensions
Category:TitleMoveStarting extensions
Category:TitleQuickPermissions extensions
Category:TitleReadWhitelist extensions
Category:TitleSquidURLs extensions
Category:TOC extensions
Category:Tool creation
Category:Tools
Category:Tools by status
Category:Tools in Wikimedia version control
Category:Tools with invalid or missing type
Category:Tools with no license specified
Category:Top level
Category:TorBlockBlockedMsg extensions
Category:Transcription extensions
Category:Translate extension tutorials
Category:Translate:newTranslation extensions
Category:TranslateEventMessageMembershipChange extensions
Category:TranslateEventTranslationReview extensions
Category:TranslateInitGroupLoaders extensions
Category:TranslateSupportedLanguages extensions
Category:Translation
Category:Tree extensions
Category:Tutorials
Category:Twitter extensions
Category:Typing-aid templates
Category:UDP updates variables
Category:ULS Input methods
Category:UnblockUserComplete extensions
Category:UndeletePageToolLinks extensions
Category:UnitTestsAfterDatabaseSetup extensions
Category:UnitTestsBeforeDatabaseTeardown extensions
Category:UnitTestsList extensions
Category:Universal Language Selector
Category:UnknownAction extensions
Category:Unmaintained extensions
Category:Unmaintained Semantic MediaWiki extensions
Category:Unmaintained skins
Category:Unstable extensions
Category:Upgrading
Category:Upload
Category:Upload variables
Category:UploadComplete extensions
Category:Uploaders
Category:UploadForm:BeforeProcessing extensions
Category:UploadForm:getInitialPageText extensions
Category:UploadForm:initial extensions
Category:UploadFormInitDescriptor extensions
Category:UploadStashFile extensions
Category:UploadVerification extensions
Category:UploadVerifyFile extensions
Category:UploadVerifyUpload extensions
Category:Usability initiative extensions
Category:Used on Wikimedia
Category:User access extensions
Category:User activity extensions
Category:User agent variables
Category:User experience
Category:User extensions
Category:User groups
Category:User identity extensions
Category:User interface
Category:User interface extensions
Category:User maintenance scripts
Category:User rights extensions
Category:User templates
Category:User::mailPasswordInternal extensions
Category:UserArrayFromResult extensions
Category:Userboxes
Category:UserCan extensions
Category:UserCanSendEmail extensions
Category:UserClearNewTalkNotification extensions
Category:UserCreateForm extensions
Category:UserEditCountUpdate extensions
Category:UserEffectiveGroups extensions
Category:UserGetAllRights extensions
Category:UserGetDefaultOptions extensions
Category:UserGetEmail extensions
Category:UserGetEmailAuthenticationTimestamp extensions
Category:UserGetLanguageObject extensions
Category:UserGetReservedNames extensions
Category:UserGetRights extensions
Category:UserGroupsChanged extensions
Category:UserIsBlockedFrom extensions
Category:UserIsBot extensions
Category:UserIsLocked extensions
Category:UserLoadAfterLoadFromSession extensions
Category:UserLoggedIn extensions
Category:UserLoginComplete extensions
Category:UserLoginForm extensions
Category:UserLogout extensions
Category:UserLogoutComplete extensions
Category:UserMailerSplitTo extensions
Category:UserMailerTransformContent extensions
Category:UserMailerTransformMessage extensions
Category:UserMergeAccountDeleteTables extensions
Category:UserMergeAccountFields extensions
Category:UserProfileRightSideAfterActivity extensions
Category:Users variables
Category:UserSaveSettings extensions
Category:UserSendConfirmationMail extensions
Category:UserSetEmail extensions
Category:UserSetEmailAuthenticationTimestamp extensions
Category:UserToolLinksEdit extensions
Category:Utility templates
Category:ValidateExtendedMetadataCache extensions
Category:Variable extensions
Category:Variables
Category:Vector skin
Category:Version control
Category:Video player extensions
Category:View page extensions
Category:Visual diffs
Category:VisualEditor
Category:VisualEditorApiVisualEditorEditPostSave extensions
Category:VisualEditorApiVisualEditorEditPreSave extensions
Category:Warning templates
Category:WatchArticle extensions
Category:WatchedItemQueryServiceExtensions extensions
Category:Watchlist extensions
Category:Web Analytics extensions
Category:WebRequestPathInfoRouter extensions
Category:WgQueryPages extensions
Category:Wiki farm
Category:Wiki farm variables
Category:Wiki farms
Category:Wiki markup
Category:Wiki page URLs
Category:Wiki-specific extensions
Category:Wiki.gg
Category:Wikibase
Category:Wikibase extensions
Category:Wikibase schema
Category:Wikibase.cloud
Category:WikibaseClientDataTypes extensions
Category:WikibaseClientEntityTypes extensions
Category:WikibaseClientSiteLinksForItem extensions
Category:WikibaseContentLanguages extensions
Category:WikibaseHandleChange extensions
Category:WikibaseRepoDataTypes extensions
Category:WikibaseRepoEntityNamespaces extensions
Category:WikibaseRepoEntityTypes extensions
Category:WikibaseRepoOnParserOutputUpdaterConstruction extensions
Category:WikibaseTextForSearchIndex extensions
Category:Wikidata
Category:Wikidata extensions
Category:Wikidata Query Service
Category:WikiExporter::dumpStableQuery extensions
Category:Wikimedia development policies
Category:Wikimedia engineering reports
Category:Wikimedia extension database tables
Category:Wikimedia Foundation
Category:Wikimedia Foundation system administration
Category:Wikimedia Foundation teams internals
Category:Wikimedia Hackathon 2023
Category:Wikimedia projects
Category:Wikimedia Research
Category:WikimediaEventsShouldSchemaEditAttemptStepOversample extensions
Category:WikiPageDeletionUpdates extensions
Category:WikiPageFactory extensions
Category:Wikipedia extensions
Category:WikiProject Extensions
Category:WikiProject SysAdmins
Category:Wikiproject Wiki Farms
Category:WikiSearchOnLoadFrontend extensions
Category:Wikispeech
Category:Wikitext
Category:WMF Projects
Category:WMF Projects 2020q1
Category:WMF Releases
Category:WordPress extensions
Category:Workflow extensions
Category:WTFPL licensed extensions
Category:WYSIWYG extensions
Category:XAnalyticsSetHeader extensions
Category:XmlDumpWriterOpenPage extensions
Category:XTools
Category:Yahoo extensions
Category:YouTube extensions
Centralism and decentralism
CirrusSearch
Citoid
Citoid/Enabling Citoid on your wiki
Cli
Clickjacking
Code of Conduct
Code of Conduct/Amendments
Code of Conduct/Cases
Code of Conduct/Committee
Code review
Codesearch
Codex
Codex/Migrating from MediaWiki UI
Collaborative programming
Commit-message-validator
CommonPasswords
Communication
Community Configuration
Community Engagement (Product)
Community Tech team/Community Wishlist Survey/Invitation
Comparison of audio player extensions
Comparison of extensions in distributions
Compatibility
Composer
Compression
Content approval extensions
Content handlers
Content Security Policy
Content Transform Team
Content translation
Content translation/Announcements/Announcement-October2014
Content translation/Community Consultation June 2016/Announcement draft
Content translation/cxserver
Content translation/Developers/Markup
Content translation/Documentation/FAQ
Content translation/Infographic
Content translation/Machine Translation/Google Translate
Content translation/Machine Translation/Matxin
Content translation/Machine Translation/MinT
Content translation/Machine Translation/MT Clients
Content translation/Machine Translation/Yandex
Content translation/Machine Translation/Youdao
Content translation/Product Definition/AbuseFilter
Content translation/Product Definition/analytics
Content translation/Published translations
Content translation/Section translation
Content translation/Specification
Content translation/Templates
Content translation/V2
Continuous integration
Continuous integration/Allow list
Continuous integration/Documentation generation
Continuous integration/Entry points
Continuous integration/PHP CodeSniffer
Contributors/Projects/Accessible editing buttons
Contributors/Projects/Columns for references
Copyright
Core
Create a Drop-Down list using JavaScript and CSS
Cross-site request forgery
Cross-site scripting
Cross-wiki Search Result Improvements
Cross-wiki Search Result Improvements/Design
Cross-wiki Search Result Improvements/village pump notice
Css-sanitizer
CSSJanus
Customization
Database field prefixes
Database transactions
Database update welcome message
Debian packages
Debugging toolbar
DeleteBatch
Deletion-related rights
Deployment
Design System Team/Announcing Codex 1.0
Design System Team/Color/Design documentation
Design/Living style guide
Design/Projects/Improve mobile reading experience
Desktop Improvements (more)
Desktop Improvements (priority)
Developer account
Developer Advocacy
Developer hub
Developer Satisfaction Survey/December 2024/announcement
Developers
Developers/Maintainers
Development
Development guidelines
Development policy
Development statistics
Differences between Wikipedia, Wikimedia, MediaWiki, and wiki
Directionality support
Disambiguation pages
Display title
Do not hack MediaWiki core
Documentation
Documentation page design
Documentation/Services
Documentation/Style guide
Dodo
DOM-based XSS
Download
Download from Git
Download from SVN
Draft namespace
Edit check
Edit check/Configuration
Edit check/Deployment status
Edit check/False positives
Edit check/False positives/preload
Edit check/Glossary
Edit check/Impact
Edit check/Tags
Edit Discovery
Edit Review Improvements
Edit Review Improvements/New filters for edit review
Edit Review Improvements/New filters for edit review/How to implement a filter
Edit Review Improvements/New filters for edit review/Research
Edit Review Improvements/Proposed Huggle improvements
Editing team/Community Conversations
Editing team/Community Conversations/Archives/2023
Editor
Email
Equivset
Extension default namespaces
Extension pages
Extension status
Extension:3D
Extension:3DAlloy
Extension:AboutBlueSpice
Extension:AbsenteeLandlord
Extension:AbuseFilter
Extension:AbuseFilter/abuse filter action table
Extension:AbuseFilter/abuse filter history table
Extension:AbuseFilter/abuse filter log table
Extension:AbuseFilter/abuse filter table
Extension:AbuseFilter/Actions
Extension:AbuseFilter/Conditions
Extension:AbuseFilter/Global
Extension:AbuseFilter/Rules format
Extension:AbuseFilterBypass
Extension:AccessControl
Extension:AccessLogReports
Extension:AccountInfo
Extension:Acrolinx
Extension:Acronym
Extension:ActiveAbstract
Extension:AdaptiveThumb
Extension:Add HTML Meta and Title
Extension:AddBodyClass
Extension:AddPersonalUrls
Extension:Admin Links
Extension:AdvancedSearch
Extension:AgeClassification
Extension:AIEditingAssistant
Extension:AjaxComments
Extension:AJAXPoll
Extension:AjaxShowEditors
Extension:AllTimeZones
Extension:Amp
Extension:AnonPrivacy
Extension:Antispam
Extension:AntiSpoof
Extension:ApiFeatureUsage
Extension:Approved Revs
Extension:ArrayFunctions
Extension:ArrayFunctions/Unreleased
Extension:Arrays
Extension:ArticleCreationWorkflow
Extension:ArticleInfo
Extension:ArticleRatings
Extension:AtMentions
Extension:Attachments
Extension:Auth remoteuser
Extension:AuthorProtect
Extension:Auto Create Category Pages
Extension:AutoGallery
Extension:Automated Values
Extension:AutoModerator/Deploying
Extension:AutoSitemap
Extension:Avatar
Extension:Avatars
Extension:Awesomeness
Extension:Babel
Extension:Babel/babel table
Extension:Backdrop
Extension:BatchUserRights
Extension:BCmath
Extension:BCmath/Glossary
Extension:BetaFeatures
Extension:BetaFeatures/Auto-enrollment
Extension:BetaFeatures/betafeatures user counts table
Extension:BiblioPlus
Extension:BibManager
Extension:BibManager/Admin manual
Extension:BibManager/User manual
Extension:BlockInactive
Extension:BlogPage
Extension:Bookshelf
Extension:Bootstrap
Extension:BootstrapComponents
Extension:BounceHandler
Extension:BounceHandler/bounce records table
Extension:BreadCrumbs2
Extension:CampaignEvents
Extension:Capiunto
Extension:Cargo
Extension:Cargo/Display formats
Extension:Cargo/Download and installation
Extension:Cargo/Known bugs and planned features
Extension:Cargo/Other documentation
Extension:Cargo/Querying data
Extension:Cargo/Quick start guide
Extension:Cargo/SMW migration guide
Extension:Cargo/Storing data
Extension:CategorySortHeaders
Extension:CategoryTagSorter
Extension:CategoryTests
Extension:CategoryTree
Extension:CategoryWatch
Extension:CentralAuth
Extension:CentralAuth/GlobalVanishRequest
Extension:CentralLogging
Extension:CentralNotice
Extension:CentralNotice/Allocation history
Extension:ChangeAuthor
Extension:CharInsert
Extension:Chart/Project
Extension:Chart/Project/FAQ
Extension:Chart/Project/Updates
Extension:Chartie
Extension:Checklists
Extension:CheckUser
Extension:CheckUser/Client Hints
Extension:CheckUser/cu changes table
Extension:CheckUser/cu log event table
Extension:CheckUser/cu log table
Extension:CheckUser/cu private event table
Extension:CheckUser/cu useragent clienthints map table
Extension:CheckUser/cu useragent clienthints table
Extension:CheckUser/cu useragent table
Extension:CheckUser/cuci temp edit table
Extension:CheckUser/cuci user table
Extension:CheckUser/cuci wiki map table
Extension:CIForms
Extension:CirrusSearch
Extension:CirrusSearch/CompletionSuggester
Extension:Cite
Extension:CiteThisPage
Extension:Citoid
Extension:CLDR
Extension:CleanChanges
Extension:ClipBox
Extension:CloseWikis
Extension:CloudflarePurge
Extension:CodeEditor
Extension:CodeMirror
Extension:Cognate
Extension:Cognitive Process Designer
Extension:CollabPads
Extension:CollapsibleSections
Extension:CollapsibleVector
Extension:Collection
Extension:Collection/Walkthrough
Extension:Commentbox
Extension:Comments
Extension:CommentStreams
Extension:CommonMessages
Extension:CommonsMetadata
Extension:ConfirmAccount
Extension:ConfirmEdit
Extension:ConsoleOutput
Extension:ContactManager
Extension:ContactPage
Extension:ContainerFilter
Extension:ContentDroplets
Extension:ContentStabilization
Extension:ContentTransfer
Extension:ContentTranslation
Extension:Contribution Scores
Extension:ContributionCredits
Extension:Contributors
Extension:Cookiecutter-mediawiki-extension
Extension:CookieWarning
Extension:CountDownClock
Extension:CountingMarker
Extension:CountingMarker/Functional scope of the versions
Extension:CrawlableAllPages
Extension:Create User Page
Extension:CreatedPagesList
Extension:CreatePageUw
Extension:CreateRedirect
Extension:CreateWiki
Extension:CreditsSource
Extension:CSS
Extension:CustomLogs
Extension:Data Transfer
Extension:DataDump
Extension:DataProvider
Extension:DataTable2
Extension:DataValues
Extension:DataValuesCommon
Extension:DataValuesInterfaces
Extension:DateDiff
Extension:DateTimeTools
Extension:DeleteBatch
Extension:DeletePagesForGood
Extension:Description2
Extension:Diff
Extension:DisableAccount
Extension:Disambiguator
Extension:Discord
Extension:DiscordNotifications
Extension:DiscussionThreading
Extension:DiscussionTools
Extension:DiscussionTools/Comparison
Extension:DismissableSiteNotice
Extension:Display Title
Extension:DocBookExport
Extension:DonateBoxInSidebar
Extension:DonateButton
Extension:DonationInterface
Extension:DPLforum
Extension:DrawioEditor
Extension:DummyFandoomMainpageTags
Extension:DynamicPageList
Extension:DynamicPageList (disambiguation)
Extension:DynamicPageList3
Extension:DynamicPageListEngine
Extension:DynamicSidebar
Extension:EasyTimeline
Extension:EasyTimeline/installation
Extension:EasyTimeline/syntax
Extension:Echo
Extension:Echo/Creating a new notification type
Extension:Echo/echo email batch table
Extension:Echo/echo event table
Extension:Echo/echo notification table
Extension:Echo/echo subscription table
Extension:Echo/echo target page table
Extension:EditAccount
Extension:Editcount
Extension:EditCountNeue
Extension:EditSimilar
Extension:EditSubpages
Extension:EImage
Extension:EImage/ei cache table
Extension:Elastica
Extension:ElectronPdfService
Extension:Email Authorization
Extension:EmailAuth
Extension:EmailCapture
Extension:EmbedVideo
Extension:EmbedVideo (fork)
Extension:Emoticons
Extension:EnhancedUpload
Extension:EntitySchema
Extension:EPSG
Extension:EventLogging
Extension:EventStreamConfig
Extension:Examples
Extension:ExcludeRandom
Extension:Expect
Extension:Expect/Glossary
Extension:Expiry
Extension:ExtendedSearch
Extension:ExtensionDistributor
Extension:External Content
Extension:External Data
Extension:External Data/Configuration
Extension:External Data/Databases
Extension:External Data/Download and installation
Extension:External Data/Local files
Extension:External Data/Web pages
Extension:ExternalGuidance
Extension:ExternalGuidance/Impact
Extension:ExternalLinkConfirm
Extension:ExtJSBase
Extension:FanBoxes
Extension:Favorites
Extension:FeaturedFeeds
Extension:FileExporter
Extension:FileImporter
Extension:FileImporter/List of configured wikis
Extension:FileList
Extension:FilterSpecialPages
Extension:FlaggedRevs
Extension:FlexiSkin
Extension:ForcePreview
Extension:ForceTocOnEveryPage
Extension:Forms
Extension:FormWizard
Extension:FundraisingEmailUnsubscribe
Extension:Gadgets
Extension:Genealogy
Extension:GeoCrumbs
Extension:GeoData
Extension:GeoData/geo tags table
Extension:GeoGebra
Extension:GetUserName
Extension:GittipWidget
Extension:GlobalBlocking
Extension:GlobalNewFiles
Extension:GlobalNotice
Extension:GlobalUsage
Extension:GlobalUserGroups
Extension:GlobalUserPage
Extension:GlobalUserrights
Extension:GlobalWatchlist
Extension:GND
Extension:Google AdSense
Extension:Google Analytics Integration
Extension:GoogleAnalyticsMetrics
Extension:GoogleCustomWikiSearch
Extension:GoogleDocCreator
Extension:GoogleDocs4MW
Extension:GoogleLogin
Extension:GoogleLogin/PreAuthManager
Extension:GoogleLogin/Version lifecycle
Extension:GoogleSiteSearch
Extension:GPGMail
Extension:Graph
Extension:Graph/Demo
Extension:Graph/Demo/Sparql
Extension:Graph/Graphoid
Extension:Graph/Guide
Extension:Graph/Interactive Graph Tutorial
Extension:Graph/Interactive Graph Tutorial 2
Extension:Graph/Plans
Extension:Graph/Vega 2.0
Extension:Graphical Category Browser
Extension:Gravatar
Extension:GroupWhitelist
Extension:GrowthExperiments
Extension:GrowthExperiments/developer setup
Extension:GuidedTour
Extension:Hashtags
Extension:Header Footer
Extension:Header Tabs
Extension:HeaderExtension
Extension:HeadScript
Extension:HideCategorizedOrphans
Extension:HideSection
Extension:HideSidebar
Extension:HierarchyBuilder
Extension:Highlight
Extension:Highlight Links in Category
Extension:HitCounters
Extension:HostStats
Extension:HSTS
Extension:HTML Tags
Extension:HtmlFromFile
Extension:ID Generator
Extension:IDProvider
Extension:ImageMap
Extension:ImageMapEdit
Extension:ImageRating
Extension:ImportArticles
Extension:ImportDump
Extension:ImportOfficeFiles
Extension:IncidentReporting
Extension:Info
Extension:InlineComments
Extension:InputBox
Extension:Interwiki
Extension:InterwikiExtracts
Extension:InterwikiSorting
Extension:InviteSignup
Extension:JavascriptSlideshow
Extension:Josa
Extension:JSBreadCrumbs
Extension:JsonConfig
Extension:JWTAuth
Extension:Kartographer
Extension:Katsa/Glossary
Extension:Labeled Section Transclusion
Extension:LandingCheck
Extension:LanguageTool
Extension:LastModified
Extension:LastUserLogin
Extension:Lazyload
Extension:LDAPAuthentication2
Extension:LDAPAuthorization
Extension:LDAPProvider
Extension:LDAPSyncAll
Extension:LegalLogin
Extension:LightGallery
Extension:Lingo
Extension:Link Attributes
Extension:LinkedWiki
Extension:LinkFilter
Extension:LinkSuggest
Extension:LinkTarget
Extension:LinkTitles
Extension:LinkToArchive
Extension:Linter
Extension:LiquidThreads
Extension:ListDuplicateUsers
Extension:LockAuthor
Extension:Lockdown
Extension:LoginNotify
Extension:LogoFunctions
Extension:LookupUser
Extension:LoopFunctions
Extension:Loops
Extension:MagicNoCache
Extension:ManageWiki
Extension:Mantis
Extension:Maps
Extension:MapSources
Extension:MarkImages
Extension:MassEditRegex
Extension:MassMessage
Extension:MassMessage/API
Extension:Math
Extension:Math/advancedSettings
Extension:Math/Syntax
Extension:MathEasy
Extension:MathLaTeX
Extension:Matomo
Extension:MatomoAnalytics
Extension:Media Viewer/About
Extension:MediaWikiAuth
Extension:Memento
Extension:MenuEditor
Extension:MergeArticles
Extension:Metadata
Extension:MetaDescriptionTag
Extension:MetaMaster
Extension:MiniInvite
Extension:MintyDocs
Extension:MissedPages
Extension:MobileApp
Extension:MobileDetect
Extension:MobileFrontend
Extension:MobileFrontend/Configuration
Extension:MobileFrontend/Configuring browser auto-detection
Extension:MobileFrontend/MobileViewAPI
Extension:Moderation
Extension:Modern Timeline
Extension:MsInsert
Extension:MsLinks
Extension:MsWikiEditor
Extension:MultiLanguageManager
Extension:MultiMaps
Extension:MultimediaViewer
Extension:MultiPurge
Extension:MyVariables
Extension:NamespacePaths
Extension:NamespaceRelations
Extension:NativeSvgHandler
Extension:NaturalLanguageList
Extension:NavigationTiming
Extension:NaylorAMS
Extension:NearbyPages
Extension:Network
Extension:NetworkAuth
Extension:NewDuplicateUserMessage
Extension:Newest Pages
Extension:NewsBox
Extension:NewSignupPage
Extension:Newsletter
Extension:NewUserActions
Extension:NewUserMessage
Extension:NiceCategoryList3
Extension:NoTitle
Extension:NoTOC
Extension:NSFileRepo
Extension:Nuke
Extension:Nuke/2024 Moderator Tools project
Extension:NukeDPL
Extension:NumberHeadings
Extension:Numbertext
Extension:OATHAuth
Extension:OAuth
Extension:OfflineExtension
Extension:OnlineStatusBar
Extension:OOJSPlus
Extension:OpenGraphMeta
Extension:OpenID Connect
Extension:OpenJsCad
Extension:OpenLayers
Extension:ORES
Extension:OrphanedTalkPages
Extension:Page Forms
Extension:Page Forms/Authors and credits
Extension:Page Forms/Common problems
Extension:Page Forms/Creating query forms
Extension:Page Forms/Developers' documentation
Extension:Page Forms/Download and installation
Extension:Page Forms/Getting support
Extension:Page Forms/Hosting
Extension:Page Forms/Input types
Extension:Page Forms/Known bugs and planned features
Extension:Page Forms/Linking to forms
Extension:Page Forms/Page Forms and templates
Extension:Page Forms/Quick start guide
Extension:Page Forms/Related extensions
Extension:Page Forms/Sites that use Page Forms
Extension:Page Forms/Special pages
Extension:Page Forms/The "edit with form" tab
Extension:Page Forms/Values, mappings and autocompletion
Extension:Page Schemas
Extension:PageAssessments
Extension:PageAuthors
Extension:PageCheckout
Extension:PagedTiffHandler
Extension:PageImages
Extension:PageNotice
Extension:PageOwnership
Extension:PageProperties
Extension:PageProperties/Legacy
Extension:PageTriage
Extension:PageViewInfo
Extension:Paragraph-based Edit Conflict Interface
Extension:ParserFunctions
Extension:ParserHooks
Extension:ParserMigration
Extension:PDFEmbed
Extension:PdfHandler
Extension:PerformanceMonitor
Extension:PermissionManager
Extension:PerPageLanguage
Extension:PhpTags
Extension:PhpTags Functions
Extension:PhpTags Storage
Extension:PhpTags Widgets
Extension:PhpTags Wiki
Extension:PhpTags/Magic expressions
Extension:Pickle
Extension:PictureGame
Extension:Plausible
Extension:PluggableAuth
Extension:PluggableAuth/Hooks/PluggableAuthUserAuthorization
Extension:Pluso
Extension:Poem
Extension:PollNY
Extension:PopcornEditor
Extension:Popups
Extension:PortableInfobox
Extension:PreToClip
Extension:PrivateDomains
Extension:Proofread Page
Extension:Proofread Page/Page viewer
Extension:PropertySuggester
Extension:ProtectSite
Extension:PubmedParser
Extension:Purge
Extension:PurgeClickThrough
Extension:PurgePage
Extension:Push
Extension:PushToWatch
Extension:QuestyCaptcha
Extension:QuickGV
Extension:QuickInstantCommons
Extension:QuickSearchLookup
Extension:QuickSurveys
Extension:Quiz
Extension:QuizGame
Extension:Random In Category
Extension:RandomGameUnit
Extension:RandomImage
Extension:RandomImageByCategory
Extension:RandomSelection
Extension:RDFIO
Extension:RealMe
Extension:Redirect302
Extension:RefreshSiteStatsTable
Extension:Regex Fun
Extension:RegexBlock
Extension:RegexFunctions
Extension:RegularTooltips
Extension:RelatedArticles
Extension:Reminder
Extension:RemovePII
Extension:Replace Text
Extension:RevisionSlider
Extension:RightFunctions
Extension:RottenLinks
Extension:RSS
Extension:Sanctions
Extension:SandboxLink
Extension:SaneCase
Extension:SaveSpinner
Extension:Score
Extension:Scribunto
Extension:Scribunto/Example modules
Extension:Scribunto/Lua reference manual
Extension:ScryfallLinks
Extension:SearchBlox
Extension:SearchExtraNS
Extension:SectionAnchors
Extension:SecureLinkFixer
Extension:SecurePoll
Extension:SelectTag
Extension:Semantic Breadcrumb Links
Extension:Semantic Bundle
Extension:Semantic Cite
Extension:Semantic Drilldown
Extension:Semantic Extra Special Properties
Extension:Semantic Forms Select
Extension:Semantic Glossary
Extension:Semantic Internal Objects
Extension:Semantic MediaWiki
Extension:Semantic Meta Tags
Extension:Semantic Rating
Extension:Semantic Result Formats
Extension:Semantic Scribunto
Extension:Semantic Wikibase
Extension:SemanticDependencyUpdater
Extension:SendGrid
Extension:Serialization
Extension:Share
Extension:Shariff
Extension:ShortUrl
Extension:ShowMe
Extension:ShowRealUsernames
Extension:SimpleBatchUpload
Extension:SimpleBlogPage
Extension:SimpleCalendar
Extension:SimpleMath
Extension:SimpleMathJax
Extension:SimpleSAMLphp
Extension:SimpleSkins
Extension:SimpleTasks
Extension:SimpleTooltip
Extension:SimpleTooltip (Universal-Omega)
Extension:Site Settings
Extension:SiteMetrics
Extension:SkinCustomiser
Extension:SkinPerPage
Extension:SlackNotifications
Extension:SmartComments
Extension:SocialProfile
Extension:SocialProfile/Screenshots
Extension:SoftRedirector
Extension:SoftwareVersion
Extension:SpamBlacklist
Extension:SpamDiffTool
Extension:SpamRegex
Extension:SPARQL
Extension:Spoilers
Extension:StaffPowers
Extension:StandardDialogs
Extension:StatCounter.com Integration
Extension:StopForumSpam
Extension:StructuredDiscussions
Extension:Subpage Fun
Extension:SubPageList
Extension:SubPageList3
Extension:SubpageNavigation
Extension:SubpageWatchlist
Extension:Sudo
Extension:Survey
Extension:SyntaxHighlight
Extension:TableTools
Extension:Tabs
Extension:TemplateData
Extension:TemplateSandbox
Extension:TemplateStyles
Extension:TemplateStylesExtender
Extension:TemplateWizard
Extension:TextExtracts
Extension:TextScroller
Extension:Thanks
Extension:Theme
Extension:TimedMediaHandler
Extension:TimedMediaHandler/Client download
Extension:TimedMediaHandler/VideoJS Player
Extension:TinyMCE
Extension:Title Icon
Extension:TitleBlacklist
Extension:TitleKey
Extension:TitleKey/titlekey table
Extension:TocTree
Extension:Toolhub
Extension:TopLink
Extension:TorBlock
Extension:Translate
Extension:TranslationNotifications
Extension:TrustedXFF
Extension:TwitterTag
Extension:TwnMainPage
Extension:UILangCode
Extension:UnicodeConverter
Extension:UnifiedTaskOverview
Extension:UniversalLanguageSelector
Extension:UnusedRedirects
Extension:UpdateMediaWiki
Extension:UploadCheck
Extension:UploadWizard
Extension:UploadWizard/Campaigns
Extension:UrlGetParameters
Extension:UrlShortener
Extension:UserAgreement
Extension:UseResource
Extension:UserExport
Extension:UserFunctions
Extension:UserGroups
Extension:UserManager
Extension:UserMerge
Extension:UserOptionStats
Extension:UserPageEditProtection
Extension:UserStatus
Extension:UserWelcome
Extension:Validator
Extension:Variables
Extension:VECancelButton
Extension:VectorUp
Extension:VEForAll
Extension:VipsScaler
Extension:VisualData
Extension:VisualEditorPlus
Extension:VoteNY
Extension:WatchAnalytics
Extension:WatchSubpages
Extension:WebChat
Extension:WebDAV
Extension:Whitelist Pages
Extension:WhoIsWatching
Extension:WhosOnline
Extension:Widgets
Extension:WikEd
Extension:WikEdDiff
Extension:Wikibase Client
Extension:Wikibase Client/Lua
Extension:Wikibase EDTF
Extension:Wikibase Export
Extension:Wikibase Local Media
Extension:Wikibase Repository
Extension:WikibaseLexeme
Extension:WikibaseLexeme/Data Model
Extension:WikibaseMediaInfo
Extension:WikibaseMediaInfo/Data Model
Extension:WikibaseQualityConstraints
Extension:WikiCategoryTagCloud
Extension:WikidataPageBanner
Extension:WikiDB
Extension:WikiDebug
Extension:WikiDiscover
Extension:WikiEditor
Extension:WikiForum
Extension:WikiHiero
Extension:WikiLambda
Extension:WikiLambda/Approving Implementations and Testers
Extension:WikiLove
Extension:WikimediaApiPortalOAuth
Extension:WikimediaBadges
Extension:WikimediaCampaignEvents
Extension:WikimediaEvents
Extension:WikimediaIncubator
Extension:WikimediaMaintenance
Extension:WikimediaMessages
Extension:WikiSearchFront
Extension:WikiSEO
Extension:Wikisource
Extension:Wikispeech
Extension:Wikispeech/Adding new voice or language
Extension:Wikispeech/Installing Speechoid
Extension:Wikispeech/Speechoid on Cloud VPS
Extension:WikispeechSpeechDataCollector
Extension:WikiTextLoggedInOut
Extension:WikiToLDAP
Extension:WimaAdvertising
Extension:WimaAdvertising/Use
Extension:WindowsAzureStorage
Extension:Workflows
Extension:WSArrays
Extension:WSOAuth
Extension:WSSemanticParsedText
Extension:WSStats
Extension:XAnalytics
Extension:XenForoAuth
Extension:YandexSiteVerification
Extension:YetAnotherKeywords
Extension:YotpoReviews
Extension:YouTube
Extensions FAQ
ExternalLinks
Fandom
Fatal error: require once()
Firefox users and session loss bug
Flagged Revisions
Flow/Proposal for Ptwikibooks
Fluoride
Forum
Fréttinga
Gadget kitchen
GapFinder
Gerrit
Gerrit patch uploader
Gerrit/Advanced usage
Gerrit/Alternatives to git-review
Gerrit/Code review
Gerrit/Code review/Getting reviews
Gerrit/Commit message guidelines
Gerrit/Cross-repo dependencies
Gerrit/git-review
Gerrit/How Gerrit works
Gerrit/Inactive projects
Gerrit/L10n-bot
Gerrit/merge submodule
Gerrit/Navigation
Gerrit/New repositories
Gerrit/personal sandbox
Gerrit/Privilege policy
Gerrit/split a submitted change
Gerrit/TortoiseGit tutorial
Gerrit/Troubleshooting
Gerrit/Tutorial
Gerrit/Tutorial/tl;dr
Gerrit/watched projects
Gerrit/Web tutorial
Gerrit/workflow/ops
Git and Gerrit FAQ
Git for dummies
Git-remote-mediawiki
Git/aliases
Git/Creating new repositories
Git/References
Git/Tips
GitLab
Global templates
Global templates/Alternative solutions
Global templates/Discuss
Global templates/Proposed specification
Global templates/Proposed specification, short version
Global templates/Relationship to strategy
Global templates/Taxonomy
Globalize
Good first bugs
Google Summer of Code
Groups
Growth
Growth/Analytics updates/EditorJourney initial report
Growth/Analytics updates/Help Panel experiment plan
Growth/Analytics updates/Welcome survey initial report
Growth/Browse
Growth/Communities
Growth/Communities/Conversations
Growth/Communities/Get the Growth experiments on your wiki
Growth/Communities/How to configure the mentors' list
Growth/Communities/How to interact with newcomers
Growth/Communities/How to use code snippets
Growth/Communities/Wikivoyage
Growth/Community Configuration
Growth/Community Updates
Growth/Constructive activation experimentation
Growth/Deployment table
Growth/FAQ
Growth/Feature summary
Growth/Focus on help desk
Growth/Growth team updates
Growth/Mentor dashboard
Growth/Newcomer Homepage Translation task
Growth/Newsletters
Growth/Newsletters/06
Growth/Newsletters/07
Growth/Newsletters/08
Growth/Newsletters/09
Growth/Newsletters/10
Growth/Newsletters/11
Growth/Newsletters/12
Growth/Newsletters/13
Growth/Newsletters/14
Growth/Newsletters/15
Growth/Newsletters/16
Growth/Newsletters/17
Growth/Newsletters/18
Growth/Newsletters/19
Growth/Newsletters/20
Growth/Newsletters/21
Growth/Newsletters/22
Growth/Newsletters/23
Growth/Newsletters/24
Growth/Newsletters/25
Growth/Newsletters/26
Growth/Newsletters/27
Growth/Newsletters/28
Growth/Newsletters/29
Growth/Newsletters/30
Growth/Newsletters/31
Growth/Newsletters/32
Growth/Personalized first day
Growth/Personalized first day/Engagement emails
Growth/Personalized first day/Newcomer experience marketing pilot
Growth/Personalized first day/Newcomer homepage
Growth/Personalized first day/Newcomer homepage/Measurement and experiment plan
Growth/Personalized first day/Newcomer tasks
Growth/Personalized first day/Newcomer tasks/Experiment analysis, November 2020
Growth/Personalized first day/Structured tasks
Growth/Personalized first day/Structured tasks/Add a link
Growth/Personalized first day/Structured tasks/Add a link/Iteration 2
Growth/Personalized first day/Structured tasks/Add an image
Growth/Personalized first day/Structured tasks/Add an image/Idea validation
Growth/Personalized first day/Structured tasks/Community feedback
Growth/Personalized first day/Structured tasks/Copyedit
Growth/Personalized first day/Welcome survey
Growth/Positive reinforcement
Growth/Projects
Growth/Results
Growth/Structured mentor list
Growth/Team
Growth/Understanding first day
Grrrit-wm
Guide to Collaboration Tools
Guidelines for a healthy code review culture
Hacks
Help pages
Help pages for extensions
Help:Advanced editing
Help:All pages
Help:ApiSandbox
Help:Associated pages
Help:Bad title
Help:BlockedExternalDomains
Help:Blocking users
Help:Blocking users multiblocks
Help:Bots
Help:Categories
Help:ChangeContentModel
Help:CirrusSearch
Help:CirrusSearch/articletopic
Help:CirrusSearch/Logical operators
Help:CirrusSearch/RegexTooComplex
Help:Cite
Help:Community Configuration
Help:Content translation
Help:Content translation/Publishing
Help:Content translation/Starting
Help:Content translation/Starting/Dashboard
Help:Content translation/Starting/Suggestions
Help:Content translation/Translating
Help:Content translation/Translating/Editing
Help:Content translation/Translating/Initial machine translation
Help:Content translation/Translating/Templates
Help:Content translation/Translating/Translation quality
Help:Contents
Help:Controlling search engine indexing
Help:Deferred changes
Help:Deletion and undeletion
Help:Diff
Help:DiscussionTools
Help:DiscussionTools/Reply tool visual mode limitations
Help:DiscussionTools/Why can't I reply to this comment?
Help:Downloading pages
Help:Dummy edit
Help:Edit check
Help:Edit conflict
Help:Edit Recovery
Help:Edit summary
Help:Editing
Help:Editing pages
Help:Email confirmation
Help:ExpandTemplates
Help:Export
Help:Extension:3D
Help:Extension:AchievementBadges
Help:Extension:AdvancedSearch
Help:Extension:CampaignEvents
Help:Extension:CampaignEvents/Registration
Help:Extension:CentralAuth/CreateLocalAccount
Help:Extension:CentralAuth/Global rename
Help:Extension:CodeMirror
Help:Extension:CommunityRequests
Help:Extension:ContentTranslation
Help:Extension:Disambiguator
Help:Extension:Discourse
Help:Extension:EventStreamConfig
Help:Extension:FileImporter
Help:Extension:FlaggedRevs
Help:Extension:FormWizard
Help:Extension:GlobalCssJs
Help:Extension:GlobalPreferences
Help:Extension:GlobalUserPage
Help:Extension:GWToolset
Help:Extension:Kartographer
Help:Extension:Kartographer/Getting started
Help:Extension:Kartographer/Icons
Help:Extension:Kartographer/OSM
Help:Extension:Linter
Help:Extension:LiquidThreads
Help:Extension:MassMessage
Help:Extension:Media Viewer
Help:Extension:Memento
Help:Extension:Newsletter
Help:Extension:Nuke
Help:Extension:OttrParser
Help:Extension:ParserFunctions
Help:Extension:Phonos
Help:Extension:ProofreadPage
Help:Extension:ProofreadPage/Index-specific CSS
Help:Extension:ProofreadPage/Page quality system
Help:Extension:ProofreadPage/Pagelist tag
Help:Extension:ProofreadPage/Pagelist widget
Help:Extension:ProofreadPage/Pages tag
Help:Extension:RealMe
Help:Extension:RedirectManager
Help:Extension:RelatedArticles
Help:Extension:Report
Help:Extension:SandboxLink
Help:Extension:SocialProfile/User board
Help:Extension:TemplateSandbox
Help:Extension:TemplateWizard
Help:Extension:Translate
Help:Extension:Translate/Command line scripts
Help:Extension:Translate/Components
Help:Extension:Translate/Configuration
Help:Extension:Translate/Developer guide
Help:Extension:Translate/File format support
Help:Extension:Translate/Getting started with development
Help:Extension:Translate/Glossary
Help:Extension:Translate/Group configuration
Help:Extension:Translate/Group configuration example
Help:Extension:Translate/Group configuration/MediaWiki
Help:Extension:Translate/Group management
Help:Extension:Translate/Import Translations via CSV
Help:Extension:Translate/Insertables
Help:Extension:Translate/Installation
Help:Extension:Translate/Message group states
Help:Extension:Translate/Message groups
Help:Extension:Translate/Move translatable page
Help:Extension:Translate/Off-line translation
Help:Extension:Translate/Page translation administration
Help:Extension:Translate/Page translation example
Help:Extension:Translate/Process flow in MediaWiki jobs
Help:Extension:Translate/Quality assurance
Help:Extension:Translate/Statistics and reporting
Help:Extension:Translate/Translation aids
Help:Extension:Translate/Translation best practices
Help:Extension:Translate/Translation example
Help:Extension:Translate/Translation memories
Help:Extension:Translate/Translation memory architecture
Help:Extension:Translate/Unstructured element translation
Help:Extension:Translate/Validators
Help:Extension:UniversalLanguageSelector/Input methods
Help:Extension:UniversalLanguageSelector/Input methods/ach-tilde
Help:Extension:UniversalLanguageSelector/Input methods/Africa
Help:Extension:UniversalLanguageSelector/Input methods/ak-qx
Help:Extension:UniversalLanguageSelector/Input methods/ann-tilde
Help:Extension:UniversalLanguageSelector/Input methods/bas-tilde
Help:Extension:UniversalLanguageSelector/Input methods/bci-tilde
Help:Extension:UniversalLanguageSelector/Input methods/ber-tfng
Help:Extension:UniversalLanguageSelector/Input methods/bfa-tilde
Help:Extension:UniversalLanguageSelector/Input methods/bkm-tilde
Help:Extension:UniversalLanguageSelector/Input methods/bom-tilde
Help:Extension:UniversalLanguageSelector/Input methods/bwr-tilde
Help:Extension:UniversalLanguageSelector/Input methods/cko-tilde
Help:Extension:UniversalLanguageSelector/Input methods/efi-tilde
Help:Extension:UniversalLanguageSelector/Input methods/fon-tilde
Help:Extension:UniversalLanguageSelector/Input methods/fvr-tilde
Help:Extension:UniversalLanguageSelector/Input methods/gaa-cqx
Help:Extension:UniversalLanguageSelector/Input methods/gur-tilde
Help:Extension:UniversalLanguageSelector/Input methods/ha-tilde
Help:Extension:UniversalLanguageSelector/Input methods/he-standard-2012-extonly
Help:Extension:UniversalLanguageSelector/Input methods/ig-tilde
Help:Extension:UniversalLanguageSelector/Input methods/kab-tilde
Help:Extension:UniversalLanguageSelector/Input methods/kbp-tilde
Help:Extension:UniversalLanguageSelector/Input methods/kcg-tilde
Help:Extension:UniversalLanguageSelector/Input methods/ki-tilde
Help:Extension:UniversalLanguageSelector/Input methods/kr-tilde
Help:Extension:UniversalLanguageSelector/Input methods/ks-kbd
Help:Extension:UniversalLanguageSelector/Input methods/kus-tilde
Help:Extension:UniversalLanguageSelector/Input methods/laj-tilde
Help:Extension:UniversalLanguageSelector/Input methods/lg-tilde
Help:Extension:UniversalLanguageSelector/Input methods/ln-tilde
Help:Extension:UniversalLanguageSelector/Input methods/mad-tilde
Help:Extension:UniversalLanguageSelector/Input methods/maw-tilde
Help:Extension:UniversalLanguageSelector/Input methods/mg-tilde
Help:Extension:UniversalLanguageSelector/Input methods/mnc-ali
Help:Extension:UniversalLanguageSelector/Input methods/mnc-scripts
Help:Extension:UniversalLanguageSelector/Input methods/mns-backslash
Help:Extension:UniversalLanguageSelector/Input methods/mnw-simplified-anonta
Help:Extension:UniversalLanguageSelector/Input methods/mul-bf
Help:Extension:UniversalLanguageSelector/Input methods/mul-click-tilde
Help:Extension:UniversalLanguageSelector/Input methods/mul-cm
Help:Extension:UniversalLanguageSelector/Input methods/nia-tilde
Help:Extension:UniversalLanguageSelector/Input methods/nmz-tilde
Help:Extension:UniversalLanguageSelector/Input methods/nqo-standard-qwerty
Help:Extension:UniversalLanguageSelector/Input methods/nqo-transliteration
Help:Extension:UniversalLanguageSelector/Input methods/nso-tilde
Help:Extension:UniversalLanguageSelector/Input methods/nus-tilde
Help:Extension:UniversalLanguageSelector/Input methods/sg-tilde
Help:Extension:UniversalLanguageSelector/Input methods/st-tilde
Help:Extension:UniversalLanguageSelector/Input methods/tn-tilde
Help:Extension:UniversalLanguageSelector/Input methods/vai-transliteration
Help:Extension:UniversalLanguageSelector/Input methods/wo-tilde
Help:Extension:UniversalLanguageSelector/Input methods/yo-tilde
Help:Extension:UniversalLanguageSelector/Input methods/zh-pinyin-transliteration
Help:Extension:UploadsLink
Help:Extension:UrlShortener
Help:Extension:WebFonts
Help:Extension:Wikibase/Configuring languages
Help:Extension:Wikibase/GoToLinkedPage
Help:Extension:WikibaseCirrusSearch
Help:Extension:WikiEditor
Help:Extension:WikiEditor/Realtime Preview
Help:Extension:WikimediaCampaignEvents
Help:Extension:Wikisource
Help:Extension:Wikisource/Wikimedia OCR
Help:Extension:Wikispeech
Help:Extension:XenForoAuth/Local account already exists
Help:External searches
Help:File captions
Help:Formatting
Help:Glossaries
Help:Glossary
Help:Go button
Help:Growth
Help:Growth/How to create help contents/Examples/Add a citation
Help:Growth/How to create help contents/Examples/Add a citation/How-to
Help:Growth/How to create help contents/Examples/Expand a page
Help:Growth/How to create help contents/Examples/Update a page
Help:Growth/Mentorship
Help:Growth/Mentorship/Integrating mentorship
Help:Growth/Mentorship/Workshops or Campaigns organizers
Help:Growth/Tools
Help:Growth/Tools/Account creation
Help:Growth/Tools/Add a link
Help:Growth/Tools/Add an image
Help:Growth/Tools/Community updates module
Help:Growth/Tools/Enable the Homepage
Help:Growth/Tools/Help panel
Help:Growth/Tools/How to claim a mentee
Help:Growth/Tools/Newcomer Tasks
Help:Growth/Tools/Suggested edits
Help:High use pages
Help:History
Help:How to install fonts
Help:HTML in wikitext
Help:Images
Help:Images/frame
Help:Images/size
Help:Import
Help:Keyboard shortcuts
Help:LanguageTool
Help:LanguageTool/Glossary
Help:LanguageTool/Sources
Help:Linking to files
Help:Links
Help:Linksearch
Help:Lint errors
Help:Lint errors/bogus-image-options
Help:Lint errors/deletable-table-tag
Help:Lint errors/fostered
Help:Lint errors/html5-misnesting
Help:Lint errors/misc-tidy-replacement-issues
Help:Lint errors/misnested-tag
Help:Lint errors/missing-end-tag
Help:Lint errors/missing-end-tag-in-heading
Help:Lint errors/multi-colon-escape
Help:Lint errors/multiline-html-table-in-list
Help:Lint errors/multiple-unclosed-formatting-tags
Help:Lint errors/obsolete-tag
Help:Lint errors/pwrap-bug-workaround
Help:Lint errors/self-closed-tag
Help:Lint errors/stripped-tag
Help:Lint errors/tidy-font-bug
Help:Lint errors/tidy-whitespace-bug
Help:Lint errors/unclosed-quotes-in-heading
Help:Lint errors/wikilink-in-extlink
Help:Lists
Help:Locating broken scripts
Help:Log
Help:Logging in
Help:Login notifications
Help:Lua/Lua best practice
Help:Magic links
Help:Magic words
Help:Managing files
Help:Map Data
Help:Mass account creation
Help:MediaSearch
Help:Merge history
Help:Minor edit
Help:Moving a page
Help:Namespaces
Help:Navigation
Help:New files
Help:New filters for edit review
Help:New filters for edit review/Advanced filters
Help:New filters for edit review/Bookmarking
Help:New filters for edit review/FAQ
Help:New filters for edit review/Filtering
Help:New filters for edit review/Gadgets
Help:New filters for edit review/Glossary
Help:New filters for edit review/Highlighting function
Help:New filters for edit review/Live updates
Help:New filters for edit review/Quality and Intent Filters
Help:New filters for edit review/Quick tour
Help:New pages
Help:New pages feed
Help:New section
Help:Notifications
Help:Notifications/Cross-wiki
Help:Notifications/Document a new notification type
Help:Notifications/Glossary
Help:Notifications/Special:Notifications
Help:Notifications/Thanks
Help:Notifications/Types
Help:OAuth
Help:OAuth/Errors
Help:Page ID
Help:Page size
Help:Page status indicators
Help:Page title
Help:Paragraph-based Edit Conflict Interface
Help:Parser functions in templates
Help:Patrolled edits
Help:Patrolling
Help:Pending changes
Help:PermanentLink
Help:Pickle
Help:Pickle/Documentation
Help:Pickle/Expect
Help:Pickle/FAQ
Help:Pickle/Glossary
Help:Pickle/Quick tour
Help:Pre-save transform
Help:Preferences
Help:Preview
Help:Printing
Help:Protected pages
Help:QrCode
Help:Random page
Help:Random root page
Help:RandomInCategory
Help:Range blocks
Help:Range blocks/IPv6
Help:Recent changes
Help:Redirects
Help:Reference card
Help:Reference Previews
Help:Related changes
Help:Renaming users
Help:Reset password
Help:RestSandbox
Help:Reverting
Help:RevisionDelete
Help:Sample discussion
Help:Sample page
Help:Sandbox
Help:Screenshots
Help:Searching
Help:Section
Help:Section/Editing sections of included templates
Help:Security/PDF files
Help:Security/SVG files
Help:Self link
Help:Signatures
Help:Skins
Help:Sort keys
Help:Sortable tables
Help:SourceEditor/User guide
Help:Special characters
Help:Special Investigate
Help:Special pages
Help:Starting a new page
Help:Structured Discussions
Help:Structured Discussions/Activation
Help:Structured Discussions/Administration
Help:Structured Discussions/FlowDeluxe
Help:Structured Discussions/Glossary
Help:Structured Discussions/Keyboard shortcuts
Help:Structured Discussions/Known problems
Help:Structured Discussions/Notifications and watchlist
Help:Structured Discussions/One page
Help:Structured Discussions/Permalinks
Help:Structured Discussions/Preloading
Help:Structured Discussions/Quick tour
Help:Structured Discussions/Topics
Help:Styling content
Help:Subpages
Help:Subpages/subpage
Help:Subpages/subpage/sub-subpage
Help:Subpages/subpage/sub-subpage/sub-sub-subpage
Help:Subpages/subpage/sub-subpage/sub-sub-subpage/sub-sub-sub-subpage
Help:Substitution
Help:Substitution/tl;dr
Help:Sysops and permissions
Help:System message
Help:Tables
Help:Tabular data
Help:Tags
Help:Talk pages
Help:TemplateData
Help:Templates
Help:TemplateStyles
Help:Temporary accounts
Help:Tracking categories
Help:Tracking changes
Help:Transclusion
Help:Translate
Help:Two-factor authentication
Help:Undelete
Help:URL
Help:UrlShortener
Help:User contributions
Help:User page
Help:User preference option
Help:User rights and groups
Help:View source
Help:VisualEditor/Community Taskforce
Help:VisualEditor/FAQ
Help:VisualEditor/Maps
Help:VisualEditor/The visual editor at Wikisources and Wiktionaries
Help:VisualEditor/User guide
Help:VisualEditor/User guide/Citation templates
Help:VisualEditor/User guide/Citations-Full
Help:VisualEditor/User guide/Find and replace
Help:VisualEditor/User guide/Links
Help:VisualEditor/VE as Beta Feature
Help:VisualEditor/VE as the main editor
Help:Watching pages
Help:Watchlist
Help:Watchlist expiry
Help:What links here
Help:Wikifunctions
Help:Wikipedia RSS Feed User Manual
Help:WikiSearchFront
Help:Wikitext examples
Help:WSSearchFront
Help:XML-style tags
HHVM
HHVM/About
History of MediaWiki version control
Hosting services
Hosting services/Header
Hourlies
How to become a MediaWiki hacker
How to contribute
How to report a bug
HTML
HTML restriction
Html5Depurate
HTMLForm
Huggle
Humaniki
Icon standardisation
Imgserv
In-context help and onboarding
Inclusive language
Infobox
Installing MediaWiki on a Raspberry Pi
InstantCommons
Interface
Interlanguage links
Interwiki
Inuka Annual plan 2023-24
Inuka team (Archive)
Inuka team (Archive)/Community Events Reports
Inuka team (Archive)/Wikistories for Wikipedia/Office hours/Mockup design illustration for Wikistories creation or edit notification on editors watchlist
Inuka team (Archive)/Wikistories for Wikipedia/Office hours/Share feature discussion & design showcase
Inuka team (Archive)/Wikistories for Wikipedia/Office hours/Test-first automation workflow
IPSet
IPUtils
IPv6 support
Iwlinks
JavaScript
JetBrains IDEs
JQuery
Just make it a user preference
KNUST Wikitech Club Launching and Onboarding Season
KNUST Wikitech Club Launching and Onboarding Season/Participate
KNUST Wikitech Club Launching and Onboarding Season/Team
Komodo Edit
Language and Product Localization Technical Support/Header
Languages
Lc
LDAP Stack
Library
License integration MediaWiki
Lingua Libre
Lingua Libre/SignIt
Local development quickstart
Localisation
Logo
Lua
Lua/Overview
LuaSandbox
Machine Learning
Machine Learning/almuni
Machine Learning/archived projects
Magic words
Mailing lists
Mailing lists/ListRow
Manual pages
Manual:$IP
Manual:$mediaWiki
Manual:$wgAccountCreationThrottle
Manual:$wgActionFilteredLogs
Manual:$wgActionPaths
Manual:$wgActions
Manual:$wgActiveUserDays
Manual:$wgActiveUserEditCount
Manual:$wgActorTableSchemaMigrationStage
Manual:$wgAdaptiveMessageCache
Manual:$wgAddGroups
Manual:$wgAdditionalMailParams
Manual:$wgAdvancedSearchHighlighting
Manual:$wgAdvertisedFeedTypes
Manual:$wgAggregateStatsID
Manual:$wgAjaxEditStash
Manual:$wgAjaxExportList
Manual:$wgAjaxLicensePreview
Manual:$wgAjaxSearch
Manual:$wgAjaxUploadDestCheck
Manual:$wgAjaxWatch
Manual:$wgAllDBsAreLocalhost
Manual:$wgAllowAnonymousMinor
Manual:$wgAllowAsyncCopyUploads
Manual:$wgAllowCategorizedRecentChanges
Manual:$wgAllowChunkedUploads
Manual:$wgAllowCopyUploads
Manual:$wgAllowCrossOrigin
Manual:$wgAllowDisplayTitle
Manual:$wgAllowedCorsHeaders
Manual:$wgAllowExternalImages
Manual:$wgAllowExternalImagesFrom
Manual:$wgAllowExternalReqID
Manual:$wgAllowHTMLEmail
Manual:$wgAllowImageMoving
Manual:$wgAllowImageTag
Manual:$wgAllowJavaUploads
Manual:$wgAllowMicrodataAttributes
Manual:$wgAllowPageInfo
Manual:$wgAllowPrefChange
Manual:$wgAllowRawHtmlCopyrightMessages
Manual:$wgAllowRdfaAttributes
Manual:$wgAllowRealName
Manual:$wgAllowRequiringEmailForResets
Manual:$wgAllowSchemaUpdates
Manual:$wgAllowSecuritySensitiveOperationIfCannotReauthenticate
Manual:$wgAllowSiteCSSOnRestrictedPages
Manual:$wgAllowSlowParserFunctions
Manual:$wgAllowSpecialInclusion
Manual:$wgAllowSysopQueries
Manual:$wgAllowTitlesInSVG
Manual:$wgAllowUserCss
Manual:$wgAllowUserCssPrefs
Manual:$wgAllowUserJs
Manual:$wgAllowUserSkin
Manual:$wgAllUnicodeFixes
Manual:$wgAlternateMaster
Manual:$wgAlwaysUseTidy
Manual:$wgAmericanDates
Manual:$wgAntiLockFlags
Manual:$wgAntivirus
Manual:$wgAntivirusRequired
Manual:$wgAntivirusSetup
Manual:$wgAPICacheHelp
Manual:$wgAPICacheHelpTimeout
Manual:$wgAPIFormatModules
Manual:$wgApiFrameOptions
Manual:$wgAPIGeneratorModules
Manual:$wgAPIListModules
Manual:$wgAPIMaxDBRows
Manual:$wgAPIMaxLagThreshold
Manual:$wgAPIMaxResultSize
Manual:$wgAPIMaxUncachedDiffs
Manual:$wgAPIMetaModules
Manual:$wgAPIModules
Manual:$wgAPIPropModules
Manual:$wgAPIRequestLog
Manual:$wgAPIUselessQueryPages
Manual:$wgAppleTouchIcon
Manual:$wgApplyIpBlocksToXff
Manual:$wgArticle
Manual:$wgArticleCountMethod
Manual:$wgArticlePath
Manual:$wgArticleRobotPolicies
Manual:$wgAssumeProxiesUseDefaultProtocolPorts
Manual:$wgAsyncHTTPTimeout
Manual:$wgAttemptFailureEpoch
Manual:$wgAuth
Manual:$wgAuthenticationTokenVersion
Manual:$wgAuthManagerAutoConfig
Manual:$wgAuthManagerConfig
Manual:$wgAutoblockExpiry
Manual:$wgAutoConfirmAge
Manual:$wgAutoConfirmCount
Manual:$wgAutocreatePolicy
Manual:$wgAutoloadAttemptLowercase
Manual:$wgAutoloadClasses
Manual:$wgAutoloadLocalClasses
Manual:$wgAutopromote
Manual:$wgAutopromoteOnce
Manual:$wgAutopromoteOnceLogInRC
Manual:$wgAutopromoteOnceRCExcludedGroups
Manual:$wgAvailableRights
Manual:$wgBadRanges
Manual:$wgBadUserAgents
Manual:$wgBaseDirectory
Manual:$wgBetterDirectionality
Manual:$wgBlockAllowsUTEdit
Manual:$wgBlockCIDRLimit
Manual:$wgBlockDisablesLogin
Manual:$wgBlockOpenProxies
Manual:$wgBlockTargetMigrationStage
Manual:$wgBloomFilterStores
Manual:$wgBotPasswordsCluster
Manual:$wgBotPasswordsDatabase
Manual:$wgBreakFrames
Manual:$wgBrowserBlackList
Manual:$wgBrowserFormatDetection
Manual:$wgBufferSQLResults
Manual:$wgBug34832TransitionalRollback
Manual:$wgCacheDirectory
Manual:$wgCachedMessageArrays
Manual:$wgCacheEpoch
Manual:$wgCachePages
Manual:$wgCachePrefix
Manual:$wgCacheSharedUploads
Manual:$wgCacheVaryCookies
Manual:$wgCanonicalLanguageLinks
Manual:$wgCanonicalNamespaceNames
Manual:$wgCanonicalServer
Manual:$wgCapitalLinkOverrides
Manual:$wgCapitalLinks
Manual:$wgCascadingRestrictionLevels
Manual:$wgCategoryCollation
Manual:$wgCategoryMagicGallery
Manual:$wgCategoryPagingLimit
Manual:$wgCategoryPrefixedDefaultSortkey
Manual:$wgCdnMatchParameterOrder
Manual:$wgCdnMaxAge
Manual:$wgCdnMaxageLagged
Manual:$wgCdnMaxageStale
Manual:$wgCdnMaxageSubstitute
Manual:$wgCdnReboundPurgeDelay
Manual:$wgCdnServers
Manual:$wgCdnServersNoPurge
Manual:$wgCentralIdLookupProvider
Manual:$wgCentralIdLookupProviders
Manual:$wgChangeCredentialsBlacklist
Manual:$wgChangeTagsSchemaMigrationStage
Manual:$wgCheckCopyrightUpload
Manual:$wgCheckDBSchema
Manual:$wgCheckFileExtensions
Manual:$wgCheckSerialized
Manual:$wgChronologyProtectorSecret
Manual:$wgChronologyProtectorStash
Manual:$wgCleanSignatures
Manual:$wgCleanupPresentationalAttributes
Manual:$wgClockSkewFudge
Manual:$wgCodexDevelopmentDir
Manual:$wgColorErrors
Manual:$wgCommandLineDarkBg
Manual:$wgCommandLineMode
Manual:$wgCommentTableSchemaMigrationStage
Manual:$wgCommentTempTableSchemaMigrationStage
Manual:$wgCompiledFiles
Manual:$wgCompressedPersistentLC
Manual:$wgCompressRevisions
Manual:$wgConditionalUserOptions
Manual:$wgConf
Manual:$wgConfigRegistry
Manual:$wgContentHandlers
Manual:$wgContentHandlerTextFallback
Manual:$wgContentHandlerUseDB
Manual:$wgContentNamespaces
Manual:$wgContLang
Manual:$wgCookieDomain
Manual:$wgCookieExpiration
Manual:$wgCookieHttpOnly
Manual:$wgCookiePath
Manual:$wgCookiePrefix
Manual:$wgCookieSameSite
Manual:$wgCookieSecure
Manual:$wgCookieSetOnAutoblock
Manual:$wgCookieSetOnIpBlock
Manual:$wgCopyrightIcon
Manual:$wgCopyUploadAllowOnWikiDomainConfig
Manual:$wgCopyUploadAsyncTimeout
Manual:$wgCopyUploadProxy
Manual:$wgCopyUploadsDomains
Manual:$wgCopyUploadsFromSpecialUpload
Manual:$wgCopyUploadTimeout
Manual:$wgCountCategorizedImagesAsUsed
Manual:$wgCountTotalSearchHits
Manual:$wgCriticalSectionTimeLimit
Manual:$wgCrossSiteAJAXdomainExceptions
Manual:$wgCrossSiteAJAXdomains
Manual:$wgCSPFalsePositiveUrls
Manual:$wgCSPHeader
Manual:$wgCSPReportOnlyHeader
Manual:$wgCustomConvertCommand
Manual:$wgDatabaseReplicaLagCritical
Manual:$wgDatabaseReplicaLagWarning
Manual:$wgDataCenterUpdateStickTTL
Manual:$wgDBadminpassword
Manual:$wgDBadminuser
Manual:$wgDBAhandler
Manual:$wgDBAvgStatusPoll
Manual:$wgDBClusterTimeout
Manual:$wgDBcompress
Manual:$wgDBconnection
Manual:$wgDBDefaultGroup
Manual:$wgDBerrorLog
Manual:$wgDBerrorLogTZ
Manual:$wgDBloads
Manual:$wgDBminWordLen
Manual:$wgDBmwschema
Manual:$wgDBmysql4
Manual:$wgDBmysql5
Manual:$wgDBname
Manual:$wgDBOracleDRCP
Manual:$wgDBpassword
Manual:$wgDBport
Manual:$wgDBprefix
Manual:$wgDBschema
Manual:$wgDBserver
Manual:$wgDBservers
Manual:$wgDBsqlpassword
Manual:$wgDBsqluser
Manual:$wgDBssl
Manual:$wgDBStrictWarnings
Manual:$wgDBTableOptions
Manual:$wgDBtestpassword
Manual:$wgDBtestuser
Manual:$wgDBtransactions
Manual:$wgDBts2schema
Manual:$wgDBtype
Manual:$wgDBuser
Manual:$wgDBWindowsAuthentication
Manual:$wgDebugAPI
Manual:$wgDebugComments
Manual:$wgDebugDBTransactions
Manual:$wgDebugDumpSql
Manual:$wgDebugDumpSqlLength
Manual:$wgDebugFunctionEntry
Manual:$wgDebugLogFile
Manual:$wgDebugLogGroups
Manual:$wgDebugLogPrefix
Manual:$wgDebugPrintHttpHeaders
Manual:$wgDebugProfiling
Manual:$wgDebugRawPage
Manual:$wgDebugRedirects
Manual:$wgDebugSquid
Manual:$wgDebugTidy
Manual:$wgDebugTimestamps
Manual:$wgDebugToolbar
Manual:$wgDefaultBlockExpiry
Manual:$wgDefaultExternalStore
Manual:$wgDefaultLanguageVariant
Manual:$wgDefaultRobotPolicy
Manual:$wgDefaultSkin
Manual:$wgDefaultUserOptions
Manual:$wgDeletedDirectory
Manual:$wgDeleteRevisionsBatchSize
Manual:$wgDeleteRevisionsLimit
Manual:$wgDeprecationReleaseLimit
Manual:$wgDevelopmentWarnings
Manual:$wgDeviceDetectionClass
Manual:$wgDiff
Manual:$wgDiff3
Manual:$wgDiffEngine
Manual:$wgDirectoryMode
Manual:$wgDisableAnonTalk
Manual:$wgDisableAuthManager
Manual:$wgDisableCookieCheck
Manual:$wgDisableCounters
Manual:$wgDisabledActions
Manual:$wgDisabledVariants
Manual:$wgDisableFuzzySearch
Manual:$wgDisableHardRedirects
Manual:$wgDisableInternalSearch
Manual:$wgDisableLangConversion
Manual:$wgDisableOutputCompression
Manual:$wgDisableQueryPages
Manual:$wgDisableQueryPageUpdate
Manual:$wgDisableSearchContext
Manual:$wgDisableSearchUpdate
Manual:$wgDisableTextSearch
Manual:$wgDisableTitleConversion
Manual:$wgDisableUploads
Manual:$wgDisableUploadScriptChecks
Manual:$wgDisableUserGroupExpiry
Manual:$wgDismissableSiteNoticeForAnons
Manual:$wgDjvuDump
Manual:$wgDjvuOutputExtension
Manual:$wgDjvuPostProcessor
Manual:$wgDjvuRenderer
Manual:$wgDjvuShell
Manual:$wgDjvuToXML
Manual:$wgDjvuTxt
Manual:$wgDnsBlacklistUrls
Manual:$wgDocType
Manual:$wgDTD
Manual:$wgDummyLanguageCodes
Manual:$wgEditEncoding
Manual:$wgEdititis
Manual:$wgEditPageFrameOptions
Manual:$wgEditRecoveryExpiry
Manual:$wgEditSubmitButtonLabelPublish
Manual:$wgElementTiming
Manual:$wgEmailAuthentication
Manual:$wgEmailConfirmToEdit
Manual:$wgEmergencyContact
Manual:$wgEnableAPI
Manual:$wgEnableAsyncUploads
Manual:$wgEnableAsyncUploadsByURL
Manual:$wgEnableAutoRotation
Manual:$wgEnableBotPasswords
Manual:$wgEnableCanonicalServerLink
Manual:$wgEnableCascadingProtection
Manual:$wgEnableCreativeCommonsRdf
Manual:$wgEnableDnsBlacklist
Manual:$wgEnableDublinCoreRdf
Manual:$wgEnableEmail
Manual:$wgEnableHtmlDiff
Manual:$wgEnableImageWhitelist
Manual:$wgEnableJavaScriptTest
Manual:$wgEnableMagicLinks
Manual:$wgEnableMultiBlocks
Manual:$wgEnableMWSuggest
Manual:$wgEnableNewpagesUserFilter
Manual:$wgEnableOpenSearchSuggest
Manual:$wgEnableOpm
Manual:$wgEnableParserCache
Manual:$wgEnableParserLimitReporting
Manual:$wgEnablePartialBlocks
Manual:$wgEnablePersistentLC
Manual:$wgEnableProfileInfo
Manual:$wgEnableProtectionIndicators
Manual:$wgEnableRemoteBagOStuffTests
Manual:$wgEnableRestAPI
Manual:$wgEnableScaryTranscluding
Manual:$wgEnableSearchContributorsByIP
Manual:$wgEnableSelenium
Manual:$wgEnableSerializedMessages
Manual:$wgEnableSidebarCache
Manual:$wgEnableSOAP
Manual:$wgEnableSorbs
Manual:$wgEnableSpecialMute
Manual:$wgEnableTooltipsAndAccesskeys
Manual:$wgEnableUploads
Manual:$wgEnableUserEmail
Manual:$wgEnableUserEmailBlacklist
Manual:$wgEnableUserEmailMuteList
Manual:$wgEnableWANCacheReaper
Manual:$wgEnableWriteAPI
Manual:$wgEnforceHtmlIds
Manual:$wgEnotifFromEditor
Manual:$wgEnotifImpersonal
Manual:$wgEnotifMaxRecips
Manual:$wgEnotifMinorEdits
Manual:$wgEnotifRevealEditorAddress
Manual:$wgEnotifUseJobQ
Manual:$wgEnotifUseRealName
Manual:$wgEnotifUserTalk
Manual:$wgEnotifWatchlist
Manual:$wgEventLoggingSchemas
Manual:$wgEventRelayerConfig
Manual:$wgExceptionHooks
Manual:$wgExemptFromUserRobotsControl
Manual:$wgExiftool
Manual:$wgExiv2Command
Manual:$wgExpensiveParserFunctionLimit
Manual:$wgExperiencedUserEdits
Manual:$wgExperiencedUserMemberSince
Manual:$wgExperimentalHtmlIds
Manual:$wgExportAllowAll
Manual:$wgExportAllowHistory
Manual:$wgExportAllowListContributors
Manual:$wgExportFromNamespaces
Manual:$wgExportMaxHistory
Manual:$wgExportMaxLinkDepth
Manual:$wgExportPagelistLimit
Manual:$wgExtendedLoginCookieExpiration
Manual:$wgExtendedLoginCookies
Manual:$wgExtensionAliasesFiles
Manual:$wgExtensionAssetsPath
Manual:$wgExtensionCredits
Manual:$wgExtensionDirectory
Manual:$wgExtensionEntryPointListFiles
Manual:$wgExtensionFunctions
Manual:$wgExtensionInfoMTime
Manual:$wgExtensionMessagesDirs
Manual:$wgExtensionMessagesFiles
Manual:$wgExtensionsDirectory
Manual:$wgExternalAuthConf
Manual:$wgExternalAuthConfig
Manual:$wgExternalAuthType
Manual:$wgExternalDiffEngine
Manual:$wgExternalInterwikiFragmentMode
Manual:$wgExternalLinksDomainGaps
Manual:$wgExternalLinksSchemaMigrationStage
Manual:$wgExternalLinkTarget
Manual:$wgExternalServers
Manual:$wgExternalStores
Manual:$wgExtModifiedFields
Manual:$wgExtNewFields
Manual:$wgExtNewIndexes
Manual:$wgExtNewTables
Manual:$wgExtPGAlteredFields
Manual:$wgExtPGNewFields
Manual:$wgExtraGenderNamespaces
Manual:$wgExtraInterlanguageLinkPrefixes
Manual:$wgExtraLanguageCodes
Manual:$wgExtraLanguageNames
Manual:$wgExtraNamespaces
Manual:$wgExtraRandompageSQL
Manual:$wgExtraSignatureNamespaces
Manual:$wgExtraSubtitle
Manual:$wgFallbackSkin
Manual:$wgFavicon
Manual:$wgFeaturePolicyReportOnly
Manual:$wgFeed
Manual:$wgFeedCacheTimeout
Manual:$wgFeedClasses
Manual:$wgFeedDiffCutoff
Manual:$wgFeedLimit
Manual:$wgFetchCommonsDescriptions
Manual:$wgFFmpegLocation
Manual:$wgFFprobeLocation
Manual:$wgFileBackends
Manual:$wgFileBlacklist
Manual:$wgFileCacheDepth
Manual:$wgFileCacheDirectory
Manual:$wgFileExtensions
Manual:$wgFileRedirects
Manual:$wgFileStore
Manual:$wgFilterCallback
Manual:$wgFilterLogTypes
Manual:$wgFilterRobotsWL
Manual:$wgFixArabicUnicode
Manual:$wgFixDoubleRedirects
Manual:$wgFixMalayalamUnicode
Manual:$wgFooterIcons
Manual:$wgFooterLinkCacheExpiry
Manual:$wgForceDeferredUpdatesPreSend
Manual:$wgForcedRawSMaxage
Manual:$wgForceHTTPS
Manual:$wgForceUIMsgAsContentMsg
Manual:$wgForeignFileRepos
Manual:$wgForeignUploadTargets
Manual:$wgFragmentMode
Manual:$wgGalleryOptions
Manual:$wgGenerateThumbnailOnParse
Manual:$wgGitBin
Manual:$wgGitInfoCacheDirectory
Manual:$wgGitRepositoryViewers
Manual:$wgGoToEdit
Manual:$wgGrammarForms
Manual:$wgGrantPermissionGroups
Manual:$wgGrantPermissions
Manual:$wgGrantRiskGroups
Manual:$wgGroupInheritsPermissions
Manual:$wgGroupPermissions
Manual:$wgGroupsAddToSelf
Manual:$wgGroupsRemoveFromSelf
Manual:$wgHandheldForIPhone
Manual:$wgHandheldStyle
Manual:$wgHashedSharedUploadDirectory
Manual:$wgHashedUploadDirectory
Manual:$wgHiddenPrefs
Manual:$wgHideIdentifiableRedirects
Manual:$wgHideInterlanguageLinks
Manual:$wgHideUserContribLimit
Manual:$wgHipHopBuildDirectory
Manual:$wgHipHopBuildType
Manual:$wgHipHopCompilerProcs
Manual:$wgHitcounterUpdateFreq
Manual:$wgHKDFAlgorithm
Manual:$wgHKDFSecret
Manual:$wgHooks
Manual:$wgHTCPMulticastAddress
Manual:$wgHTCPMulticastRouting
Manual:$wgHTCPMulticastTTL
Manual:$wgHTCPPort
Manual:$wgHTCPRouting
Manual:$wgHtml5
Manual:$wgHtml5Version
Manual:$wgHTMLFormAllowTableFormat
Manual:$wgHTTPConnectTimeout
Manual:$wgHTTPImportTimeout
Manual:$wgHTTPMaxConnectTimeout
Manual:$wgHTTPMaxTimeout
Manual:$wgHttpOnlyBlacklist
Manual:$wgHTTPProxy
Manual:$wgHttpsPort
Manual:$wgHTTPTimeout
Manual:$wgIgnoreImageErrors
Manual:$wgIgnoreSQLErrors
Manual:$wgIllegalFileChars
Manual:$wgImageHtmlCacheExpiry
Manual:$wgImageLimits
Manual:$wgImageMagickConvertCommand
Manual:$wgImageMagickIdentifyCommand
Manual:$wgImageMagickTempDir
Manual:$wgImagePreconnect
Manual:$wgImgAuthDetails
Manual:$wgImgAuthPath
Manual:$wgImgAuthPublicTest
Manual:$wgImgAuthUrlPathMap
Manual:$wgImplicitGroups
Manual:$wgImplicitRights
Manual:$wgImportSources
Manual:$wgImportTargetNamespace
Manual:$wgIncludejQueryMigrate
Manual:$wgIncludeLegacyJavaScript
Manual:$wgInputEncoding
Manual:$wgInterlanguageLinkCodeMap
Manual:$wgInternalServer
Manual:$wgInterwikiCache
Manual:$wgInterwikiExpiry
Manual:$wgInterwikiFallbackSite
Manual:$wgInterwikiLogoOverride
Manual:$wgInterwikiMagic
Manual:$wgInterwikiPrefixDisplayTypes
Manual:$wgInterwikiScopes
Manual:$wgInvalidateCacheOnLocalSettingsChange
Manual:$wgInvalidPasswordReset
Manual:$wgInvalidRedirectTargets
Manual:$wgInvalidUsernameCharacters
Manual:$wgIPBlockExpiration
Manual:$wgJavaScriptTestConfig
Manual:$wgJobBackoffThrottling
Manual:$wgJobClasses
Manual:$wgJobLogFile
Manual:$wgJobQueueAggregator
Manual:$wgJobQueueIncludeInMaxLagFactor
Manual:$wgJobRunRate
Manual:$wgJobSerialCommitThreshold
Manual:$wgJobTypeConf
Manual:$wgJobTypesExcludedFromDefaultQueue
Manual:$wgJpegPixelFormat
Manual:$wgJpegQuality
Manual:$wgJpegTran
Manual:$wgJsMimeType
Manual:$wgLang
Manual:$wgLangObjCacheSize
Manual:$wgLanguageCode
Manual:$wgLanguageConverterCacheType
Manual:$wgLanguageFile
Manual:$wgLBFactoryConf
Manual:$wgLearnerEdits
Manual:$wgLearnerMemberSince
Manual:$wgLegacyEncoding
Manual:$wgLegacyJavaScriptGlobals
Manual:$wgLegacySchemaConversion
Manual:$wgLegalTitleChars
Manual:$wgLicenseTerms
Manual:$wgLinkCacheMemcached
Manual:$wgLinkHolderBatchSize
Manual:$wgLivePasswordStrengthChecks
Manual:$wgLivePreview
Manual:$wgLoadBalancer
Manual:$wgLoadFileinfoExtension
Manual:$wgLoadScript
Manual:$wgLocalDatabases
Manual:$wgLocalFileRepo
Manual:$wgLocalHTTPProxy
Manual:$wgLocalInterwiki
Manual:$wgLocalInterwikis
Manual:$wgLocalisationCacheConf
Manual:$wgLocalMessageCache
Manual:$wgLocalMessageCacheSerialized
Manual:$wgLocalStylePath
Manual:$wgLocaltimezone
Manual:$wgLocalTZoffset
Manual:$wgLocalVirtualHosts
Manual:$wgLockManagers
Manual:$wgLogActions
Manual:$wgLogActionsHandlers
Manual:$wgLogAutocreatedAccounts
Manual:$wgLogAutopatrol
Manual:$wgLogExceptionBacktrace
Manual:$wgLoggedOutMaxAge
Manual:$wgLogHeaders
Manual:$wgLoginLanguageSelector
Manual:$wgLogNames
Manual:$wgLogo
Manual:$wgLogoHD
Manual:$wgLogos
Manual:$wgLogQueries
Manual:$wgLogRestrictions
Manual:$wgLogTypes
Manual:$wgMainCacheType
Manual:$wgMainPageIsDomainRoot
Manual:$wgMainStash
Manual:$wgMaintenanceScripts
Manual:$wgMainWANCache
Manual:$wgMakeDumpLinks
Manual:$wgMangleFlashPolicy
Manual:$wgManualRevertSearchRadius
Manual:$wgMasterWaitTimeout
Manual:$wgMathCheckFiles
Manual:$wgMathDebug
Manual:$wgMathDefaultLaTeXMLSetting
Manual:$wgMathDirectory
Manual:$wgMathDisableTexFilter
Manual:$wgMathEnableExperimentalInputFormats
Manual:$wgMathFileBackend
Manual:$wgMathJax
Manual:$wgMathLaTeXMLTimeout
Manual:$wgMathLaTeXMLUrl
Manual:$wgMathPath
Manual:$wgMathTexvcCheckExecutable
Manual:$wgMathUseLaTeXML
Manual:$wgMaxAnimatedGifArea
Manual:$wgMaxArticleSize
Manual:$wgMaxBacklinksInvalidate
Manual:$wgMaxCredits
Manual:$wgMaxExecutionTimeForExpensiveQueries
Manual:$wgMaxGeneratedPPNodeCount
Manual:$wgMaxImageArea
Manual:$wgMaximalPasswordLength
Manual:$wgMaximumMovedPages
Manual:$wgMaxInterlacingAreas
Manual:$wgMaxJobDBWriteDuration
Manual:$wgMaxMsgCacheEntrySize
Manual:$wgMaxNameChars
Manual:$wgMaxPPExpandDepth
Manual:$wgMaxPPNodeCount
Manual:$wgMaxRedirectLinksRetrieved
Manual:$wgMaxRedirects
Manual:$wgMaxShellFileSize
Manual:$wgMaxShellMemory
Manual:$wgMaxShellTime
Manual:$wgMaxShellWallClockTime
Manual:$wgMaxSigChars
Manual:$wgMaxSquidPurgeTitles
Manual:$wgMaxTemplateDepth
Manual:$wgMaxTocLevel
Manual:$wgMaxUploadSize
Manual:$wgMaxUserDBWriteDuration
Manual:$wgMediaHandlers
Manual:$wgMediaInTargetLanguage
Manual:$wgMemc
Manual:$wgMemCachedDebug
Manual:$wgMemCachedPersistent
Manual:$wgMemCachedServers
Manual:$wgMemCachedTimeout
Manual:$wgMemoryLimit
Manual:$wgMessageCache
Manual:$wgMessageCacheType
Manual:$wgMessagesDirs
Manual:$wgMetadataWhitelist
Manual:$wgMetaNamespace
Manual:$wgMetaNamespaceTalk
Manual:$wgMetricsFormat
Manual:$wgMetricsPrefix
Manual:$wgMetricsTarget
Manual:$wgMicroStashType
Manual:$wgMimeDetectorCommand
Manual:$wgMimeInfoFile
Manual:$wgMimeType
Manual:$wgMimeTypeBlacklist
Manual:$wgMimeTypeExclusions
Manual:$wgMimeTypeFile
Manual:$wgMinimalPasswordLength
Manual:$wgMinUploadChunkSize
Manual:$wgMiserMode
Manual:$wgMsgCacheExpiry
Manual:$wgMultiContentRevisionSchemaMigrationStage
Manual:$wgMultiShardSiteStats
Manual:$wgMWLoggerDefaultSpi
Manual:$wgMWLoggerMonologSpiConfig
Manual:$wgMWSuggestTemplate
Manual:$wgNamespaceAliases
Manual:$wgNamespaceContentModels
Manual:$wgNamespaceProtection
Manual:$wgNamespaceRobotPolicies
Manual:$wgNamespacesToBeSearchedDefault
Manual:$wgNamespacesToBeSearchedHelp
Manual:$wgNamespacesToBeSearchedProject
Manual:$wgNamespacesWithSubpages
Manual:$wgNativeImageLazyLoading
Manual:$wgNavigationLinks
Manual:$wgNewPasswordExpiry
Manual:$wgNewUserLog
Manual:$wgNoFollowDomainExceptions
Manual:$wgNoFollowLinks
Manual:$wgNoFollowNsExceptions
Manual:$wgNonincludableNamespaces
Manual:$wgNoReplyAddress
Manual:$wgObjectCaches
Manual:$wgObjectCacheSessionExpiry
Manual:$wgOldChangeTagsIndex
Manual:$wgOldRevisionParserCacheExpireTime
Manual:$wgOOUIEditPage
Manual:$wgOpenSearchDefaultLimit
Manual:$wgOpenSearchDescriptionLength
Manual:$wgOpenSearchTemplate
Manual:$wgOpenSearchTemplates
Manual:$wgOpenTelemetryConfig
Manual:$wgOriginTrials
Manual:$wgOut
Manual:$wgOutputEncoding
Manual:$wgOverrideHostname
Manual:$wgOverrideSiteFeed
Manual:$wgOverrideUcfirstCharacters
Manual:$wgPageCreationLog
Manual:$wgPageInfoTransclusionLimit
Manual:$wgPageLanguageUseDB
Manual:$wgPageLinksSchemaMigrationStage
Manual:$wgPagePropLinkInvalidations
Manual:$wgPageProps
Manual:$wgPagePropsHaveSortkey
Manual:$wgPageShowWatchingUsers
Manual:$wgParser
Manual:$wgParserCacheExpireTime
Manual:$wgParserCacheFilterConfig
Manual:$wgParserCacheType
Manual:$wgParserCacheUseJson
Manual:$wgParserConf
Manual:$wgParserEnableLegacyHeadingDOM
Manual:$wgParserEnableLegacyMediaDOM
Manual:$wgParserEnableUserLanguage
Manual:$wgParserOutputHooks
Manual:$wgParserTestFiles
Manual:$wgParserTestMediaHandlers
Manual:$wgParserTestRemote
Manual:$wgParsoidSelectiveUpdateSampleRate
Manual:$wgParsoidSettings
Manual:$wgPartialMessageCache
Manual:$wgPasswordAttemptThrottle
Manual:$wgPasswordConfig
Manual:$wgPasswordDefault
Manual:$wgPasswordExpirationDays
Manual:$wgPasswordExpireGrace
Manual:$wgPasswordPolicy
Manual:$wgPasswordReminderResendTime
Manual:$wgPasswordResetRoutes
Manual:$wgPasswordSalt
Manual:$wgPasswordSender
Manual:$wgPasswordSenderName
Manual:$wgPhpCli
Manual:$wgPHPSessionHandling
Manual:$wgPingback
Manual:$wgPoolCountClientConf
Manual:$wgPoolCounterConf
Manual:$wgPopularPasswordFile
Manual:$wgPreloadJavaScriptMwUtil
Manual:$wgPreprocessorCacheThreshold
Manual:$wgPreviewOnOpenNamespaces
Manual:$wgPriorityHints
Manual:$wgPriorityHintsRatio
Manual:$wgPrivilegedGroups
Manual:$wgProfileCallTree
Manual:$wgProfileLimit
Manual:$wgProfileOnly
Manual:$wgProfilePerHost
Manual:$wgProfiler
Manual:$wgProfilerType
Manual:$wgProfileSampleRate
Manual:$wgProfileToCommentUser
Manual:$wgProfileToDatabase
Manual:$wgProfiling
Manual:$wgProhibitedFileExtensions
Manual:$wgPropagateErrors
Manual:$wgProto
Manual:$wgProxyKey
Manual:$wgProxyList
Manual:$wgProxyMemcExpiry
Manual:$wgProxyPorts
Manual:$wgProxyScriptPath
Manual:$wgProxyWhitelist
Manual:$wgPutIPinRC
Manual:$wgQueryCacheLimit
Manual:$wgQueryPageDefaultLimit
Manual:$wgQueryPages
Manual:$wgRangeBlockReason
Manual:$wgRangeBlockUser
Manual:$wgRangeContributionsCIDRLimit
Manual:$wgRateLimitLog
Manual:$wgRateLimits
Manual:$wgRateLimitsExcludedGroups
Manual:$wgRateLimitsExcludedIPs
Manual:$wgRawHtml
Manual:$wgRawHtmlMessages
Manual:$wgRC2UDPAddress
Manual:$wgRC2UDPInterwikiPrefix
Manual:$wgRC2UDPOmitBots
Manual:$wgRC2UDPPort
Manual:$wgRC2UDPPrefix
Manual:$wgRCChangedSizeThreshold
Manual:$wgRCEngines
Manual:$wgRCFeeds
Manual:$wgRCFilterByAge
Manual:$wgRCLinkDays
Manual:$wgRCLinkLimits
Manual:$wgRCMaxAge
Manual:$wgRCSeconds
Manual:$wgRCShowChangedSize
Manual:$wgRCShowWatchingUsers
Manual:$wgRCWatchCategoryMembership
Manual:$wgReadOnly
Manual:$wgReadOnlyFile
Manual:$wgReadOnlyWatchedItemStore
Manual:$wgReauthenticateTime
Manual:$wgRecentChangesFlags
Manual:$wgRedirectOnLogin
Manual:$wgRedirectScript
Manual:$wgRedirectSources
Manual:$wgReferrerPolicy
Manual:$wgRegisterInternalExternals
Manual:$wgRememberMe
Manual:$wgRemoteUploads
Manual:$wgRemoveCredentialsBlacklist
Manual:$wgRemoveGroups
Manual:$wgRenderHashAppend
Manual:$wgReportToEndpoints
Manual:$wgReportToExpiry
Manual:$wgRepositoryBaseUrl
Manual:$wgRequest
Manual:$wgRequestTime
Manual:$wgRequestTimeLimit
Manual:$wgRequirePasswordforEmailChange
Manual:$wgReservedUsernames
Manual:$wgResourceBasePath
Manual:$wgResourceLoaderDebug
Manual:$wgResourceLoaderEnableJSProfiler
Manual:$wgResourceLoaderEnableSourceMapLinks
Manual:$wgResourceLoaderExperimentalAsyncLoading
Manual:$wgResourceLoaderInlinePrivateModules
Manual:$wgResourceLoaderLESSFunctions
Manual:$wgResourceLoaderLESSImportPaths
Manual:$wgResourceLoaderLESSVars
Manual:$wgResourceLoaderMaxage
Manual:$wgResourceLoaderMaxQueryLength
Manual:$wgResourceLoaderMinifierMaxLineLength
Manual:$wgResourceLoaderMinifierStatementsOnOwnLine
Manual:$wgResourceLoaderSources
Manual:$wgResourceLoaderStorageEnabled
Manual:$wgResourceLoaderStorageVersion
Manual:$wgResourceLoaderUseESI
Manual:$wgResourceLoaderValidateJS
Manual:$wgResourceLoaderValidateStaticJS
Manual:$wgResourceModules
Manual:$wgResourceModuleSkinStyles
Manual:$wgResponsiveImages
Manual:$wgRestAllowCrossOriginCookieAuth
Manual:$wgRestAPIAdditionalRouteFiles
Manual:$wgRestPath
Manual:$wgRestrictDisplayTitle
Manual:$wgRestrictionLevels
Manual:$wgRestrictionTypes
Manual:$wgRestSandboxSpecs
Manual:$wgRevertedTagMaxDepth
Manual:$wgRevisionCacheExpiry
Manual:$wgRevisionSlotsCacheExpiry
Manual:$wgRevokePermissions
Manual:$wgRightsCode
Manual:$wgRightsIcon
Manual:$wgRightsPage
Manual:$wgRightsText
Manual:$wgRightsUrl
Manual:$wgRunJobsAsync
Manual:$wgSaveDeletedFiles
Manual:$wgScript
Manual:$wgScriptExtension
Manual:$wgScriptPath
Manual:$wgSearchEverythingOnlyLoggedIn
Manual:$wgSearchForwardUrl
Manual:$wgSearchHighlightBoundaries
Manual:$wgSearchMatchRedirectPreference
Manual:$wgSearchRunSuggestedQuery
Manual:$wgSearchSuggestCacheExpiry
Manual:$wgSearchType
Manual:$wgSearchTypeAlternatives
Manual:$wgSecondaryMessageDB
Manual:$wgSecretKey
Manual:$wgSecureLogin
Manual:$wgSecureLoginDefaultHTTPS
Manual:$wgSeleniumConfigFile
Manual:$wgSeleniumTestConfigs
Manual:$wgSemiprotectedRestrictionLevels
Manual:$wgSend404Code
Manual:$wgServer
Manual:$wgServerName
Manual:$wgServiceWiringFiles
Manual:$wgSessionCacheType
Manual:$wgSessionHandler
Manual:$wgSessionInsecureSecrets
Manual:$wgSessionName
Manual:$wgSessionPbkdf2Iterations
Manual:$wgSessionProviders
Manual:$wgSessionSecret
Manual:$wgSessionsInMemcached
Manual:$wgSessionsInObjectCache
Manual:$wgSharedDB
Manual:$wgSharedLatin1
Manual:$wgSharedPrefix
Manual:$wgSharedSchema
Manual:$wgSharedTables
Manual:$wgSharedThumbnailScriptPath
Manual:$wgSharedUploadDBname
Manual:$wgSharedUploadDBprefix
Manual:$wgSharedUploadDirectory
Manual:$wgSharedUploadPath
Manual:$wgSharpenParameter
Manual:$wgSharpenReductionThreshold
Manual:$wgShellboxSecretKey
Manual:$wgShellboxShell
Manual:$wgShellboxUrl
Manual:$wgShellboxUrls
Manual:$wgShellCgroup
Manual:$wgShellLocale
Manual:$wgShellRestrictionMethod
Manual:$wgShortPagesNamespaceBlacklist
Manual:$wgShortPagesNamespaceExclusions
Manual:$wgShowArchiveThumbnails
Manual:$wgShowCreditsIfMax
Manual:$wgShowDBErrorBacktrace
Manual:$wgShowDebug
Manual:$wgShowExceptionDetails
Manual:$wgShowEXIF
Manual:$wgShowHostnames
Manual:$wgShowIPinHeader
Manual:$wgShowRollbackEditCount
Manual:$wgShowSQLErrors
Manual:$wgShowUpdatedMarker
Manual:$wgSidebarCacheExpiry
Manual:$wgSignatureAllowedLintErrors
Manual:$wgSignatureValidation
Manual:$wgSitemapNamespaces
Manual:$wgSitemapNamespacesPriorities
Manual:$wgSitename
Manual:$wgSiteNotice
Manual:$wgSitesCacheFile
Manual:$wgSiteStatsAsyncFactor
Manual:$wgSiteSupportPage
Manual:$wgSiteTypes
Manual:$wgSkinExtensionFunctions
Manual:$wgSkinMetaTags
Manual:$wgSkinsPreferred
Manual:$wgSkipSkin
Manual:$wgSkipSkins
Manual:$wgSlaveLagCritical
Manual:$wgSlaveLagWarning
Manual:$wgSMTP
Manual:$wgSoftBlockRanges
Manual:$wgSoftwareTags
Manual:$wgSorbsUrl
Manual:$wgSortSpecialPages
Manual:$wgSpamRegex
Manual:$wgSpecialContributeSkinsDisabled
Manual:$wgSpecialContributeSkinsEnabled
Manual:$wgSpecialPageCacheUpdates
Manual:$wgSpecialPageGroups
Manual:$wgSpecialPages
Manual:$wgSpecialSearchFormOptions
Manual:$wgSpecialVersionShowHooks
Manual:$wgSQLiteDataDir
Manual:$wgSQLiteDataDirMode
Manual:$wgSqlLogFile
Manual:$wgSQLMode
Manual:$wgSqlTimeout
Manual:$wgSquidFastPurge
Manual:$wgSquidMaxage
Manual:$wgSquidPurgeUseHostHeader
Manual:$wgSquidServers
Manual:$wgSquidServersNoPurge
Manual:$wgStatsCacheType
Manual:$wgStatsdMetricPrefix
Manual:$wgStatsdSamplingRates
Manual:$wgStatsdServer
Manual:$wgStatsFormat
Manual:$wgStatsFormatString
Manual:$wgStatsMethod
Manual:$wgStatsPrefix
Manual:$wgStatsTarget
Manual:$wgStockPath
Manual:$wgStrictFileExtensions
Manual:$wgStructuredChangeFiltersEnableExperimentalViews
Manual:$wgStructuredChangeFiltersEnableLiveUpdate
Manual:$wgStructuredChangeFiltersEnableSaving
Manual:$wgStructuredChangeFiltersLiveUpdatePollingRate
Manual:$wgStructuredChangeFiltersOnWatchlist
Manual:$wgStructuredChangeFiltersShowPreference
Manual:$wgStyleDirectory
Manual:$wgStylePath
Manual:$wgStyleSheetDirectory
Manual:$wgStyleSheetPath
Manual:$wgStyleVersion
Manual:$wgSummarySpamRegex
Manual:$wgSuspiciousIpExpiry
Manual:$wgSVGConverter
Manual:$wgSVGConverterPath
Manual:$wgSVGConverters
Manual:$wgSVGMaxSize
Manual:$wgSVGMetadataCutoff
Manual:$wgSVGNativeRendering
Manual:$wgSVGNativeRenderingSizeLimit
Manual:$wgSysopEmailBans
Manual:$wgSysopRangeBans
Manual:$wgSysopUserBans
Manual:$wgTagStatisticsNewTable
Manual:$wgTempAccountCreationThrottle
Manual:$wgTempAccountNameAcquisitionThrottle
Manual:$wgTempCategoryCollations
Manual:$wgTemplateLinksSchemaMigrationStage
Manual:$wgTextModelsToParse
Manual:$wgTexvc
Manual:$wgTexvcBackgroundColor
Manual:$wgThumbLimits
Manual:$wgThumbnailBuckets
Manual:$wgThumbnailEpoch
Manual:$wgThumbnailMinimumBucketDistance
Manual:$wgThumbnailNamespaces
Manual:$wgThumbnailScriptPath
Manual:$wgThumbPath
Manual:$wgThumbUpright
Manual:$wgTidyBin
Manual:$wgTidyConf
Manual:$wgTidyConfig
Manual:$wgTidyInternal
Manual:$wgTidyOpts
Manual:$wgTiffThumbnailType
Manual:$wgTitle
Manual:$wgTmpDirectory
Manual:$wgTrackingCategories
Manual:$wgTransactionalTimeLimit
Manual:$wgTranscludeCacheExpiry
Manual:$wgTranslateNumerals
Manual:$wgTrivialMimeDetection
Manual:$wgTrustedMediaFormats
Manual:$wgTrxProfilerLimits
Manual:$wgUDPProfilerFormatString
Manual:$wgUDPProfilerHost
Manual:$wgUDPProfilerPort
Manual:$wgUniversalEditButton
Manual:$wgUnwatchedPageSecret
Manual:$wgUnwatchedPageThreshold
Manual:$wgUpdateCompatibleMetadata
Manual:$wgUpdateRowsPerJob
Manual:$wgUpdateRowsPerQuery
Manual:$wgUpgradeKey
Manual:$wgUploadBaseUrl
Manual:$wgUploadDialog
Manual:$wgUploadDirectory
Manual:$wgUploadMaintenance
Manual:$wgUploadMissingFileUrl
Manual:$wgUploadNavigationUrl
Manual:$wgUploadPath
Manual:$wgUploadSizeWarning
Manual:$wgUploadStashMaxAge
Manual:$wgUploadStashScalerBaseUrl
Manual:$wgUploadThumbnailRenderHttpCustomDomain
Manual:$wgUploadThumbnailRenderHttpCustomHost
Manual:$wgUploadThumbnailRenderMap
Manual:$wgUploadThumbnailRenderMethod
Manual:$wgUrlProtocols
Manual:$wgUseAjax
Manual:$wgUseAutomaticEditSummaries
Manual:$wgUseBetterLinksUpdate
Manual:$wgUseCategoryBrowser
Manual:$wgUseCategoryMagic
Manual:$wgUseCdn
Manual:$wgUseCombinedLoginLink
Manual:$wgUseCommaCount
Manual:$wgUseCopyrightUpload
Manual:$wgUseData
Manual:$wgUseDatabaseMessages
Manual:$wgUseDumbLinkUpdate
Manual:$wgUseDynamicDates
Manual:$wgUseEAccelShm
Manual:$wgUseEnotif
Manual:$wgUseESI
Manual:$wgUseETag
Manual:$wgUseExternalDiffEngine
Manual:$wgUseExternalEditor
Manual:$wgUseFileCache
Manual:$wgUseFilePatrol
Manual:$wgUseGeoMode
Manual:$wgUseGzip
Manual:$wgUseImageMagick
Manual:$wgUseImageResize
Manual:$wgUseInstantCommons
Manual:$wgUsejQueryThree
Manual:$wgUseKeyHeader
Manual:$wgUseLatin1
Manual:$wgUseLinkNamespaceDBFields
Manual:$wgUseLocalMessageCache
Manual:$wgUseMediaWikiUIEverywhere
Manual:$wgUseMemCached
Manual:$wgUseMetadataEdit
Manual:$wgUseNewMediaStructure
Manual:$wgUseNPPatrol
Manual:$wgUseOldExistenceCheck
Manual:$wgUseOldSearchUI
Manual:$wgUsePathInfo
Manual:$wgUsePHPTal
Manual:$wgUsePigLatinVariant
Manual:$wgUsePrivateIPs
Manual:$wgUser
Manual:$wgUserBlockExpiration
Manual:$wgUseRCPatrol
Manual:$wgUserEmailConfirmationTokenExpiry
Manual:$wgUserEmailUseReplyTo
Manual:$wgUserFallbackLanguages
Manual:$wgUserHtml
Manual:$wgUserRegistrationProviders
Manual:$wgUserrightsInterwikiDelimiter
Manual:$wgUsersNotifiedOnAllChanges
Manual:$wgUseSameSiteLegacyCookies
Manual:$wgUseSharedUploads
Manual:$wgUseSiteCss
Manual:$wgUseSiteJs
Manual:$wgUseSquid
Manual:$wgUseTagFilter
Manual:$wgUseTeX
Manual:$wgUseTidy
Manual:$wgUseTinyRGBForJPGThumbnails
Manual:$wgUseTrackbacks
Manual:$wgUseTurckShm
Manual:$wgUseTwoButtonsSearchForm
Manual:$wgUseValidation
Manual:$wgUseWatchlistCache
Manual:$wgUseXMLparser
Manual:$wgUseXssLanguage
Manual:$wgUseXVO
Manual:$wgUseZhdaemon
Manual:$wgValidateAllHtml
Manual:$wgValidationForAnons
Manual:$wgValidSkinNames
Manual:$wgVariantArticlePath
Manual:$wgVaryOnXFP
Manual:$wgVectorCombineUserTalk
Manual:$wgVectorExtraStyles
Manual:$wgVectorResponsive
Manual:$wgVectorShowVariantName
Manual:$wgVectorUseIconWatch
Manual:$wgVectorUseSimpleSearch
Manual:$wgVerifyMimeType
Manual:$wgVerifyMimeTypeIE
Manual:$wgVersion
Manual:$wgVirtualDomainsMapping
Manual:$wgVirtualRestConfig
Manual:$wgVueDevelopmentMode
Manual:$wgWANObjectCache
Manual:$wgWANObjectCaches
Manual:$wgWantedPagesThreshold
Manual:$wgWatchersMaxAge
Manual:$wgWatchlistExpiry
Manual:$wgWatchlistExpiryMaxDuration
Manual:$wgWatchlistPurgeRate
Manual:$wgWellFormedXml
Manual:$wgWhitelistAccount
Manual:$wgWhitelistEdit
Manual:$wgWhitelistRead
Manual:$wgWhitelistReadRegexp
Manual:$wgWikiDiff2MovedParagraphDetectionCutoff
Manual:$wgWikidiff2Options
Manual:$wgWikiFarmSettingsDirectory
Manual:$wgWLCacheTimeout
Manual:$wgXhtmlDefaultNamespace
Manual:$wgXhtmlNamespaces
Manual:$wgXmlDumpSchemaVersion
Manual:$wgXMLMimeTypes
Manual:$wgZhdaemonHost
Manual:$wgZhdaemonPort
Manual:7zip.inc
Manual:Account creation
Manual:Action.php
Manual:Actor table
Manual:AddChangeTag.php
Manual:Adding support for new filetypes
Manual:AddWiki.php
Manual:Administrators
Manual:AdminSettings.php
Manual:Ajax
Manual:AllPages
Manual:Alltrans.php
Manual:AlterSharedConstraints.php
Manual:APCBagOStuff.php
Manual:Api.php
Manual:ApiBase.php
Manual:ApiEditPage.php
Manual:ApiFormatBase.php
Manual:ApiMain.php
Manual:ApiQueryBase.php
Manual:ApiQueryRecentChanges.php
Manual:ApiResult.php
Manual:Architectural modules/Cache
Manual:Archive table
Manual:Article count
Manual:Article.php
Manual:Assets
Manual:AttachLatest.php
Manual:Attribute.php
Manual:Autoconfirmed users
Manual:AutoLoader.php
Manual:Autopromote.php
Manual:Backing up a wiki
Manual:Backing up a wiki/Lanthanis backup CMD
Manual:Backlinks
Manual:Backup.inc
Manual:BackupPrefetch.inc
Manual:BackupTextPass.inc
Manual:Bench delete truncate.php
Manual:Bench HTTP HTTPS.php
Manual:Bench if switch.php
Manual:Bench strtr str replace.php
Manual:Bench utf8 title check.php
Manual:Bench wfBaseConvert.php
Manual:Bench wfIsWindows.php
Manual:Benchmarker
Manual:BenchmarkHooks.php
Manual:BenchmarkParse.php
Manual:BenchmarkPurge.php
Manual:Blobs table
Manual:Block abstraction layer
Manual:Block and unblock
Manual:Block table
Manual:Block target table
Manual:BlockUsers.php
Manual:Bot passwords
Manual:Bot passwords table
Manual:Bots
Manual:BoxedCommand
Manual:Brokenlinks table
Manual:Build Tidy from source
Manual:Cache
Manual:Call to undefined function json encode()
Manual:Categories
Manual:Category table
Manual:Category.php
Manual:CategoryChangesAsRdf.php
Manual:Categorylinks table
Manual:CategoryMembershipChanges
Manual:Cdb.php
Manual:Central ID
Manual:Change tag def table
Manual:Change tag table
Manual:ChangePassword.php
Manual:ChangesList.php
Manual:CheckAutoLoader.php
Manual:CheckBadRedirects.php
Manual:CheckComposerLockUpToDate.php
Manual:CheckDupeMessages.php
Manual:CheckExtensions.php
Manual:CheckImages.php
Manual:CheckLanguage.inc
Manual:CheckLanguage.php
Manual:CheckLess.php
Manual:CheckStorage.php
Manual:CheckSyntax.php
Manual:CheckUsernames.php
Manual:Chown
Manual:Chris G's botclasses
Manual:CleanupAncientTables.php
Manual:CleanupCaps.php
Manual:CleanupEmptyCategories.php
Manual:CleanupImages.php
Manual:CleanupPreferences.php
Manual:CleanupRemovedModules.php
Manual:CleanupRevActorPage.php
Manual:CleanupSpam.php
Manual:CleanupTable.inc
Manual:CleanupTitles.php
Manual:CleanupUploadStash.php
Manual:CleanupUsersWithNoId.php
Manual:CleanupWatchlist.php
Manual:ClearCacheStats.php
Manual:ClearInterwikiCache.php
Manual:Code
Manual:Coding conventions
Manual:Coding conventions/CSS
Manual:Coding conventions/Database
Manual:Coding conventions/Documentation
Manual:Coding conventions/Java
Manual:Coding conventions/Java/checkstyle.xml
Manual:Coding conventions/JavaScript
Manual:Coding conventions/Lua
Manual:Coding conventions/PHP
Manual:Coding conventions/Python
Manual:Coding conventions/Selenium
Manual:Coding conventions/SVG
Manual:Coding conventions/Vue
Manual:Collapsible elements
Manual:Collapsible elements/Demo/Details
Manual:Collation.php
Manual:Combating spam
Manual:Combating spam/AbuseFilter examples
Manual:Combating vandalism
Manual:CommandLine.inc
Manual:Comment table
Manual:Common errors and symptoms
Manual:Common errors and symptoms/PCRE
Manual:CommonElements.css
Manual:CommonSettings.php
Manual:CompareParserCache.php
Manual:CompareParsers.php
Manual:Composer.json best practices
Manual:CompressOld.php
Manual:Config script
Manual:Config table
Manual:Config.php
Manual:Configuration for developers
Manual:Configuration settings
Manual:Configuration settings (alphabetical)
Manual:Configuring file uploads
Manual:Configuring MediaWiki
Manual:Content models table
Manual:Content table
Manual:Content.php
Manual:ContentHandler
Manual:ContentHandler.php
Manual:Contents
Manual:ContextSource.php
Manual:ConverterRule.php
Manual:ConvertExtensionToRegistration.php
Manual:ConvertLinks.php
Manual:ConvertUserOptions.php
Manual:CopyFileBackend.php
Manual:CopyJobQueue.php
Manual:Copyright
Manual:CopyTextLayout
Manual:CoreParserFunctions.php
Manual:CoreTagHooks.php
Manual:CORS
Manual:CountMessages.php
Manual:CreateAndPromote.php
Manual:CreateBotPassword.php
Manual:CreateCommonPasswordCdb.php
Manual:Creating a bot
Manual:Creating pages with preloaded text
Manual:CreditsAction.php
Manual:CryptRand.php
Manual:CSS
Manual:Cur table
Manual:Custom edit buttons
Manual:DairikiDiff.php
Manual:Dark mode
Manual:Database access
Manual:Database fields containing sensitive data
Manual:Database inconsistencies
Manual:Database layout
Manual:Database layout/viewbox
Manual:Database.php
Manual:DatabaseInstaller.php
Manual:DatabaseUpdater.php
Manual:Date formatting
Manual:Date-formats.php
Manual:DBError.php
Manual:Deciding whether to use a wiki as your website type
Manual:Deciding which wiki software to use
Manual:DefaultSettings.php
Manual:Defines.php
Manual:DeleteAction.php
Manual:DeleteArchivedFiles.inc
Manual:DeleteArchivedFiles.php
Manual:DeleteArchivedRevisions.php
Manual:DeleteBatch.php
Manual:DeleteDefaultMessages.php
Manual:DeleteEqualMessages.php
Manual:DeleteImageMemcached.php
Manual:DeleteOldRevisions.php
Manual:DeleteOrphanedRevisions.php
Manual:DeleteRevision.php
Manual:DeleteSelfExternals.php
Manual:DeleteTag.php
Manual:DeleteUserEmail.php
Manual:DerivativeContext.php
Manual:Developing extensions
Manual:Developing libraries
Manual:DevelopmentSettings.php
Manual:DifferenceEngine.php
Manual:Digit2html.php
Manual:DoMaintenance.php
Manual:DoubleRedirectJob.php
Manual:DumpBackup.php
Manual:DumpCategoriesAsRdf.php
Manual:DumpInterwiki.php
Manual:DumpIterator.php
Manual:DumpLinks.php
Manual:DumpMessages.php
Manual:DumpRev.php
Manual:DumpSisterSites.php
Manual:DumpTextPass.php
Manual:DumpUploads.php
Manual:Echo
Manual:Edit conflict
Manual:Edit token
Manual:Edit.php
Manual:EditAction.php
Manual:EditPage.php
Manual:EmptyUserGroup.php
Manual:EnotifNotifyJob.php
Manual:EraseArchivedFile.php
Manual:Establishing a hierarchy of bureaucrats
Manual:Eval.php
Manual:Exception
Manual:ExpireTemporaryAccounts.php
Manual:ExportSites.php
Manual:Extending wiki markup
Manual:Extension registration
Manual:Extension registration/Limitations
Manual:Extension registration/Migration
Manual:Extension.json/Schema
Manual:Extension:CentralAuth/batchVanishUsers.php
Manual:Extensions
Manual:Extensions/Installation and upgrade
Manual:External libraries
Manual:External storage
Manual:External user table
Manual:Externallinks table
Manual:FakeConverter.php
Manual:FAQ
Manual:FetchText.php
Manual:File cache
Manual:File metadata handling
Manual:File page warnings
Manual:File.php
Manual:Filearchive table
Manual:FileBackend.php
Manual:FileBackendStore.php
Manual:FileCacheBase.php
Manual:FileOpPerfTest.php
Manual:FindBadBlobs.php
Manual:FindClasses.php
Manual:FindHooks.php
Manual:FindMissingActors.php
Manual:FindMissingFiles.php
Manual:FindOrphanedFiles.php
Manual:FixDefaultJsonContentPages.php
Manual:FixDoubleRedirects.php
Manual:FixExtLinksProtocolRelative.php
Manual:FixMergeHistoryCorruption.php
Manual:FixSlaveDesync.php
Manual:FixTimestamps.php
Manual:FixUserRegistration.php
Manual:Footer
Manual:Footer/legacy
Manual:FormatInstallDoc.php
Manual:Forms
Manual:FSFileBackend.php
Manual:FSRepo.php
Manual:GenderCache.php
Manual:GenerateAutoload.php
Manual:GenerateCollationData.php
Manual:GenerateConfigDefaultSettings.php
Manual:GenerateConfigNames.php
Manual:GenerateConfigSchemaArray.php
Manual:GenerateConfigSchemaYaml.php
Manual:GenerateJsonI18n.php
Manual:GenerateLocalAutoload.php
Manual:GenerateNormalizerDataAr.php
Manual:GenerateNormalizerDataMl.php
Manual:GenerateSchemaSql.php
Manual:GenerateSitemap.php
Manual:GenerateUtf8Case.php
Manual:GetConfiguration.php
Manual:GetLagTimes.php
Manual:GetReplicaServer.php
Manual:GetSlaveServer.php
Manual:GetText.php
Manual:Global object variables
Manual:GlobalFunctions.php
Manual:Grep.php
Manual:Help namespace
Manual:HistoryAction.php
Manual:HistoryBlob.php
Manual:Hitcounter table
Manual:HookContainer.php
Manual:Hooks
Manual:Hooks.php
Manual:Hooks/AbortDiffCache
Manual:Hooks/AbortTalkPageEmailNotification
Manual:Hooks/APIEditBeforeSave
Manual:Hooks/ArticleContentOnDiff
Manual:Hooks/ArticleRollbackComplete
Manual:Hooks/AuthChangeFormFields
Manual:Hooks/AutopromoteCondition
Manual:Hooks/BaseTemplateToolbox
Manual:Hooks/ExtensionTypes
Manual:Hooks/GalleryGetModes
Manual:Hooks/GetDifferenceEngine
Manual:Hooks/GetPreferences
Manual:Hooks/getUserPermissionsErrors
Manual:Hooks/LinkBegin
Manual:Hooks/LoadExtensionSchemaUpdates
Manual:Hooks/LoadUserOptions
Manual:Hooks/LocalUserCreated
Manual:Hooks/ModifyExportQuery
Manual:Hooks/MovePageCheckPermissions
Manual:Hooks/NewDifferenceEngine
Manual:Hooks/ParserBeforeStrip
Manual:Hooks/ParserFirstCallInit
Manual:Hooks/PersonalUrls
Manual:Hooks/RecentChange save
Manual:Hooks/ResourceLoaderGetConfigVars
Manual:Hooks/ShowSearchHit
Manual:Hooks/SkinAfterContent
Manual:Hooks/UploadComplete
Manual:Hooks/userCan
Manual:Hooks/UserGetRights
Manual:Hooks/UserResetAllOptions
Manual:HotCat
Manual:How to debug
Manual:How to debug/Login problems
Manual:How to make a MediaWiki skin
Manual:How to make a MediaWiki skin/Migrating SkinTemplate based skins to SkinMustache
Manual:How to use DjVu with MediaWiki
Manual:HTML templates
Manual:Html.php
Manual:HtmlArmor.php
Manual:HTMLCacheUpdate.php
Manual:HTMLFileCache.php
Manual:HTMLForm Tutorial
Manual:HTMLForm Tutorial 2
Manual:HTMLForm Tutorial 3
Manual:HTTPS
Manual:Huggle
Manual:Huggle/Actions toolbar
Manual:Huggle/Bot passwords
Manual:Huggle/Browser menu
Manual:Huggle/Closing
Manual:Huggle/Configuration
Manual:Huggle/Debugging
Manual:Huggle/Deploying
Manual:Huggle/Diff view
Manual:Huggle/Editor and article history
Manual:Huggle/Go to menu
Manual:Huggle/HAN menu
Manual:Huggle/Help menu
Manual:Huggle/History of your changes
Manual:Huggle/Installation
Manual:Huggle/Interface
Manual:Huggle/Introduction
Manual:Huggle/Keyboard shortcuts
Manual:Huggle/List builder
Manual:Huggle/Log
Manual:Huggle/Main toolbar
Manual:Huggle/Menu toolbar
Manual:Huggle/Navigation toolbar
Manual:Huggle/Network
Manual:Huggle/Page and editor
Manual:Huggle/Page menu
Manual:Huggle/Processes
Manual:Huggle/Queue
Manual:Huggle/Queue menu
Manual:Huggle/Quick start
Manual:Huggle/Requests view
Manual:Huggle/Reverts per minute
Manual:Huggle/Revision menu
Manual:Huggle/Scripting menu
Manual:Huggle/Startup
Manual:Huggle/Statistics
Manual:Huggle/System menu
Manual:Huggle/Tools menu
Manual:Huggle/Uninstalling
Manual:Huggle/User menu
Manual:IContextSource.php
Manual:Image administration
Manual:Image authorization
Manual:Image comment temp table
Manual:Image table
Manual:Imagelinks table
Manual:Img auth.php
Manual:ImportDump.php
Manual:ImportImages.inc
Manual:ImportImages.php
Manual:Importing revisions
Manual:Importing XML dumps
Manual:ImportSites.php
Manual:ImportSiteScripts.php
Manual:ImportTextFile.php
Manual:ImportTextFiles.php
Manual:ImportUseModWiki.php
Manual:Index.php
Manual:InfoAction.php
Manual:InitEditCount.php
Manual:InitialiseSettings.php
Manual:InitSiteStats.php
Manual:InitStats.inc
Manual:InitUserPreference.php
Manual:Install.php
Manual:Installation on Uniform Server (Windows)
Manual:Installation requirements
Manual:Installer.php
Manual:Installing MediaWiki
Manual:Installing MediaWiki on IBM Cloud
Manual:Interface
Manual:Interface/Activeusers-count
Manual:Interface/Addedwatchtext
Manual:Interface/Addsection
Manual:Interface/Anontalkpagetext
Manual:Interface/Blockedtext
Manual:Interface/Categorytree-member-num
Manual:Interface/Copyrightwarning
Manual:Interface/Disambiguationspage
Manual:Interface/Edit notice
Manual:Interface/Gadgets-definition
Manual:Interface/Gadgets-prefstext
Manual:Interface/IDs and classes
Manual:Interface/JavaScript
Manual:Interface/Mainpage
Manual:Interface/Movepage-moved
Manual:Interface/Noarticletext
Manual:Interface/Noarticletext-nopermission
Manual:Interface/Pagetitle
Manual:Interface/Protectedinterface
Manual:Interface/Protectedpagetext
Manual:Interface/Revertpage
Manual:Interface/Rights
Manual:Interface/Search-summary
Manual:Interface/Searcharticle
Manual:Interface/Searchbutton
Manual:Interface/Searchmenu
Manual:Interface/Searchresulttext
Manual:Interface/Sidebar
Manual:Interface/Sidebar/Hacks
Manual:Interface/Sitenotice
Manual:Interface/Special pages
Manual:Interface/Special pages summary
Manual:Interface/Special pages title
Manual:Interface/Stylesheets
Manual:Interface/Tag-advanced mobile edit
Manual:Interface/Talkpageheader
Manual:Interface/Uploaddisabledtext
Manual:Interface/Wikibase-SortedProperties
Manual:Interface/Youhavenewmessages
Manual:Interwiki
Manual:Interwiki cache
Manual:Interwiki table
Manual:Interwiki.list
Manual:Interwiki.php
Manual:InvalidateBotPasswords.php
Manual:Ip changes table
Manual:IP ranges
Manual:Ipblocks old table
Manual:Ipblocks restrictions table
Manual:Ipblocks table
Manual:IRC RC Bot
Manual:Iwlinks table
Manual:JavaScript unit testing
Manual:Job queue
Manual:Job table
Manual:JobQueue.php
Manual:Jsparse.php
Manual:L10n cache table
Manual:Lag.php
Manual:Langlinks table
Manual:Langmemusage.php
Manual:Language
Manual:Languages.inc
Manual:Link caching
Manual:LinkBatch.php
Manual:LinkCache.php
Manual:Linked images
Manual:Linker.php
Manual:LinkHolderArray.php
Manual:LinkRenderer.php
Manual:Links table
Manual:Linkscc table
Manual:LinksUpdate.php
Manual:Linktarget table
Manual:LinkTarget.php
Manual:List of MediaWiki configuration settings containing sensitive data
Manual:ListVariants.php
Manual:Live preview
Manual:Load balancing
Manual:Load.php
Manual:LocalFile.php
Manual:LocalisationCache.php
Manual:LocalSettings.php
Manual:LocalSettingsGenerator.php
Manual:Lock the database
Manual:Log actions
Manual:Log search table
Manual:LogEntry.php
Manual:LogEventsList.php
Manual:LogFormatter.php
Manual:Logging table
Manual:Logging to Special:Log
Manual:LogPage.php
Manual:LogPager.php
Manual:Magic words
Manual:Main Page
Manual:MainConfigSchema.php
Manual:Maintenance scripts
Manual:Maintenance scripts/Configuration
Manual:Maintenance scripts/List of scripts
Manual:Maintenance scripts/Running the scripts
Manual:Maintenance.php
Manual:MakeTestEdits.php
Manual:ManageForeignResources.php
Manual:ManageJobs.php
Manual:Managing data in MediaWiki
Manual:MariaDB
Manual:MarkpatrolledAction.php
Manual:Math
Manual:Math table
Manual:Maxlag parameter
Manual:Mcc.php
Manual:Mctest.php
Manual:MediaWiki architecture
Manual:MediaWiki feature list
Manual:MediaWiki logo guidelines
Manual:MediaWiki.php
Manual:Memcached
Manual:MemcachedSessions.php
Manual:MergeMessageFileList.php
Manual:Merging histories
Manual:Message.php
Manual:MessageCache.php
Manual:Messages API
Manual:Microsoft SQL Server
Manual:MigrateActors.php
Manual:MigrateArchiveText.php
Manual:MigrateComments.php
Manual:MigrateFileRepoLayout.php
Manual:MigrateImageCommentTemp.php
Manual:MigrateLinksTable.php
Manual:MigrateUserGroup.php
Manual:MIME type detection
Manual:MimeMagic.php
Manual:Minify.php
Manual:Mobiles, tablets and responsive design
Manual:Module deps table
Manual:MoveBatch.php
Manual:MoveToExternal.php
Manual:Moving a wiki
Manual:Msg resource links table
Manual:Msg resource table
Manual:Mwdoc-filter.php
Manual:Mwdocgen.php
Manual:MWDumper
Manual:MWNamespace.php
Manual:MWTerm.php
Manual:MySQL
Manual:MySQL/Start
Manual:MysqlUpdater.php
Manual:Namespace
Manual:Namespace constants
Manual:NamespaceDupes.php
Manual:NameTableStore.php
Manual:Newlines and spaces
Manual:NextJobDB.php
Manual:Nofollow
Manual:Nowraplinks
Manual:NukeNS.php
Manual:NukePage.php
Manual:Null revision
Manual:Objectcache table
Manual:ObjectFileCache.php
Manual:Old table
Manual:Oldimage table
Manual:Opensearch desc.php
Manual:Oracle
Manual:Orphans.php
Manual:OrphanStats.php
Manual:OS specific help
Manual:OutputPage.php
Manual:Page change notification
Manual:Page content models
Manual:Page customizations
Manual:Page deletion
Manual:Page moving
Manual:Page naming
Manual:Page props table
Manual:Page restrictions table
Manual:Page table
Manual:Page title
Manual:Page undeletion
Manual:PageExists.php
Manual:Pagelinks table
Manual:PAGENAMEE encoding
Manual:Pager.php
Manual:Parameters to index.php
Manual:Parameters to Special:Export
Manual:Parameters to Special:Log
Manual:Parameters to Special:Upload
Manual:Parameters to Special:UserLogin
Manual:Parameters to Special:UserLogin/signup
Manual:Parse.php
Manual:Parser
Manual:Parser cache
Manual:Parser functions
Manual:Parser tests
Manual:Parser.php
Manual:ParserOptions.php
Manual:ParserTest.inc
Manual:ParserTestsParserHook.php
Manual:PatchSql.php
Manual:PathRouter.php
Manual:Patrolling
Manual:PatrolLog.php
Manual:Performance tuning
Manual:Personal URLs
Manual:PHP unit testing
Manual:PHP unit testing/Appendix
Manual:PHP unit testing/navigation
Manual:PHP unit testing/Oracle
Manual:PHP unit testing/Writing unit tests
Manual:Php.ini
Manual:PhpMyAdmin
Manual:Plainlinks
Manual:PopulateArchiveRevId.php
Manual:PopulateBacklinkNamespace.php
Manual:PopulateBloomCache.php
Manual:PopulateCategory.php
Manual:PopulateChangeTagDef.php
Manual:PopulateContentModel.php
Manual:PopulateContentTables.php
Manual:PopulateExternallinksIndex60.php
Manual:PopulateFilearchiveSha1.php
Manual:PopulateImageSha1.php
Manual:PopulateInterwiki.php
Manual:PopulateIpChanges.php
Manual:PopulateLogSearch.php
Manual:PopulateLogUsertext.php
Manual:PopulateParentId.php
Manual:PopulatePPSortKey.php
Manual:PopulateRecentChangesSource.php
Manual:PopulateRevisionLength.php
Manual:PopulateRevisionSha1.php
Manual:PostgreSQL
Manual:Pre-commit checklist
Manual:Preferences.php
Manual:PreprocessDump.php
Manual:Preprocessor DOM.php
Manual:Preprocessor.php
Manual:PreprocessorFuzzTest.php
Manual:Preventing access
Manual:Primary key storage in other fields
Manual:Profileinfo.php
Manual:Profiling
Manual:Profiling table
Manual:Protect.php
Manual:ProtectAction.php
Manual:Protected titles table
Manual:Protection
Manual:PruneFileCache.php
Manual:PruneUnusedLinkTargetRows.php
Manual:Purge
Manual:PurgeAction.php
Manual:PurgeChangedFiles.php
Manual:PurgeChangedPages.php
Manual:PurgeExpiredBlocks.php
Manual:PurgeExpiredUserrights.php
Manual:PurgeExpiredWatchlistItems.php
Manual:PurgeList.php
Manual:PurgeMessageBlobStore.php
Manual:PurgeModuleDeps.php
Manual:PurgeOldText.inc
Manual:PurgeOldText.php
Manual:PurgePage.php
Manual:PurgeParserCache.php
Manual:Pywikibot
Manual:Pywikibot/add text.py
Manual:Pywikibot/archivebot.py
Manual:Pywikibot/archivebot.py/setup
Manual:Pywikibot/BotPasswords
Manual:Pywikibot/casechecker.py
Manual:Pywikibot/catall.py
Manual:Pywikibot/category redirect.py
Manual:Pywikibot/category.py
Manual:Pywikibot/claimit.py
Manual:Pywikibot/commons link.py
Manual:Pywikibot/commonscat.py
Manual:Pywikibot/Communication
Manual:Pywikibot/compat-to-core conversion
Manual:Pywikibot/Compat/articlenos.py
Manual:Pywikibot/Compat/Basic use
Manual:Pywikibot/Compat/delinker.py
Manual:Pywikibot/Compat/deprecation
Manual:Pywikibot/Compat/Installation
Manual:Pywikibot/Compat/maintainer.py
Manual:Pywikibot/Compat/maintcont.py
Manual:Pywikibot/Compat/speedy delete.py
Manual:Pywikibot/Compat/warnfile.py
Manual:Pywikibot/Compat/Wikidata
Manual:Pywikibot/Compat/wikilogbot.py
Manual:Pywikibot/Compatibility
Manual:Pywikibot/Compatibility Graph
Manual:Pywikibot/Compatibility Table
Manual:Pywikibot/Cookbook
Manual:Pywikibot/Cookbook/Introduction
Manual:Pywikibot/coordinate import.py
Manual:Pywikibot/create categories.py
Manual:Pywikibot/Create your own script
Manual:Pywikibot/Development
Manual:Pywikibot/disambredir.py
Manual:Pywikibot/djvutext.py
Manual:Pywikibot/editarticle.py
Manual:Pywikibot/fixing redirects.py
Manual:Pywikibot/flickrripper.py
Manual:Pywikibot/freebasemappingupload.py
Manual:Pywikibot/generate user files.py
Manual:Pywikibot/Gerrit
Manual:Pywikibot/Global Options
Manual:Pywikibot/harvest template.py
Manual:Pywikibot/i18n
Manual:Pywikibot/illustrate wikidata.py
Manual:Pywikibot/imageuncat.py
Manual:Pywikibot/Installation
Manual:Pywikibot/Installation/SVN
Manual:Pywikibot/listpages.py
Manual:Pywikibot/login.py
Manual:Pywikibot/movepages.py
Manual:Pywikibot/MySQL
Manual:Pywikibot/newitem.py
Manual:Pywikibot/noreferences.py
Manual:Pywikibot/Overview
Manual:Pywikibot/Page Generators
Manual:Pywikibot/pagefromfile.py
Manual:Pywikibot/pagegenerators.py
Manual:Pywikibot/PAWS
Manual:Pywikibot/protect.py
Manual:Pywikibot/pwb.py
Manual:Pywikibot/replace.py
Manual:Pywikibot/revertbot.py
Manual:Pywikibot/Scripts
Manual:Pywikibot/Scripts/part
Manual:Pywikibot/Scripts/script
Manual:Pywikibot/solve disambiguation.py
Manual:Pywikibot/spamremove.py
Manual:Pywikibot/standardize interwiki.py
Manual:Pywikibot/table2wiki.py
Manual:Pywikibot/template.py
Manual:Pywikibot/templatecount.py
Manual:Pywikibot/Third-party Wiki Quick Start
Manual:Pywikibot/timeline
Manual:Pywikibot/touch.py
Manual:Pywikibot/transferbot.py
Manual:Pywikibot/transwikiimport.py
Manual:Pywikibot/unusedfiles.py
Manual:Pywikibot/user-config.py
Manual:Pywikibot/Version table
Manual:Pywikibot/version.py
Manual:Pywikibot/Wikidata
Manual:Pywikibot/Windows
Manual:Pywikibot/xmlreader.py
Manual:Querycache info table
Manual:Querycache table
Manual:Querycachetwo table
Manual:QuickTemplate.php
Manual:Random page
Manual:RawAction.php
Manual:RawPage.php
Manual:RCFeed
Manual:ReassignEdits.php
Manual:Rebuildall.php
Manual:RebuildFileCache.php
Manual:RebuildImages.php
Manual:RebuildLocalisationCache.php
Manual:Rebuildmessages.php
Manual:Rebuildrecentchanges.php
Manual:Rebuildtextindex.php
Manual:Recent changes
Manual:RecentChange.php
Manual:Recentchanges table
Manual:RecompressTracked.php
Manual:RecountCategories.php
Manual:Recursive conversion of wikitext
Manual:Redirect table
Manual:Redirect to the user's user page
Manual:Redirect.php
Manual:RefreshExternallinksIndex.php
Manual:RefreshFileHeaders.php
Manual:RefreshImageMetadata.php
Manual:RefreshLinks.php
Manual:RefreshLinksJob.php
Manual:RemoveInvalidEmails.php
Manual:RemoveUnusedAccounts.php
Manual:Removing tabs
Manual:RenameDbPrefix.php
Manual:RenameRestrictions.php
Manual:Renameuser
Manual:RenameWiki.php
Manual:RenderAction.php
Manual:RenderDump.php
Manual:RequestContext.php
Manual:ResetAuthenticationThrottle.php
Manual:ResetPageRandom.php
Manual:Resetting passwords
Manual:ResetUserEmail.php
Manual:ResetUserTokens.php
Manual:ResolveStubs.php
Manual:ResourceFileCache.php
Manual:ResourceLoaderContext.php
Manual:ResourceLoaderSkinModule
Manual:Resources.php
Manual:Rest.php
Manual:Restoring a wiki from backup
Manual:Restoring wiki code from cached HTML
Manual:RevertAction.php
Manual:Reverts
Manual:Revision actor temp table
Manual:Revision comment temp table
Manual:Revision table
Manual:Revision.php
Manual:Revision.php/Migration
Manual:RevisionDelete
Manual:RevisiondeleteAction.php
Manual:Robot policy
Manual:Robots.txt
Manual:Rollback
Manual:RollbackAction.php
Manual:RollbackEdits.php
Manual:Rounding numbers
Manual:Run.php
Manual:RunBatchedQuery.php
Manual:RunJobs.php
Manual:Running MediaWiki on Debian or Ubuntu
Manual:Running MediaWiki on Fedora
Manual:Running MediaWiki on Windows
Manual:Running MediaWiki on Windows Subsystem for Linux
Manual:RunScript.php
Manual:Safemode
Manual:SameSite cookies
Manual:Schema changes
Manual:Search engine optimization
Manual:SearchEngine.php
Manual:Searchindex table
Manual:Section editing
Manual:Securing database passwords
Manual:Security
Manual:SendBulkEmails.php
Manual:Serialization
Manual:SessionManager and AuthManager
Manual:Setting user groups in MediaWiki
Manual:Setup.php
Manual:Shared database
Manual:Shell.php
Manual:Short URL
Manual:Short URL/Apache
Manual:Short URL/IIS8.5
Manual:Short URL/LocalSettings.php
Manual:Short URL/Nginx
Manual:Short URL/Page title - nginx, Root Access, PHP as a CGI module
Manual:Short URL/Page title -- Windows & Apache without 403 on Special Pages
Manual:ShowCacheStats.php
Manual:ShowJobs.php
Manual:ShowSiteStats.php
Manual:Site identifiers table
Manual:Site stats table
Manual:Sitemap
Manual:Sites table
Manual:SiteStats.php
Manual:SKcreateandPromote.php
Manual:Skin configuration
Manual:Skin.php
Manual:SkinMustache.php
Manual:Skins
Manual:Slot roles table
Manual:Slots table
Manual:Small padlock icon
Manual:Special pages
Manual:SpecialMergeHistory.php
Manual:SpecialPage.php
Manual:SpecialPrefixindex.php
Manual:SpecialRecentChanges.php
Manual:SpecialWhatLinksHere.php
Manual:SQL patch file
Manual:Sql.php
Manual:SQLite
Manual:Sqlite.inc
Manual:Sqlite.php
Manual:SQLite/Back-up
Manual:SqliteMaintenance.php
Manual:SquidUpdate.php
Manual:StatOutputs.php
Manual:Status.php
Manual:StorageTypeStats.php
Manual:Structured logging
Manual:Suitability of tables for sharing
Manual:SWViewer
Manual:SyncFileBackend.php
Manual:System administration
Manual:Table of contents
Manual:Tables.sql
Manual:Tag extensions
Manual:Tag summary table
Manual:Tagline (Site Subtitle)
Manual:Tags
Manual:Templatelinks table
Manual:TestCompression.php
Manual:Text table
Manual:Thumb handler.php
Manual:Thumb.php
Manual:TidyUpBug37714.php
Manual:Timestamp
Manual:Timezone
Manual:Title.php
Manual:TitleValue.php
Manual:Tools
Manual:Trackback.php
Manual:Trackbacks table
Manual:TrackBlobs.php
Manual:Transcache table
Manual:Translating extensions
Manual:Transstat.php
Manual:Undelete.php
Manual:UndeletePage.php
Manual:Uninstallation
Manual:Unit testing
Manual:Update.php
Manual:UpdateArticleCount.php
Manual:UpdateCollation.php
Manual:UpdateCredits.php
Manual:UpdateDoubleWidthSearch.php
Manual:UpdateExtensionJsonSchema.php
Manual:Updatelog table
Manual:UpdateRestrictions.php
Manual:UpdateSearchIndex.php
Manual:UpdateSpecialPages.php
Manual:UpgradeLogging.php
Manual:Upgrading
Manual:Upgrading PostgreSQL
Manual:UploadBase.php
Manual:UploadFromChunks.php
Manual:UploadFromFile.php
Manual:UploadFromUrlJob.php
Manual:Uploading
Manual:Uploadstash table
Manual:UppercaseTitlesForUnicodeTransition.php
Manual:Urlencoding
Manual:User autocreate serial table
Manual:User creation
Manual:User former groups table
Manual:User group CSS and JavaScript
Manual:User groups table
Manual:User newtalk table
Manual:User preferences
Manual:User properties table
Manual:User rights
Manual:User rights (older versions)
Manual:User rights table
Manual:User signatures
Manual:User table
Manual:User.php
Manual:UserDupes.inc
Manual:UserFactory.php
Manual:UserMailer.php
Manual:UserOptions.inc
Manual:UserOptions.php
Manual:Using custom namespaces
Manual:Valid tag table
Manual:Validate table
Manual:ValidateRegistrationFile.php
Manual:Variable
Manual:Varnish caching
Manual:Version.php
Manual:ViewAction.php
Manual:WaitForSlave.php
Manual:WANObjectCache.php
Manual:WatchAction.php
Manual:WatchedItem.php
Manual:WatchedItemStore.php
Manual:Watchlist
Manual:Watchlist expiry table
Manual:Watchlist table
Manual:WebRequest.php
Manual:WebStart.php
Manual:WfTimestamp
Manual:Wg variable
Manual:What is MediaWiki?
Manual:White screen of death
Manual:Wiki family
Manual:Wiki ID
Manual:Wiki on a stick
Manual:WikiDiff3.php
Manual:WikiMap.php
Manual:WikiPage.php
Manual:WikitextContent.php
Manual:WrapOldPasswords.php
Manual:Writing maintenance scripts
Manual:Writing testable PHP code
Manual:XML Import file manipulation in CSharp
Manual:Xml.php
Manual:XmlSelect.php
MathJax
MD5
Media type
MediaWiki 1.17
MediaWiki 1.17/Wikimedia deployment
MediaWiki 1.18
MediaWiki 1.19
MediaWiki 1.19/Deployment announcement
MediaWiki 1.20
MediaWiki 1.21
MediaWiki 1.21/wmf10
MediaWiki 1.21/wmf11
MediaWiki 1.21/wmf12
MediaWiki 1.21/wmf5
MediaWiki 1.21/wmf6
MediaWiki 1.21/wmf7
MediaWiki 1.21/wmf8
MediaWiki 1.21/wmf9
MediaWiki 1.22
MediaWiki 1.22/wmf1
MediaWiki 1.22/wmf10
MediaWiki 1.22/wmf11
MediaWiki 1.22/wmf12
MediaWiki 1.22/wmf13
MediaWiki 1.22/wmf14
MediaWiki 1.22/wmf2
MediaWiki 1.22/wmf3
MediaWiki 1.22/wmf4
MediaWiki 1.22/wmf5
MediaWiki 1.22/wmf6
MediaWiki 1.22/wmf7
MediaWiki 1.22/wmf8
MediaWiki 1.22/wmf9
MediaWiki 1.23
MediaWiki 1.24
MediaWiki 1.25
MediaWiki 1.26
MediaWiki 1.27
MediaWiki 1.28
MediaWiki 1.29
MediaWiki 1.30
MediaWiki 1.31
MediaWiki 1.32
MediaWiki 1.32/interface-admin
MediaWiki 1.33
MediaWiki 1.34
MediaWiki 1.35
MediaWiki 1.36
MediaWiki 1.37
MediaWiki 1.38
MediaWiki 1.39
MediaWiki 2.0
MediaWiki administration
MediaWiki announcements
MediaWiki API integration tests
MediaWiki database policy
MediaWiki development
MediaWiki history
MediaWiki Interfaces Team
MediaWiki Language Extension Bundle
MediaWiki Language Extension Bundle/releases
MediaWiki on Discord
MediaWiki on IRC
MediaWiki Packagist
MediaWiki Platform Team
MediaWiki Product Insights/Reports/July 2024
MediaWiki Stakeholders' Group
MediaWiki testimonials
MediaWiki UI
MediaWiki Users and Developers Conference Fall 2024
MediaWiki Users and Developers Conference Fall 2025
MediaWiki Users and Developers Conference Spring 2024
MediaWiki Users and Developers Conference Spring 2025
MediaWiki wiki
MediaWiki-Docker
MediaWiki-Docker/Extension/CheckUser
MediaWiki-Docker/Extension/ContactPage
Mediawiki-mail-recentchanges
MediaWiki-Vagrant
MediaWiki-Vagrant/OS upgrade
MediaWiki.org documentation
Migrating from SVN to Git
MIME type
MinT
Miraheze
Mobile
Mobile design/Wikipedia navigation/Release plan
Mobile Gateway/Mobile homepage formatting
Mobile/Release history
Moderator Tools
Moderator Tools/Automoderator
Moderator Tools/Automoderator/Measurement plan
Moderator Tools/Automoderator/Multilingual testing
Moderator Tools/Automoderator/Testing
Moderator Tools/Content Moderation in Medium-Sized Wikimedia Projects
Moderator Tools/Content moderation on mobile web
Moderator Tools/Content moderation on mobile web/Diff
Moderator Tools/Newsletter
Moderator Tools/Survey:Recent Changes
Moderator Tools/Survey:Recent Changes/Preload
Module:Arguments/doc
Module:Int/doc
Module:Message box/configuration/doc
Module:Message box/doc
Module:No globals/doc
Module:String/doc
Module:Template translation/doc
Module:Tmpl/doc
Module:Transcluder/doc
Module:Version/doc
Module:Yesno/doc
Modules
Multilingual Templates and Modules
Mw.wikibase.entity.lua bug fix instructions
Namespaces
New Developers
New Developers/Communication tips
New Developers/Introduction to the Wikimedia Technical Ecosystem
New Editor Experiences
New Editor Experiences/Conceptual understanding
New Editor Experiences/October 2017 discussions
New filters for edit review/Navigation
New parser
New requirements for user signatures
New requirements for user signatures/Help
NewPP parser report
News
Notifications
Notifications/Sorting schemes
OAI-PMH
OAuth
OAuth (obsolete info)
OAuth/For Developers
OAuth/Owner-only consumers
Oauthclient-php
Object cache
ObjectFactory
OOjs
OOUI
OOUI/About the library
OOUI/Concepts
OOUI/Creating interfaces programmatically
OOUI/Elements
OOUI/Elements/Draggable
OOUI/Elements/Flagged
OOUI/Elements/Groups
OOUI/Elements/Lookup
OOUI/Layouts
OOUI/OOjs primer
OOUI/PHP examples
OOUI/Themes
OOUI/Toolbars
OOUI/Using OOUI in MediaWiki
OOUI/Widgets
OOUI/Widgets/Icons, Indicators, and Labels
OOUI/Windows
ORES
ORES review tool
ORES/Articletopic
ORES/BWDS review
ORES/Get support
ORES/Support table
Outreach programs
Outreachy
Page information
Page Previews
Parser extension tags
Parser function extensions
Parser functions
Parsers
Parsing/Replacing Tidy/FAQ
Parsoid
Parsoid/Developer Setup
Parsoid/Parser Unification/Cite CSS
Parsoid/Parser Unification/Known Issues
Parsoid/Parser Unification/Media structure/FAQ
Parsoid/PHP
Patroller
Permissions
Phabricator
Phabricator/Bots
Phabricator/Code
Phabricator/FAQ
Phabricator/Help
Phabricator/Maintenance
Phabricator/Migration Timeline
Phabricator/Permissions
PhotoCommons
PHP
PHP configuration
PHP libraries and services
Php-session-serializer
Pipe trick
Pre-save transforms
Principles
Product development
Product Principles
Professional development and consulting
Programming languages
Project:About
Project:Account creators
Project:Administrators
Project:Autoconfirmed users
Project:Autopatrolled users
Project:Babel
Project:Bot requests
Project:Bots
Project:Bureaucrats
Project:Copyrights
Project:Deletion
Project:Help
Project:Importers
Project:Interface administrators
Project:IP block exemption
Project:Language policy
Project:Manual
Project:Mastodon
Project:MediaWiki is not Wikipedia
Project:Namespaces
Project:PD help
Project:PD help/Copying
Project:PD help/export
Project:Policy
Project:Protected page
Project:Pywikibot
Project:Requests for permissions/Header
Project:Support desk/Header
Project:Tasks
Project:Transwiki importers
Project:Uploaders
Project:Users
Project:Village Pump/Header
Project:WikiFarm
Proton
Pseudo-namespace
Publishing from MediaWiki
Pywikibot
Quickbar
Random page
Readers/2024 Reader and Donor Experiences
Readers/Structured Content
Reading/Mobile Friendly Content
Reading/Multimedia/Media Viewer
Reading/Multimedia/Media Viewer/Survey
Reading/Strategy/Kickoff
Reading/Web/Accessibility for reading
Reading/Web/Accessibility for reading/Community prototype testing
Reading/Web/Accessibility for reading/Repository
Reading/Web/Accessibility for reading/Repository/Community prototype testing/Analysis
Reading/Web/Accessibility for reading/Repository/Readability research report
Reading/Web/Accessibility for reading/Updates
Reading/Web/Accessibility for reading/Updates/2023-10
Reading/Web/Accessibility for reading/Updates/2023-11
Reading/Web/Accessibility for reading/Updates/2023-12
Reading/Web/Accessibility for reading/Updates/2024-04
Reading/Web/Accessibility for reading/Updates/2024-06 deployments
Reading/Web/Accessibility for reading/Updates/2024-07 deployments
Reading/Web/Advanced mobile contributions
Reading/Web/Advanced mobile contributions/Navigation prototype feedback
Reading/Web/Coding conventions
Reading/Web/Content Discovery Experiments
Reading/Web/Content Discovery Experiments/Updates
Reading/Web/Desktop Improvements
Reading/Web/Desktop Improvements/Features
Reading/Web/Desktop Improvements/Features/Collapsible sidebar
Reading/Web/Desktop Improvements/Features/Header
Reading/Web/Desktop Improvements/Features/Language switching
Reading/Web/Desktop Improvements/Features/Limiting content width
Reading/Web/Desktop Improvements/Features/Loading Vector 2010 scripts
Reading/Web/Desktop Improvements/Features/Page tools
Reading/Web/Desktop Improvements/Features/Search
Reading/Web/Desktop Improvements/Features/Sticky Header
Reading/Web/Desktop Improvements/Features/Table of contents
Reading/Web/Desktop Improvements/Features/User menu
Reading/Web/Desktop Improvements/Fifth prototype testing
Reading/Web/Desktop Improvements/Fourth prototype testing
Reading/Web/Desktop Improvements/Frequently asked questions
Reading/Web/Desktop Improvements/Outreach
Reading/Web/Desktop Improvements/Outreach/Prototype testing
Reading/Web/Desktop Improvements/Prototype testing
Reading/Web/Desktop Improvements/Quicksurvey-20-01
Reading/Web/Desktop Improvements/Quicksurvey-20-01-privacy
Reading/Web/Desktop Improvements/Repository
Reading/Web/Desktop Improvements/Repository/A History of Wiki Skins
Reading/Web/Desktop Improvements/Repository/Accessibility testing
Reading/Web/Desktop Improvements/Repository/Content Separation User Testing
Reading/Web/Desktop Improvements/Repository/First Prototype Feedback Report
Reading/Web/Desktop Improvements/Repository/Hureo User Research Report
Reading/Web/Desktop Improvements/Repository/Language Switching User Tests
Reading/Web/Desktop Improvements/Repository/Research and design: Phase 1
Reading/Web/Desktop Improvements/Repository/Research and design: Phase 2
Reading/Web/Desktop Improvements/Repository/Sticky Header and Table of Contents User Testing
Reading/Web/Desktop Improvements/Repository/Wikimania Stockholm research report
Reading/Web/Desktop Improvements/Second prototype testing
Reading/Web/Desktop Improvements/Third prototype testing
Reading/Web/Desktop Improvements/Updates
Reading/Web/Desktop Improvements/Updates/2021-08 for the largest wikis
Reading/Web/Desktop Improvements/Updates/2021-08 user menu
Reading/Web/Desktop Improvements/Updates/2022-01 for the largest wikis
Reading/Web/Desktop Improvements/Updates/2022-04 for the largest wikis
Reading/Web/Desktop Improvements/Updates/2022-07 for the largest wikis
Reading/Web/Desktop Improvements/Updates/2022-08 for pilot wikis
Reading/Web/Desktop Improvements/Updates/2022-09 for the smallest wikis
Reading/Web/Desktop Improvements/Updates/2022-11 for the mid-size wikis
Reading/Web/Desktop Improvements/Updates/2023-05 Zebra9 A/B test
Reading/Web/Desktop Improvements/Updates/2023-10 for sister projects
Reading/Web/Desktop Improvements/Updates/2024-03 for Wikisource
Reading/Web/Desktop Improvements/Updates/Offer to potential pilots
Reading/Web/Desktop Improvements/Updates/Oldest
Reading/Web/Desktop Improvements/Updates/Talk to Web
Reading/Web/Desktop Improvements/Updates/Talk to Web/12-08-2021
Reading/Web/Desktop Improvements/Updates/Talk to Web/12-10-2021
Reading/Web/Desktop Improvements/Updates/Talk to Web/13-06-2022
Reading/Web/Desktop Improvements/Updates/Talk to Web/17-05-2022
Reading/Web/Desktop Improvements/Updates/Talk to Web/28-06-2022
Reading/Web/Desktop Improvements/Updates/Talk to Web/29-03-2022
Reading/Web/Desktop Improvements/Updates/Talk to Web/29-04-2022
Reading/Web/Desktop Improvements/Updates/Talk to Web/Wikimania 2021
Reading/Web/PDF Functionality
Reading/Web/Preference Persistence For Anonymous Users
Reading/Web/Projects/Improve site branding
Reading/Web/Projects/Lead Paragraph Move
Reading/Web/Projects/Mobile Page Issues
Reading/Web/Projects/Mobile Page Issues/Research Results
Reading/Web/Projects/Performance/Lazy loading images
Reading/web/Projects/Wikidata Descriptions
Recent changes
RecentChanges.php
Recommendations for mobile friendly articles on Wikimedia wikis
Recommendations for night mode compatibility on Wikimedia wikis
Reference Tooltips
Relative advantages of bots and server-side tools
Release Manager (MediaWiki)
Release Manager (Wikimedia)
Release notes
Release notes/1.20
Release notes/1.21
Release notes/1.22
Release notes/1.23
Release notes/1.24
Release notes/1.25
Release notes/1.26
Release notes/1.27
Release notes/1.28
Release notes/pre-1.1.0
RemexHtml
Reporting security bugs
Requests
ResourceLoader
ResourceLoader/Migration guide (users)
ResourceLoader/See also
RESTBase
RESTBase/Installation
Revision
RevisionDelete
Roadmap
RunningStat
Schools of thought concerning integration of extensions into the core
Scriptpath
Security
Security checklist for developers
Security for developers
Security issues with authorization extensions
Security Notes on Remote Embedding
Selenium
SELinux
Service-template-node
Shellbox
ShoutWiki
Sidebar
Simple mobile skin auto change
Sites using MediaWiki/Wikimedia
Skin pages
Skin status
Skin:2018
Skin:Aether
Skin:Alexandria
Skin:Apex
Skin:AtlasMuseum
Skin:BlueSpiceDiscovery
Skin:Bouquet
Skin:Chameleon
Skin:Citizen
Skin:Cologne Blue
Skin:Cosmos
Skin:Cosmos/How to contribute
Skin:DarkVector
Skin:Dgraph
Skin:Dusk
Skin:DuskToDawn
Skin:Example
Skin:Femiwiki
Skin:Foreground
Skin:Gamepress
Skin:GuMaxDD
Skin:Lakeus
Skin:Liberty
Skin:MediaWikiBootstrap
Skin:Medik
Skin:Minerva Neue
Skin:Mirage
Skin:Modern
Skin:Monaco
Skin:MonoBook
Skin:Nostalgia
Skin:Refreshed
Skin:Splash
Skin:Strapping
Skin:Tempo
Skin:Timeless
Skin:Tweeki
Skin:Vector
Skin:Vector/2022
Snippets
Snippets/Force preview
Social media/Statistics
Software bundles
Software development concepts
Special Interest Groups
Special pages
SQL injection
Squid
SSH keys
Stable interface policy/Frontend
Structured Data Across Wikimedia
Structured Data Across Wikimedia/Image Suggestions
Structured Data Across Wikimedia/Image Suggestions/Category Based Notifications
Structured Data Across Wikimedia/Image Suggestions/Feb 2023 survey
Structured Data Across Wikimedia/Newsletter/10
Structured Data Across Wikimedia/Newsletter/11
Structured Data Across Wikimedia/Newsletter/12
Structured Data Across Wikimedia/Newsletter/4
Structured Data Across Wikimedia/Newsletter/5
Structured Data Across Wikimedia/Newsletter/6
Structured Data Across Wikimedia/Newsletter/7
Structured Data Across Wikimedia/Newsletter/8
Structured Data Across Wikimedia/Newsletter/9
Structured Data Across Wikimedia/Potential use cases
Structured Data Across Wikimedia/Search Improvements
Structured Data Across Wikimedia/Section Topics
Structured Data Across Wikimedia/Section-level Image Suggestions
Structured Data Across Wikimedia/SLIS announcement
Structured Discussions
Structured Discussions/Deprecation
Structured Discussions/FAQ
Structured Discussions/Project information
Style guide
Support policy for PHP
SVG
Synchronizer
Sysadmin hub
Taking over output in your special page
Talk pages consultation
Talk pages consultation 2019
Talk pages consultation 2019/Communication/Announce/Phase 1
Talk pages consultation 2019/Communication/Reaching at newcomers
Talk pages consultation 2019/Participant group sign-up
Talk pages consultation 2019/Phase 1 report
Talk pages consultation 2019/Phase 1 report/Survey
Talk pages consultation 2019/Phase 2 report
Talk pages project
Talk pages project/Deployment Status
Talk pages project/Feature summary
Talk pages project/Glossary
Talk pages project/Mobile
Talk pages project/Notifications
Talk pages project/Replying
Talk pages project/Replying/Prototype testing
Talk pages project/Usability
Talk pages project/Usability/Analysis
Talk pages project/Usability/Prototype
Talk pages project/Usability/Prototype/Topic Containers
Technical Advice IRC Meeting/Invitation-Template
Technical debt
Technical decision making
Technical decision making/Community representation
Technical decision making/Listening Sessions
Template:$IP
Template:2019 Coolest tool award
Template:A/B testing
Template:Abusefilter-blocked-display
Template:Adapt translation
Template:Add to watchlist
Template:Admin tip
Template:Anontalkpagetext
Template:Anontools
Template:API
Template:API comparison
Template:Api help
Template:API-head
Template:ApiEx
Template:ApiParam
Template:Approved
Template:Architectural module
Template:Architectural modules
Template:Archival requested
Template:Archive
Template:Archive box
Template:Archive for converted LQT page
Template:Archived extension
Template:Archives
Template:As of
Template:Autocat
Template:Automoderator navigation
Template:Auxiliary template common notice
Template:AWMDHeader
Template:Bad shorturl page
Template:BitbucketDownload
Template:Blazegraph
Template:Blocked
Template:Blog Post
Template:BlueSpiceExtension
Template:BlueSpiceExtensionFooter
Template:BOMWarning
Template:Bot
Template:Bothelp
Template:Brainstorming
Template:Branching
Template:Brokenredirectstext
Template:Bugfix
Template:Bugzilla
Template:Bugzilla link
Template:Bulk Uploading
Template:Bundled
Template:Button
Template:By Miraheze
Template:Candidate
Template:Cargo navigation
Template:Caution
Template:Cc-by-3.0
Template:Cc-by-4.0
Template:Cc-by-sa-3.0
Template:Cc-by-sa-4.0
Template:CentralNotice/DbTable
Template:Changelog
Template:Changelog link
Template:Clarify
Template:Cleanup
Template:Clock
Template:Closed
Template:Closed start
Template:Code of Conduct
Template:Collapse top
Template:Commons category
Template:Communities Conversations
Template:Community Configuration/Navbar
Template:Community guideline
Template:Community news
Template:Community policy
Template:Compatibility browser
Template:Component
Template:ContentHandler
Template:ContentTranslation Portal
Template:Copied
Template:Core Platform Team Initiative
Template:Core Platform Team Initiative Description
Template:Core Platform Team Initiative Documentation Links
Template:Core Platform Team Initiative Infobox
Template:Core Platform Team Initiative Infobox Row
Template:Core Platform Team Initiative Time and Resource Estimates
Template:CS cat header
Template:Dangerous extension
Template:Database layout
Template:Databases
Template:DBwarning
Template:Dead link
Template:DefaultExplanation
Template:Delete
Template:Deleted extension security warning
Template:Deleted userpage
Template:Deprecated
Template:Deprecated OOUI feature
Template:Deprecated-inline
Template:Deprecation policies
Template:Description missing
Template:Desktop Improvements navbox
Template:Developer Portal navigation
Template:Development guideline
Template:Development guidelines navigation
Template:Development policy
Template:Disambiguation
Template:Distinguish
Template:Documentation
Template:Documentation needed
Template:Documentation subpage
Template:Done
Template:Done Community
Template:Done WMDE
Template:Done WMInt
Template:DoNotTranslate
Template:DownloadBroken
Template:DownloadGitHubSnapshot
Template:DownloadGitSnapshot
Template:DownloadMediaWiki
Template:Draft
Template:Draft-section
Template:Dropped Oracle MSSQL
Template:Dubious
Template:DuplicateTemplate
Template:Edit check/Navbar
Template:Edit Protected
Template:Editinginterface
Template:Editnotices/Namespace/Module
Template:Editnotices/Namespace/Template
Template:Editnotices/Page/MediaWiki
Template:Editnotices/Page/Template:Main page
Template:Editnotices/Page/VisualEditor:Test
Template:Empty section
Template:EmptyCatGood
Template:EndTalkFromMeta
Template:Engine
Template:ERI Navigation
Template:Error:must be substituted
Template:Escape template list
Template:Essay
Template:Event header
Template:Event/table
Template:Excerpt
Template:Execution alert
Template:Expand
Template:Extension
Template:Extension by patch warning
Template:Extension code in wiki
Template:Extension default namespace/table
Template:Extension exception
Template:Extension file
Template:Extension status warning
Template:Extension-Narayam
Template:Extension-Translate
Template:Extension/CreateExtensionInputBox
Template:Extension/License
Template:ExtensionHook
Template:ExtensionHooks category header
Template:ExtensionInstall
Template:Extensions
Template:ExtensionTypes
Template:External help
Template:FAQ header
Template:Feedback
Template:Feedback header
Template:Files moved from Meta
Template:Fixed
Template:Fixme
Template:Fixtext
Template:Flow-enabled
Template:FOLI/Navbar
Template:For
Template:Force option
Template:Former staff
Template:Forum notes
Template:Free screenshot
Template:FromWikiTools
Template:Further
Template:Future
Template:GapFinder navigation
Template:Gerrit reports header
Template:Gerrit-reviewer
Template:GerritLog
Template:Get involved footer
Template:Git and Gerrit
Template:Git/pywikibot
Template:Git/pywikibot/generate
Template:GithubDownload
Template:GithubRepo
Template:GitlabDownload
Template:Global templates nav
Template:GlobalClassVar
Template:GoodFirstBugProject
Template:Google Maps Extension Talk Navigation
Template:Google Maps Extension Top Navigation
Template:GPL
Template:Growth/Active wikis
Template:Growth/Contact
Template:Growth/Navbar
Template:Growth/navbox
Template:GSoC
Template:GSoC project
Template:GWToolset abstract
Template:GWToolset See also
Template:Help
Template:Help box
Template:Help talk
Template:Hidden archive top
Template:High-risk
Template:Historical
Template:Historical image
Template:Homepage redesign navbox
Template:HookUsage
Template:Hubs
Template:Huggle/DocHeader
Template:Huggle/Header
Template:Huggle/Icons
Template:Huggle/Manual/DocFooter
Template:I18n navigation
Template:IB Community
Template:IB WMDE
Template:IB WMInt
Template:Implemented
Template:In progress
Template:Incompatible
Template:Installation Guides
Template:InstallationNav
Template:Interface message
Template:Interwiki tip
Template:Intricate template
Template:Introduced-inline
Template:Inuka/Wikipedia Preview/Header
Template:IRC
Template:JavaScript
Template:Language Portal Quicklinks
Template:LanguageTool Navigation
Template:LastChecked
Template:LC zh
Template:LDAP Stack Member
Template:LDAP Stack Version Matrix
Template:Licenses
Template:Linked image
Template:List subpages
Template:Listen
Template:Living style guide
Template:Localized link
Template:Localized link/messagedoc
Template:Log events
Template:Machine Assisted Article Descriptions/Navbar
Template:Magnify icon
Template:Main
Template:Main page
Template:Main page talk notes
Template:MaintainerLinksComponent
Template:MaintainerLinksExtension
Template:Maintenance scripts
Template:Manual Project header
Template:Manuals
Template:Markup
Template:Markup/row
Template:Mbox templates
Template:MediaWiki Introduction
Template:MediaWiki News
Template:MediaWiki notification systems
Template:MediaWiki PHP 7.4.0 to 7.4.2
Template:MediaWiki PHP 8
Template:MediaWiki Release navigation
Template:MediaWiki Sites
Template:MediaWiki.org policy
Template:MediaWikiHook
Template:Merge
Template:Misclassification report
Template:MIT
Template:Module rating
Template:Module-rating categories
Template:Move
Template:MovedFromToolserver
Template:MovedToWikitech
Template:MoveToCommons
Template:Msg
Template:Msgtxt
Template:Multimedia scrum line
Template:MVL book page
Template:MW file
Template:MW quick download
Template:MW release status
Template:MW src
Template:MW version
Template:MW version/layout
Template:MW-screenshot
Template:MWReleases
Template:MWStake tag
Template:N/a
Template:N/A
Template:Navbar
Template:Negative
Template:Neutral
Template:Newarticletext
Template:No
Template:Not a sandbox
Template:Not a support forum
Template:Not an encyclopedia
Template:Not done
Template:Not needed
Template:Note
Template:Notification schema
Template:Notifications Navigation
Template:Now Commons
Template:Nutshell
Template:Obsolete
Template:ObsoleteExtension
Template:Offtopic
Template:Old documentation
Template:Old support desk
Template:Oldid
Template:Oldupgradenotes
Template:On hold
Template:OnWikimedia
Template:OOjs sidebar
Template:OOUI
Template:Open access
Template:Open Community
Template:Open unknown
Template:Open WMDE
Template:Open WMInt
Template:Oppose
Template:Optional
Template:OPW
Template:Or
Template:ORES navigation
Template:Organizer
Template:Outdated2
Template:Page Forms navigation
Template:Page in progress
Template:Page security extension disclaimer
Template:Page specific user rights extensions
Template:Parser functions nav
Template:Parsoid compatibility warning
Template:Partial
Template:Partially done
Template:PD
Template:PD help
Template:PD Help Page
Template:PD-ineligible
Template:Phabricator
Template:PhabricatorBot
Template:PhabricatorNote
Template:PhabT
Template:Php
Template:Php-ini
Template:PHPLibraryLinks
Template:PhpTags navigation
Template:Pickle Navigation
Template:Planned
Template:Please leave this line alone and write below (this is the coloured heading)
Template:Please leave this line alone and write below (this is the coloured heading)/talk
Template:PluggableAuth Plugin
Template:Positive
Template:Professional Wiki LTS notice
Template:Progression
Template:Project management tools review
Template:Project/Navbar
Template:ProjectInfobox
Template:ProofreadPage
Template:Protectedinterface
Template:Ptag
Template:PUGinfo
Template:Purge
Template:Push extension manual
Template:Pywikibot
Template:Pywikibot command table beginning
Template:Pywikibot/Compat
Template:Pywikibot/Compatibility
Template:Quotation with original/testcases
Template:Reading Strategy
Template:Reading/Web/Accessibility for reading/Header
Template:Reading/Web/Desktop Improvements/Events ombox
Template:Reading/Web/Desktop Improvements/Features/Navigation
Template:Reading/Web/Desktop Improvements/Header
Template:Reading/Web/Desktop Improvements/Office hours announcement
Template:Reading/Web/Desktop Improvements/Prototype testings
Template:Reading/Web/Desktop Improvements/Talk page intro
Template:ReadingWebExtension
Template:Recentchangestext
Template:Rejected
Template:RELEASE-NOTES
Template:Removed
Template:Removed-inline
Template:Request top
Template:Required
Template:Required image
Template:ResearchParticipantProfileShort
Template:Resolved
Template:ResourceLoader navigation
Template:REST API
Template:Retired
Template:Rev
Template:RFC
Template:Rfur
Template:Rfur/Category header
Template:Rightslogtext
Template:Robot policy
Template:SB Extension
Template:Search archives
Template:Security
Template:Security alert
Template:Security warning 2021-12
Template:See
Template:See also
Template:See global
Template:SeeMITLicense
Template:Semi-fixed
Template:SettingSummary
Template:SettingSummarySection
Template:Shortcut
Template:Sign
Template:Since
Template:Skin
Template:Skin based on Bootstrap
Template:Skin/CreateSkinInputBox
Template:SkinInstall
Template:Snippet
Template:Snippets with JavaScript header
Template:Social tools
Template:SocialToolsSidebar
Template:Soft redirect
Template:Soft subcategories only warning
Template:SourceForgeDownload
Template:Sp-contributions-footer
Template:Sp-contributions-footer-anon
Template:Spam
Template:SPARQL
Template:SPARQL2
Template:Special page
Template:Speedy
Template:SQL injection alert
Template:Status
Template:Strong oppose
Template:Strong support
Template:Structured Discussions Navigation
Template:Subpages
Template:Substituted
Template:Subversion navigation
Template:Success
Template:SUL
Template:Support
Template:SWViewer/DocHeader
Template:SWViewer/Header
Template:SWViewer/Manual/DocFooter
Template:TableRowLanguageInfo/Header
Template:TableRowLanguageSupport/Header
Template:Tag description
Template:Tag-Potentially problematic translation
Template:Talk archive
Template:Talk header
Template:TalkFromMeta
Template:Talkpage
Template:TeamPracticesUnofficial
Template:Tech header
Template:Tech News archives
Template:Tech talk video
Template:TechComPlanningMeeting/footer
Template:TechComPlanningMeeting/header
Template:Technical decision making navigation
Template:Template shortcut
Template:Template test cases notice
Template:TemplateData header
Template:Temporary Accounts/Header
Template:Thankyou
Template:Tim Starling license
Template:Timeline MediaWiki
Template:To do
Template:Todo
Template:Tool
Template:Tool/TypeSwitch
Template:ToolDownload
Template:Top icon
Template:Tracked
Template:Translatable
Template:Translatable modules nav
Template:Translating
Template:TranslationParams
Template:Under construction
Template:Undocumented Extension Hook
Template:Undocumented MediaWiki Hook
Template:Unk
Template:Unknown copyright
Template:Unknown copyright cat
Template:Unmaintained extension
Template:Unsigned
Template:Unused file
Template:Unusedtemplatestext
Template:Update
Template:Upgrades from older versions
Template:Uploaded-files-access-restriction-info
Template:Used by
Template:Used in system
Template:UsedByXmlDatabaseDumps
Template:User admin MediaWiki.org
Template:User autopatrolled MediaWiki.org
Template:User bureaucrat MediaWiki.org
Template:User committed identity
Template:User editor MediaWiki.org
Template:User ExtensionsDev
Template:User groups
Template:User info
Template:User info mediawiki
Template:User Meta-Wiki
Template:User MW Bug Squad
Template:User MWSysAdmin
Template:User ORCID
Template:User page vandalised
Template:User sandbox
Template:User steward
Template:User SUL Box
Template:User translation admin MediaWiki.org
Template:User unified login
Template:User unified/userbox
Template:User Wikipedia
Template:User WPExtensions
Template:User WPSysAdmins
Template:Userpage
Template:Uw-delete1
Template:Vague
Template:Vandalism
Template:Verify
Template:Version
Template:VisualEditor Portal
Template:VisualEditor user guide image l10n
Template:Warning
Template:Watchlists navigation
Template:Weak oppose
Template:Weak support
Template:When
Template:Who
Template:Why
Template:Wiki-family
Template:Wiki-in-docroot
Template:Wikibase main page
Template:Wikibase statement
Template:Wikidata Bridge/Header
Template:Wikidata-link
Template:Wikimedia engineering header
Template:Wikimedia engineering navigation
Template:Wikimedia engineering project information
Template:Wikimedia extension database tables
Template:Wikimedia Hackathon 2020/Organizing team
Template:Wikimedia Research goals
Template:Wikimedia Research programs
Template:Wikimedia screenshot
Template:WikimediaDownload
Template:WikimediaDownloadSkin
Template:WikimediaGitCheckout
Template:WikiTeq extension
Template:WikiTeq LTS notice
Template:Wikitext talk page converted to Flow
Template:WMDE Engineering/Header
Template:WMF present
Template:WMF project cat nav
Template:WMF-legal banned user
Template:WMFReleasePage
Template:WMFReleaseTableFooter
Template:WMFReleaseTableHead
Template:WMFReleaseTableRow
Template:WPG
Template:XSS alert
Template:Yes
TemplateData
Templates
Testing-access-wrapper
Tests
Texvc
Texvc PHP Alternative
Third-party wikis
Thumbnail style update
Timestamp
Tool status
Tools
Transclusion
Translatable modules
Translatable modules/Current solutions
Translatable modules/Engineering considerations
Translatable modules/Principles
Translatable modules/Proposed solutions
Translatable modules/Stakeholders
Translatewiki.net
Translation suggestions: Topic-based & Community-defined lists
Translation suggestions: Topic-based & Community-defined lists/Collaborators
Translation suggestions: Topic-based & Community-defined lists/Community space
Translation suggestions: Topic-based & Community-defined lists/Community space/Conversations
Translation suggestions: Topic-based & Community-defined lists/How to use the features
Translation suggestions: Topic-based & Community-defined lists/Updates
Translation UX/Specification
Translator hub
Trust and Safety Product
Trust and Safety Product/IP Info
Trust and Safety Product/IP Info/Call for Feedback
Trust and Safety Product/IP Info/Updates
Trust and Safety Product/Temporary Accounts
Trust and Safety Product/Temporary Accounts/FAQ
Trust and Safety Product/Temporary Accounts/For developers
Trust and Safety Product/Temporary Accounts/Updates
Trust and Safety Product/Temporary Accounts/Updates/2023-09
Trust and Safety Product/Temporary Accounts/Updates/Legal
TurnKey MediaWiki
Typography refresh
UILANGCODE
UNC links
Unicode normalization considerations
UnicodeJS
Universal Language Selector
Universal Language Selector/Announcement Feb2014
Universal Language Selector/Announcement Jan2014
Universal Language Selector/Compact Language Links
Universal Language Selector/Compact Language Links/Announcement draft June 2016
Universal Language Selector/FAQ
UpdateHistory
Updating to PCRE 8.33 or Higher
Upload dialog
UploadWizard
User account types
User blocking
User hub
User:APatro (WMF)/Base Page
User:APatro (WMF)/Child Page
User:APatro (WMF)/HelloTranslate
User:APatro (WMF)/Sandbox Test
User:APatro (WMF)/Sandbox Testing
User:APatro (WMF)/T254484
User:APatro (WMF)/T308704
User:APatro (WMF)/T312293
User:APatro (WMF)/Test Page-5
User:APatro (WMF)/Test Page/SubPage
User:APatro (WMF)/Test T168591
User:APatro (WMF)/Test T168591/Hello Translate
User:APatro (WMF)/Test T256625
User:APatro (WMF)/Test T256625 2
User:APatro (WMF)/Test T263546
User:APatro (WMF)/TestVE
User:APatro (WMF)/TestWikiPage
User:APatro (WMF)/WTS Hackathon Test 2024
User:APatro (WMF)/WTS Hackathon Test 2024-2
User:APatro (WMF)/WTS Hackathon Test 2024-3
User:Calvinkulit/gallery
User:CKoerner (WMF)/Content namespaces search discussion
User:CKoerner (WMF)/Mobile PDF
User:CKoerner (WMF)/Page Previews improvements
User:CKoerner (WMF)/Reading List Discussion
User:CKoerner (WMF)/Translate test
User:CKoerner (WMF)/Wikipedia.org updated page layout invite
User:DelvecchioSimone12 5 96
User:ExE Boss/sandbox/Extension:Translate
User:Jan Dittrich (WMDE)/wikibase
User:JCrespo (WMF)/main page
User:Johan (WMF)/Tech News translation 201720
User:Johan (WMF)/Translation example
User:John Broughton/VisualEditor - help system
User:Lea Lacroix (WMDE)/Cognate announcement
User:Lea Lacroix (WMDE)/Wikidata in enhanced recent changes
User:Leszek Manicki (WMDE)/Echo
User:MacFan4000/translate test
User:Mxn/translatable
User:Nemo bis/Fréttinga
User:Nikerabbit/T275327-moved
User:Ochaochaocha3/MobileFrontend Localisation Test 1
User:OVasileva (WMF)/prototype feedback for desktop improvements
User:Patafisik (WMF)/Sandbox/1
User:Pols12/MissUpdate
User:Pols12/Sandbox
User:Quiddity (WMF)/sandboxtranslation
User:Sebastian Berlin (WMSE)/Tmp
User:Sebastian Berlin (WMSE)/Translate list in table
User:SGrabarczuk (WMF)/sandbox/1
User:SGrabarczuk (WMF)/sandbox/2
User:SGrabarczuk (WMF)/sandbox/3
User:SGrabarczuk (WMF)/sandbox/4
User:SGrabarczuk (WMF)/sandbox/5
User:SGrabarczuk (WMF)/sandbox/6
User:SGrabarczuk (WMF)/sandbox/7
User:SGrabarczuk (WMF)/sandbox/8
User:SGrabarczuk (WMF)/sandbox/9
User:SGrabarczuk (WMF)/sandbox/blog post
User:Shirayuki/test
User:SKim (WMF)/Performance Dependent User Preferences
User:Smalyshev (WMF)/Archive search
User:Smalyshev (WMF)/Archive search announce
User:SPage (WMF)/i18n
User:SRodlund (WMF)/small wiki toolkit staging
User:Trizek (WMF)/New filters for Recent Changes/Announces/translate
User:Trizek (WMF)/New filters for Recent Changes/Out of Beta/transalte
User:Trizek (WMF)/sandbox
User:Trizek (WMF)/sandbox/Structured Discussions Deprecation
User:Trizek (WMF)/Translations
User:Valhallasw/test
User:Whatamidoing (WMF)/DiscussionTools
User:WikiUser22222
User:Wladek92/save/
User:Wladek92/save/doc
User:Wladek92/test
User:Wladek92/test/sparql
User:Wladek92/traduction
User:Wladek92/traduction/doctrans
Variables
Version
Version lifecycle
Visual diffs
VisualEditor
VisualEditor Translathon
VisualEditor/Beta Features/Formulae
VisualEditor/Beta Features/General
VisualEditor/Beta Features/Language
VisualEditor/Citation tool
VisualEditor/Diffs
VisualEditor/GIFs
VisualEditor/Portal
VisualEditor/Portal/Help
VisualEditor/Portal/Keyboard shortcuts
VisualEditor/Portal/New users
VisualEditor/Portal/TemplateData
VisualEditor/Portal/Why
VisualEditor/Portal/Why/User Test Data
VisualEditor/Recipes
VisualEditor/Roadmap/Update 2016-06-23
VisualEditor/Single edit tab
VisualEditor/Special characters
VisualEditor/Survey 2015
WaitConditionLoop
Who Wrote That?
Wiki Loves Monuments mobile application/Fact Sheet
Wiki-Highlights
Wiki.gg
WikiApiary
Wikibase
Wikibase/Announcements/2021-12-14
Wikibase/API
Wikibase/Contact
Wikibase/Creating and deleting data
Wikibase/DataModel
Wikibase/DataModel/Primer
Wikibase/Developing extensions
Wikibase/Docker
Wikibase/EntityData
Wikibase/Extending
Wikibase/FAQ
Wikibase/Federation
Wikibase/Importing
Wikibase/Indexing/RDF Dump Format
Wikibase/Install
Wikibase/Installation
Wikibase/Installation/Advanced configuration
Wikibase/Introduction to modeling data
Wikibase/Maintaining
Wikibase/Quick start
Wikibase/Reference
Wikibase/Schema
Wikibase/Schema/wb items per site
Wikibase/Terms
Wikibase/User Guide
Wikibase/Using Wikibase
Wikibase/What is Wikibase
Wikibase/Which
Wikibase/Wikibase.cloud/Account
Wikibase/Wikibase.cloud/Creating a wiki
Wikibase/Wikibase.cloud/First steps
Wikibase/Wikibase.cloud/Imprints
Wikibase/Wikibase.cloud/Initial setup
Wikibase/Wikibase.cloud/Reset password
Wikibase/Wikibase.cloud/Using your wiki
Wikibase/Wikibase.cloud/Wikibase settings
Wikidata Bridge
Wikidata Bridge/Development
Wikidata Bridge/Get involved
Wikidata Bridge/How to Enable Wikidata Bridge for your Infobox
Wikidata Bridge/Research
Wikidata Bridge/Updates
Wikidata Query Service
Wikidata Query Service/Categories
Wikidata Query Service/User Manual
Wikidata Query Service/User Manual/SPARQL Federation endpoints
Wikidata Toolkit
Wikifeeds
WikiLove
WikiLove/Data
WikiLove/status
Wikimedia Apps
Wikimedia Apps/About the Wikimedia Foundation
Wikimedia Apps/Android FAQ
Wikimedia Apps/Android Suggested edits
Wikimedia Apps/Android/Multilingual Support
Wikimedia Apps/iOS FAQ
Wikimedia Apps/iOS Suggested edits
Wikimedia Apps/iOS Suggested edits project
Wikimedia Apps/iOS Suggested edits project/Alt Text Experiment
Wikimedia Apps/Office Hours
Wikimedia Apps/Reading list browser extension
Wikimedia Apps/Reading lists/Share Project
Wikimedia Apps/Team/Android
Wikimedia Apps/Team/Android/Anti Vandalism
Wikimedia Apps/Team/Android/Anti Vandalism/Saved Messages
Wikimedia Apps/Team/Android/AppEditorTasks
Wikimedia Apps/Team/Android/Archived release history
Wikimedia Apps/Team/Android/Communication
Wikimedia Apps/Team/Android/Communication/UsertestingJuly2021
Wikimedia Apps/Team/Android/Machine Assisted Article Descriptions
Wikimedia Apps/Team/Android/Machine Assisted Article Descriptions/Experiment Background
Wikimedia Apps/Team/Android/Machine Assisted Article Descriptions/Gratitude to volunteers
Wikimedia Apps/Team/Android/Machine Assisted Article Descriptions/Updates
Wikimedia Apps/Team/Android/Places
Wikimedia Apps/Team/Android/Private Donor Recognition Experiment
Wikimedia Apps/Team/Android/Rabbit Holes
Wikimedia Apps/Team/iOS
Wikimedia Apps/Team/iOS/Communication
Wikimedia Apps/Team/iOS/Fundraising Experiment in the iOS App
Wikimedia Apps/Team/iOS/Navigation Refresh
Wikimedia Apps/Team/iOS/Navigation Refresh/Updates
Wikimedia Apps/Team/iOS/Notifications
Wikimedia Apps/Team/iOS/Personalized Wikipedia Year in Review
Wikimedia Apps/Team/iOS/Personalized Wikipedia Year in Review/How your data is used
Wikimedia Apps/Team/iOS/Release history
Wikimedia Apps/Team/iOS/Watchlist
Wikimedia Apps/Team/iOS/Watchlist/Design Feedback Frequent
Wikimedia Apps/Team/iOS/Watchlist/Design Feedback Guardrail
Wikimedia Apps/Team/Wikipedia Android app store description
Wikimedia Commons
Wikimedia Commons on WordPress
Wikimedia Commons on WordPress/Student project
Wikimedia Discovery/FAQ
Wikimedia Discovery/Knowledge Engine FAQ
Wikimedia Engineering
Wikimedia Engineering/Introducing Victoria Coleman - Chief Technology Officer
Wikimedia Engineering/June 2017 changes
Wikimedia Engineering/June 2017 changes/Update on Discovery
Wikimedia Engineering/Report/2011/August
Wikimedia Engineering/Report/2012/December/summary
Wikimedia Engineering/Report/2013/April/summary
Wikimedia Engineering/Report/2013/August/summary
Wikimedia Engineering/Report/2013/December/summary
Wikimedia Engineering/Report/2013/January/summary
Wikimedia Engineering/Report/2013/July/summary
Wikimedia Engineering/Report/2013/June/summary
Wikimedia Engineering/Report/2013/March/summary
Wikimedia Engineering/Report/2013/May/summary
Wikimedia Engineering/Report/2013/November/summary
Wikimedia Engineering/Report/2013/October/summary
Wikimedia Engineering/Report/2013/September/summary
Wikimedia Engineering/Report/2014/April/summary
Wikimedia Engineering/Report/2014/February/summary
Wikimedia Engineering/Report/2014/January/summary
Wikimedia Engineering/Report/2014/July/summary
Wikimedia Engineering/Report/2014/June/summary
Wikimedia Engineering/Report/2014/March/summary
Wikimedia Engineering/Report/2014/May/summary
Wikimedia Enterprise
Wikimedia Enterprise/Breaking news
Wikimedia Hackathon
Wikimedia Hackathon 2020
Wikimedia Hackathon 2020/Header
Wikimedia Hackathon 2020/Program
Wikimedia Hackathon 2020/Register
Wikimedia Hackathon 2020/Travel
Wikimedia Hackathon 2020/Venue and Tirana
Wikimedia Hackathon 2021
Wikimedia Hackathon 2021/Header
Wikimedia Hackathon 2022
Wikimedia Hackathon 2022/Header
Wikimedia Hackathon 2022/How to
Wikimedia Hackathon 2022/How to/Newcomers
Wikimedia Hackathon 2022/Participants
Wikimedia Hackathon 2023
Wikimedia Hackathon 2023/Accommodation
Wikimedia Hackathon 2023/Header
Wikimedia Hackathon 2023/Header2
Wikimedia Hackathon 2023/Local area information
Wikimedia Hackathon 2023/Organization
Wikimedia Hackathon 2023/Participate
Wikimedia Hackathon 2023/Satellite events
Wikimedia Hackathon 2023/Travel
Wikimedia Hackathon 2023/Venue
Wikimedia Hackathon 2024
Wikimedia Hackathon 2024/Header
Wikimedia Hackathon Local Meetup Accra 2023
Wikimedia Language and Product Localization
Wikimedia Language and Product Localization/Community meetings
Wikimedia Language and Product Localization/Newsletter/2023/October
Wikimedia Language and Product Localization/Newsletter/2024/April
Wikimedia Language and Product Localization/Newsletter/2024/January
Wikimedia Language and Product Localization/Newsletter/2024/July
Wikimedia Language and Product Localization/Newsletter/2024/October
Wikimedia Maps/2021 modernization plan
Wikimedia Product
Wikimedia Product Guidance
Wikimedia Product Guidance/Community involvement
Wikimedia production content domain names
Wikimedia Release Engineering Team
Wikimedia Release Engineering Team/Trainsperiment week
Wikimedia Research
Wikimedia REST API
Wikimedia Search Platform/Serbian Search Update
Wikimedia Security Team/Two-factor Authentication for CentralAuth wikis
Wikimedia services policy
Wikimedia Site Reliability Engineering
Wikimedia Tech Safari Program
Wikimedia Tech Safari Program/Header
Wikimedia Tech Safari Program/Participate
Wikimedia Tech Safari Program/Team
Wikimedia Tech Safari Program/Terms and Conditions apply
Wikimedia Technical Operations/ICU announcement
Wikimedia technical search
Wikipedia for KaiOS
Wikipedia for KaiOS/FAQ
Wikipedia Preview
Wikipedia Preview/partners
Wikipedia.org updated page layout
Wikistories for Wikipedia
Wikistories for Wikipedia/FAQ
Wikitech Student Developers, Kumasi/Header
Wikitech Student Developers, Kumasi/Programs
Wikitext
Wikitext standard
WikiWho
WMDE Engineering
WMF membership with Unicode Consortium
Writing an extension for deployment
Writing systems
Writing systems/Syntax
XTools
XTools/Admin Score
XTools/Admin Stats
XTools/Authorship
XTools/Automated Edits
XTools/Blame
XTools/Category Edits
XTools/Edit Counter
XTools/Edit Summaries
XTools/Global Contributions
XTools/Largest Pages
XTools/Opting in to restricted statistics
XTools/Page History
XTools/PageInfo gadget
XTools/Pages Created
XTools/Simple Counter
XTools/Top Edits
Zest
¤ User requested
Language
aa - Afar
aae - Arbëresh
ab - Abkhazian
abs - Ambonese Malay
ace - Acehnese
acf - Saint Lucian Creole
acm - Iraqi Arabic
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
aln - Gheg Albanian
alt - Southern Altai
am - Amharic
ami - Amis
an - Aragonese
ang - Old English
ann - Obolo
anp - Angika
apc - Levantine Arabic
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
ban-bali - Balinese (Balinese script)
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bci - Baoulé
bcl - Central Bikol
bdr - West Coast Bajau
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bew - Betawi
bg - Bulgarian
bgc - Haryanvi
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
blk - Pa'O
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Iriga Bicolano
bug - Buginese
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
ccp - Chakma
cdo - Mindong
cdo-hant - Mindong (Traditional Han script)
cdo-latn - Mindong (Latin script)
ce - Chechen
ceb - Cebuano
ch - Chamorro
chn - Chinook Jargon
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cpx - Puxian
cpx-hans - Puxian (Simplified Han script)
cpx-hant - Puxian (Traditional Han script)
cpx-latn - Puxian (Latin script)
cr - Cree
crh - Crimean Tatar
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
crh-ro - Dobrujan Tatar
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
dag - Dagbani
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
dga - Dagaare
din - Dinka
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dua - Duala
dv - Divehi
dz - Dzongkha
ee - Ewe
efi - Efik
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - Spanish (formal address)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
fat - Fanti
ff - Fula
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fon - Fon
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gaa - Ga
gag - Gagauz
gan - Gan
gan-hans - Gan (Simplified Han script)
gan-hant - Gan (Traditional Han script)
gcf - Guadeloupean Creole
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
gld - Nanai
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
gpe - Ghanaian Pidgin
grc - Ancient Greek
gsw - Alemannic
gu - Gujarati
guc - Wayuu
gur - Frafra
guw - Gun
gv - Manx
ha - Hausa
hak - Hakka Chinese
hak-hans - Hakka (Simplified Han script)
hak-hant - Hakka (Traditional Han script)
hak-latn - Hak-kâ-ngî (Pha̍k-fa-sṳ)
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
hke - Hunde
hno - Northern Hindko
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
hsn - Xiang
ht - Haitian Creole
hu - Hungarian
hu-formal - Hungarian (formal address)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
iba - Iban
ibb - Ibibio
id - Indonesian
ie - Interlingue
ig - Igbo
igl - Igala
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
isv-cyrl - Interslavic (Cyrillic script)
isv-latn - Interslavic (Latin script)
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kai - Karekare
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kcg - Tyap
kea - Kabuverdianu
kg - Kongo
kge - Komering
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjh - Khakas
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
knc - Central Kanuri
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ksw - S'gaw Karen
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kus - Kusaal
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lki - Laki
lld - Ladin
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lua - Luba-Lulua
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mad - Madurese
mag - Magahi
mai - Maithili
map-bms - Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Māori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mnc - Manchu
mnc-latn - Manchu (Latin script)
mnc-mong - Manchu (Mongolian script)
mni - Manipuri
mnw - Mon
mo - Moldovan
mos - Mossi
mr - Marathi
mrh - Mara
mrj - Western Mari
ms - Malay
ms-arab - Malay (Jawi script)
mt - Maltese
mui - Musi
mus - Muscogee
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nahuatl
nan - Minnan
nan-hant - Minnan (Traditional Han script)
nan-latn-pehoeji - Minnan (Pe̍h-ōe-jī)
nan-latn-tailo - Minnan (Tâi-lô)
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
nia - Nias
nit - Southeastern Kolami
niu - Niuean
nl - Dutch
nl-informal - Dutch (informal address)
nmz - Nawdm
nn - Norwegian Nynorsk
no - Norwegian
nod - Northern Thai
nog - Nogai
nov - Novial
nqo - N’Ko
nr - South Ndebele
nrm - Norman
nso - Northern Sotho
nup - Nupe
nv - Navajo
ny - Nyanja
nyn - Nyankole
nyo - Nyoro
nys - Nyungar
oc - Occitan
ojb - Northwestern Ojibwa
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pcm - Nigerian Pidgin
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
pwn - Paiwan
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rki - Arakanese
rm - Romansh
rmc - Carpathian Romani
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
rsk - Pannonian Rusyn
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rut - Rutul
rw - Kinyarwanda
ryu - Okinawan
sa - Sanskrit
sah - Yakut
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
se-fi - Northern Sami (Finland)
se-no - Northern Sami (Norway)
se-se - Northern Sami (Sweden)
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
sh-cyrl - Serbo-Croatian (Cyrillic script)
sh-latn - Serbo-Croatian (Latin script)
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy - Shawiya
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sjd - Kildin Sami
sje - Pite Sami
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
smn - Inari Sami
sms - Skolt Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
sro - Campidanese Sardinian
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - Siberian Tatar
su - Sundanese
sv - Swedish
sw - Swahili
syl - Sylheti
szl - Silesian
szy - Sakizaya
ta - Tamil
tay - Tayal
tcy - Tulu
tdd - Tai Nuea
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tig - Tigre
tk - Turkmen
tl - Tagalog
tly - Talysh
tly-cyrl - Talysh (Cyrillic script)
tn - Tswana
to - Tongan
tok - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
trv - Taroko
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
ttj - Tooro
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vmw - Makhuwa
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
wal - Wolaytta
war - Waray
wls - Wallisian
wo - Wolof
wuu - Wu
wuu-hans - Wu (Simplified Han script)
wuu-hant - Wu (Traditional Han script)
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yrl - Nheengatu
yue - Cantonese
yue-hans - Cantonese (Simplified Han script)
yue-hant - Cantonese (Traditional Han script)
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zgh-latn - Standard Moroccan Tamazight (Latin script)
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
qqq - Message documentation
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
{{DISPLAYTITLE:Erweiterung:Scribunto/Lua-Referenzhandbuch}}<languages /> <!--WARNING: This page is 252 kio long; consider shortening it to better serve readers.--> {{Shortcut|Lua manual|LUAREF}} Dieses Handbuch dokumentiert {{ll|Lua}}, wie es in MediaWiki mit der Erweiterung {{ll|Extension:Scribunto|Scribunto}} verwendet wird. Einige Teile stammen aus dem [https://www.lua.org/manual/5.1/index.html Lua-5.1-Referenzhandbuch], das unter der [[#License|MIT-Lizenz]] verfügbar ist. {{mbox | type = notice | text = Diese Seite dokumentiert die neueste Version der Scribunto-Erweiterung. Einige Funktionen können noch nicht eingesetzt werden. }} {{TOCright}} <span id="Introduction"></span> == Einleitung == <span id="Getting_started"></span> === Erste Schritte === In einem MediaWiki-Wiki mit aktiviertem Scribunto, wird [[Special:MyLanguage/Help:Starting a new page|eine Seite erstellt]] mit einem Titel, der mit "<code>Module:</code>" beginnt, wie beispielsweise "[[Module:Bananas]]". In diese neue Seite kann folgender Text kopiert werden: <syntaxhighlight lang="lua"> local p = {} --local p = {} -- p steht für Paket (engl. package) function p.hello( frame ) return "Hello, world!" end return p </syntaxhighlight> <div class="mw-translate-fuzzy"> Die Modul-Seite kann abgespeichert werden. Auf einer anderen (nicht modulierten) Seite kann folgender Quelltext eingegeben werden: </div> <pre> {{#invoke:Bananas|hello}} </pre> „Bananas“ muss aber durch die Bezeichnung des benannten Moduls ersetzt werden. In diesem Modul wird dann die ausgelagerte „Hallo“-Funktion aufgerufen. <code><nowiki>{{#invoke:Bananas|hello}}</nowiki></code> wird durch den Text ersetzt, den die Funktion zurückgegeben hat. In diesem Fall „Hello, world!“ Im Allgemeinen ist es sinnvoll, Lua-Code im Zusammenhang einer Vorlage aufzurufen. Dies bedeutet, dass die Syntax aus Sicht einer aufrufenden Seite unabhängig davon ist, ob die Vorlagenlogik in Lua oder in Wikitext implementiert ist. Dadurch wird auch die Einführung zusätzlicher komplexer Syntax im betreffenden Namensraum eines Wikis vermieden. <span id="Module_structure"></span> === Modulaufbau === Das Modul selbst muss eine Lua-Tabelle (englisch ''{{lang|en|Lua table}}'') zurückgeben, der die Funktionen enthält, die von <code><nowiki>{{#invoke:}}</nowiki></code> aufgerufen werden können. Im Allgemeinen wird, wie oben gezeigt, eine lokale Variable deklariert, die eine Tabelle enthält, Funktionen werden zu dieser Tabelle hinzugefügt und die Tabelle wird am Ende des Modulcodes zurückgegeben. Auf alle Funktionen, die weder lokal noch global zu diesem Ausdruck hinzugefügt wurden, können von <code><nowiki>{{#invoke:}}</nowiki></code> nicht aufgerufen werden. Globale Ausdrücke sind jedoch möglicherweise von anderen Modulen aus zugänglich und können mit <code>[[#require|require()]]</code> geladen werden. Grundsätzlich ist es sinnvoll, wenn in einem Modul alle Funktionen und Variablen als lokal deklariert werden. <span id="Accessing_parameters_from_wikitext"></span> === Zugriff auf Parameter aus dem Wikitext === Funktionen, die von <code><nowiki>{{#invoke:}}</nowiki></code> aufgerufen werden, wird ein einzelner Parameter übergeben, bei dem es sich um ein [[#frame-object|Frame-Objekt <small>(eng. Rahmen)</small>]] handelt. Um auf die an <code><nowiki>{{#invoke:}}</nowiki></code> übergebenen Parameter zuzugreifen, wird normalerweise der <code>[[#frame.args|args]]</code> verwendet. Es ist auch möglich, auf die Parameter zuzugreifen, die an die Vorlage übergeben wurden. Diese werden in <code><nowiki>{{#invoke:}}</nowiki></code> angegeben und mittels <code>[[#frame:getParent|frame:getParent()]]</code> eingeladen. Damit kann dann auf die <code>args</code> dieses Frames zugegriffen werden. Dieses Frame-Objekt wird auch verwendet, um auf kontextspezifische Funktionen des Wikitext-Parsers zuzugreifen, z. B. [[#frame:callParserFunction|Aufruf von Parser-Funktionen]], [[#frame:expandTemplate|Expandierung von Vorlagen]] und [[#frame:preprocess|expandieren beliebiger Wikitext-Zeichenfolgen]]. <span id="Returning_text"></span> === Rückgabetext === <div class="mw-translate-fuzzy"> Die Modulfunktion sollte normalerweise eine einzelne Zeichenfolge zurückgeben. Alle zurückgegebenen Werte werden durch [[#tostring|tostring()]] geleitet und dann ohne Trennzeichen verkettet. Diese Zeichenfolge wird als Ergebnis des <code><nowiki>{{#invoke:}}</nowiki></code> in den Wikitext eingefügt. </div> <div class="mw-translate-fuzzy"> An diesem Punkt der Seitenanalyse wurden Vorlagen bereits erweitert, Parserfunktionen und Erweiterungs-Tags wurden bereits verarbeitet, und Vor-Speichern-Transformationen (z. B. Erweiterung der Signatur-Tilden und des [[$help|senkrechten Strichs]]) wurden bereits durchgeführt. Daher kann das Modul diese Funktionen nicht in seinem Ausgabetext verwenden. Wenn ein Modul beispielsweise <code><nowiki>„Hallo [[World|Welt]]! {{Willkommen}}“</nowiki></code> zurückgibt, wird auf der Seite "Hallo [[World|Welt]]! <nowiki>{{Willkommen}}</nowiki>“ angezeigt. </div> Auf der anderen Seite wird die [[Special:MyLanguage/Help:Substitution|Substitution]] zu einem früheren Zeitpunkt der Verarbeitung abgearbeitet, sodass mit <code><nowiki> {{subst:#invoke:}}</nowiki></code> nur die andere Ersetzung bearbeitet wird. Da die fehlgeschlagene Ersetzung im Wikitext verbleibt, werden sie bei der ''nächsten'' Bearbeitung verarbeitet. Dies sollte generell vermieden werden. <span id="Module_documentation"></span> === Modul-Dokumentation === <div class="mw-translate-fuzzy"> Mit Scribunto können Module dokumentiert werden, indem das Modul automatisch mit einer Wikitext-Dokumentationsseite verknüpft wird. Standardmäßig wird dazu die Unterseite „/doc“ des Moduls verwendet, die oberhalb des Quellcodes des Moduls auf der Modulseite angezeigt wird. Die Dokumentation für das „Module:Bananas“ befindet sich beispielsweise unter „Module:Bananas/doc“. </div> <div class="mw-translate-fuzzy"> Diese Unterseiten können mithilfe der folgenden [[$help|MediaWiki-Namensraum-Nachrichten]] konfiguriert werden: </div> * <code>scribunto-doc-page-name</code> — Legt den Namen der für die Dokumentation verwendeten Seite fest. Der Name des Moduls (ohne das Modul: Präfix) wird als <code>$1</code> übergeben. Wenn im Modul-Namensraum die hier angegebenen Seiten als Wikitext und nicht als Lua-Quelle interpretiert werden, können sie nicht mit <code><nowiki>{{#invoke:}}</nowiki></code> verwendet werden. Der Standardwert ist „Module:$1/doc“, d. H. die „/doc“-Unterseite des Moduls. Zu beachten ist, dass Parser-Funktionen und andere Klammererweiterungen in dieser Nachricht möglicherweise nicht verwendet werden. * <code>scribunto-doc-page-does-not-exist</code> — Meldung, wenn die Dokumentenseite nicht vorhanden ist. <span lang="en" dir="ltr" class="mw-content-ltr">The name of the page is passed as <code>$1</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The default is empty.</span> * <code>scribunto-doc-page-show</code> — <span lang="en" dir="ltr" class="mw-content-ltr">Message displayed when the doc page does exist.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The name of the page is passed as <code>$1</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The default is to transclude the documentation page.</span> * <code>scribunto-doc-page-header</code> — <span lang="en" dir="ltr" class="mw-content-ltr">Header displayed when viewing the documentation page itself.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The name of the module (with Module: prefix) being documented is passed as <code>$1</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The default simply displays a short explanation in italics.</span> <span class="mw-translate-fuzzy">Zu beachten ist, dass Module nicht direkt kategorisiert und Interwiki-Links nicht direkt hinzugefügt werden können.</span> Diese können auf der Dokumentationsseite innerhalb der Tags {{tag|includeonly}} eingebunden werden, wo sie auf das Modul angewendet werden, wenn die Dokumentationsseite in die Modulseite übertragen wird. <div lang="en" dir="ltr" class="mw-content-ltr"> === Renaming or moving modules === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> To rename or move a module, use the <u>Move Page</u> link in the Tools sidebar. You will want to move both the module itself, as well as the subpage containing its documentation. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Redirects === </div> {{MW version|version=1.42|gerrit change=574086}} <div lang="en" dir="ltr" class="mw-content-ltr"> Since release 1.42, Scribunto recognizes one particular syntax for redirects (so they’re highlighted on special pages, appear on Special:WhatLinksHere, and so on), and also produces redirects when renaming/moving a module, similarly to how renaming of wikitext pages works (before that, module renames left no redirects behind, now extra rights are needed to suppress the redirect). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> To manually create a module redirect, use the following syntax (which is valid Lua code, and worked like a redirect even before 1.42, but without MediaWiki recognizing it as such): </div> <syntaxhighlight lang="lua"> return require [[Module:Foo]] </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> Replace <code>Foo</code> with the name of the module you'd like to redirect to. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Please note that other similarly valid Lua syntax variations (e.g. using quotation marks instead of square brackets, using parentheses around the <code>require</code> parameter, or even whitespace variations) are still not recognized by MediaWiki as redirects. </div> <span id="Lua_language"></span> == Lua-Sprache == <span id="Tokens"></span> === Token === {{Anchor|name}} ''Namen'' (auch ''Bezeichner'' genannt) können in Lua beliebige Buchstaben, Ziffern und Unterstriche sein, die nicht mit einer Ziffer beginnen. Namen unterscheiden zwischen Groß- und Kleinschreibung. "foo", "Foo" und "FOO" sind unterschiedliche Namen. Folgende Schlüsselwörter sind reserviert und können nicht als Namen verwendet werden: <div style="margin:0.3em 1.6em; column-width: 10em;"> * <code>and</code> * <code>break</code> * <code>do</code> * <code>else</code> * <code>elseif</code> * <code>end</code> * <code>false</code> * <code>for</code> * <code>function</code> * <code>if</code> * <code>in</code> * <code>local</code> * <code>nil</code> * <code>not</code> * <code>or</code> * <code>repeat</code> * <code>return</code> * <code>then</code> * <code>true</code> * <code>until</code> * <code>while</code> </div> Namen, die mit einem Unterstrich gefolgt von Großbuchstaben beginnen, sind für interne globale Lua-Variablen reserviert. Andere Token sind: <div style="margin:0.3em 1.6em; column-width: 10em;"> * <code>#</code> * <code>%</code> * <code>(</code> * <code>)</code> * <code>*</code> * <code>+</code> * <code>,</code> * <code>-</code> * <code>--</code> * <code>.</code> * <code>..</code> * <code>...</code> * <code>/</code> * <code>:</code> * <code>;</code> * <code><</code> * <code><=</code> * <code>=</code> * <code>==</code> * <code>></code> * <code>>=</code> * <code>[</code> * <code>]</code> * <code>^</code> * <code>{</code> * <code>}</code> * <code>~=</code> </div> <span id="Comments"></span> === Kommentare === Ein Kommentar beginnt mit einem doppelten Strich <code>--</code> außerhalb einer Zeichenfolge. Wenn dem <code>--</code> unmittelbar eine [[#long brackets|öffnende eckige Klammer]] folgt, so gilt ein Kommentar bis zur entsprechenden schließenden eckigen Klammer. Andernfalls wird der Kommentar bis zum Ende der aktuellen Zeile geführt. <syntaxhighlight lang="lua"> -- Ein Kommentar beginnt in Lua mit Doppelstrichen end endet am Ende der Zeile. --[[ Mehrzeilige Zeichenfolgen und Kommentare werden von doppelten eckigen Klammern geschmückt. ]] --[=[ In diesen Kommentaren können andere --[[Kommentare]] verschachtelt sein. ]=] --[==[ bei Kommentaren wie diese können andere Kommentare enthalten sein --[===[ lange --[=[Kommentar]=] --Verschachtelungen ]===] mehrmals, auch wenn sie alle --[[ nicht durch passende eckige Klammern abgegrenzt sind! ]===] ]==] </syntaxhighlight> <span id="Data_types"></span> === Datentypen === Lua ist eine dynamisch-typisierte Sprache, d.h. Variablen und Funktionsargumente haben keinen Typ, sondern nur die ihnen zugewiesenen Werte. Alle Werte tragen einen Typ. Lua hat acht grundlegende Datentypen, von denen jedoch nur sechs für die Scribunto-Erweiterung relevant sind. Die Funktion <code>[[#type|type()]]</code> gibt den Typ eines Werts zurück. Die <code>[[#tostring|tostring()]]</code>-Funktion wandelt einen Wert in eine Zeichenfolge, die <code>[[#tonumber|tonumber()]]</code>-Funktion je nach Möglichkeit in eine Zahl um oder gibt andernfalls den Wert „nil“ (nichts) zurück. Es gibt keine ausdrücklichen Funktionen zum Konvertieren eines Werts in andere Datentypen. Zahlen werden automatisch in Zeichenfolgen umgewandelt, wenn eine Zeichenfolge erwartet wird, z.B. bei Verwendung mit dem Verkettungsoperator. Zeichenfolgen, die von <code>[[#tonumber|tonumber()]]</code> erkannt werden (z.B. 0–9), werden bei Verwendung mit Rechenoperatoren automatisch in Zahlen umgewandelt. Wenn ein boolescher Wert erwartet wird, werden alle Werte außer „nil“ (nichts) und „false“ (unwahr) als „true“ (wahr) betrachtet. ==== nil ==== <div class="mw-translate-fuzzy"> <syntaxhighlight lang="lua" inline>"nil"</syntaxhighlight> (nichts) ist der Datentyp von {{luai|nil}}, der vorhanden ist, um das Nichtvorhandensein eines Werts darzustellen. </div> „nil“ darf nicht als Schlüssel in einer Tabelle verwendet werden, und es besteht kein Unterschied zwischen einem nicht zugewiesenen Key und einem Key, dem der Wert „nil“ zugewiesen wurde. <div class="mw-translate-fuzzy"> Bei Umwandlung in eine Zeichenfolge lautet das Ergebnis <syntaxhighlight lang="lua" inline>"nil"</syntaxhighlight>; bei Umwandlung in einen Booleschen Wert wird „nil“ als „false“ (falsch) gewertet. </div> <span lang="en" dir="ltr" class="mw-content-ltr">Note: Lua does make a distinction between {{luai|nil}} and nothing at all in some limited situations.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example, {{luai|tostring(nil)}} returns {{luai|"nil"}}, but {{luai|tostring()}} throws an error, as the first parameter is required.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This distinction is particularly relevant to the [[#select|select()]] function.</span> ==== boolean ==== <div class="mw-translate-fuzzy"> Boolesche Werte werden in {{phpi|true}} (wahr) und {{phpi|false}} (unwahr) unterschieden. </div> <div class="mw-translate-fuzzy"> Bei Umwandlung in eine Zeichenfolge ist das Ergebnis {{phpi|true}} oder {{phpi|false}}. </div> <div class="mw-translate-fuzzy"> Im Gegensatz zu einigen anderen Programmiersprachen können Boolesche Werte nicht direkt in Zahlen umgewandelt werden. Und im Gegensatz zu einigen anderen Programmiersprachen werden bei der Booleschen Konvertierung nur {{phpi|false}} und „nil“ als falsch betrachtet. Die Zahl „0“ und eine leere Zeichenfolge „“ gelten beide als „true“ (wahr). </div> ==== string ==== Lua-Zeichenfolgen werden als eine Aneinanderreihung von 8-Bit-Bytes betrachtet. Es liegt an der Anwendung, sie in einer bestimmten Codierung zu interpretieren. Zeichenketten können durch einfache oder doppelte Anführungszeichen (<code>'</code> oder <code>"</code>) begrenzt werden. Wie bei [[w:de:JavaScript|JavaScript]] und anders als bei [[w:de:PHP|PHP]] gibt es keinen Unterschied zwischen den beiden. Die folgenden [[w:de:Escape-Sequenz|Escape-Sequenzen]] sind verfügbar: <div style="column-width:20em;"> * <code>\a</code> ([[w:de:Bell (Steuerzeichen)|akustisches Signal]], von englisch {{lang|en|alert}}, Byte 7) * <code>\b</code> ([[w:de:Backspace|Rückschritt]], von englisch {{lang|en|backspace}}, Byte 8) * <code>\t</code> (Horizontal-[[w:de:Tabulatorzeichen|Tabulatorzeichen]], von englisch {{lang|en|horizontal tabulator}}, Byte 9) * <code>\n</code> ([[w:de:Zeilenvorschub|Zeilenvorschub]], von englisch {{lang|en|newline}}, Byte 10) * <code>\v</code> (Vertikal-Tabulatorzeichen, von englisch {{lang|en|vertical tabulator}}, Byte 11) * <code>\f</code> (Seitenvorschub, von englisch {{lang|en|form feed}}, Byte 12) * <code>\r</code> ([[w:de:Wagenrücklauf|Wagenrücklauf]], von englisch {{lang|en|carriage return}}, Byte 13) * <code>\"</code> (doppeltes [[w:de:Anführungszeichen|Anführungszeichen]], Byte 34) * <code>\'</code> (einfaches Anführungszeichen, Byte 39) * <code>\\</code> ([[w:de:Backslash|Backslash]], Byte 92) </div> Ein Zeilenumbruch kann auch in eine Zeichenfolge eingefügt werden, indem ein Backslash vorangestellt wird. Bytes können auch mit einer Escape-Sequenz '\''ddd''<nowiki/>' angegeben werden, wobei ''ddd'' der Dezimalwert des Bytes im Bereich von 0 bis 255 ist. Um Unicode-Zeichen mithilfe von Escape-Sequenzen einzubinden, müssen die einzelnen Bytes für die [[:de:UTF-8|UTF-8]] kodiert angegeben werden. Im Allgemeinen ist es einfacher, die Unicode-Zeichen direkt einzugeben. {{Anchor|long brackets}} Zeichenketten können auch in eckigen Klammern definiert werden. Eine öffnende eckige Klammer besteht aus einer öffnenden eckigen Klammer, gefolgt von keinem oder mehreren Gleichheitszeichen, gefolgt von einer anderen öffnenden eckigen Klammer, <code><nowiki>[[</nowiki></code>, <code>[=[</code>, oder <code>[=====[</code>. Die öffnende eckige Klammer muss mit der entsprechenden schließenden eckigen Klammer übereinstimmen, z. B. <code><nowiki>]]</nowiki></code>, <code>]=]</code>, or <code>]=====]</code>.. Wenn auf eine öffnende lange Klammer unmittelbar eine neue Zeile folgt, wird die neue Zeile nicht in die Zeichenfolge aufgenommen, sondern eine neue Zeile unmittelbar vor der schließenden eckigen Klammer. Durch eckige Klammern begrenzte Zeichenfolgen interpretieren Escape-Sequenzen nicht. <syntaxhighlight lang="lua"> -- Diese lange Zeichenfolge foo = [[ bar\tbaz ]] -- entspricht dieser durch Anführungszeichen getrennten Zeichenfolge foo = 'bar\\tbaz\n' </syntaxhighlight> Hinweis: Es werden alle Zeichenfolgen als wahr angenommen, wenn sie in einen Booleschen Wert umgewandelt werden. Dies ist anders als in den meisten anderen Programmiersprachen, in denen eine leere Zeichenfolge normalerweise als falsch betrachtet wird. ==== number ==== <div class="mw-translate-fuzzy"> Lua hat nur einen numerischen Typ, der typischerweise als [[:de:Doppelte Genauigkeit|Wert doppelter Genauigkeit]] dargestellt wird. In diesem Format können Ganzzahlen zwischen <code>-9007199254740991</code> (-2<sup>53</sup> + 1) und <code>9007199254740991</code> (2<sup>53</sup> - 1) exakt dargestellt werden, während größere Zahlen und Zahlen mit Gleitkomma-Anteil an Rundungsfehlern leiden können. </div> <span class="mw-translate-fuzzy">Zahlenkonstanten werden mit einem Punkt (<code>.</code>) als Dezimaltrennzeichen und ohne Gruppierungstrennzeichen, wie z. B. <code>123456.78</code>, angegeben. Zahlen können auch mittels [[:de:Gleitkommazahl#Exponentialschreibweise|E-Notation]] ohne Leerzeichen dargestellt werden, wie z. B. $1e-10, $1e20, or $1e5. Ganzzahlen können auch in hexadezimaler Schreibweise mittels eines Präfixes $0x, wie z. B. $0x3A, angegeben werden.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Numbers may also be represented using [[w:E notation|E notation]] without spaces, e.g. <code>1.23e-10</code>, <code>123.45e20</code>, or <code>1.23E+5</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Integers may also be specified in hexadecimal notation using a <code>0x</code> prefix, e.g. <code>0x3A</code>.</span> <div class="mw-translate-fuzzy"> [[:de:NaN|NaN]] und positive und negative Unendlichkeit werden jedoch korrekt gespeichert und behandelt, deren entsprechende Literale Lua nicht unterstützt. Die Konstante <code>math.huge</code> ist positive Unendlichkeit genau wie eine Division wie <code>1/0</code>, und eine Division wie <code>0/0</code> kann verwendet werden, um schnell ein NaN zu erzeugen. </div> <div class="mw-translate-fuzzy"> Hinweis: Es werden alle Zahlen als wahr angenommen, wenn sie in einen Booleschen Wert umgewandelt werden. Dies ist anders als in den meisten anderen Programmiersprachen, in denen die Zahl 0 normalerweise als falsch betrachtet wird. Bei der Umwandlung in einen String werden endliche Zahlen dezimal dargestellt, möglicherweise in E-Notation; NaN ist <syntaxhighlight lang="lua" inline>"nan"</syntaxhighlight> oder <syntaxhighlight lang="lua" inline>"-nan"</syntaxhighlight>; und Unendlichkeit ist <syntaxhighlight lang="lua" inline>"inf"</syntaxhighlight> oder <syntaxhighlight lang="lua" inline>"-inf"</syntaxhighlight>. </div> <span lang="en" dir="ltr" class="mw-content-ltr">{{red|Known bug}}: the Lua interpreter will treat all instances of <code>0</code> '''and''' <code>-0</code> as whichever of the two is encountered first when the script is compiled, which means that the return values of {{luai|tostring(0)}}, {{luai|1/-0}} (and so on) are affected by where they occur in the code.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This can cause unexpected results, particularly if all instances of <code>0</code> are converted to {{luai|"-0"}} on return.</span> <span lang="en" dir="ltr" class="mw-content-ltr">If necessary, this can be circumvented by generating zero values using {{luai|tonumber("0")}} and {{luai|tonumber("-0")}}, which doesn't seem to cause or be affected by the issue. See [https://lua-l.lua.narkive.com/k4kbwgKi/tostring-and-0].</span> ==== table ==== Lua-Tabellen sind assoziative Arrays, ähnlich wie PHP-Arrays und JavaScript-Objekte. Tabellen werden mittels geschweifter Klammern erstellt. Die leere Tabelle ist <code>{}</code>. Um Felder bei der Erstellung auszufüllen, kann eine durch Kommas und/oder Strichpunkten getrennte Liste von Feldbezeichnern in den geschweiften Klammern angegeben werden. Diese können verschiedene Formen annehmen: * <span class="mw-translate-fuzzy">*<code style="white-space:nowrap">[''[[$anchor1|Ausdruck1]]''] = ''[[$anchor2|Ausdruck2]]''</code> nutzt den (ersten) Wert von ''Ausdruck1'' als Schlüssel und den (ersten) Wert von ''Ausdruck2'' als Wert. * <code style="white-space:nowrap">''[[$anchor3|Name]]'' = ''[[$anchor4|Ausdruck]]''</code> ist gleichwertig zu <code style="white-space:nowrap">["''Name''"] = ''Ausdruck''</code> * <code>''[[$anchor5|Ausdruck]]''</code> ist grob gleichwertig zu <code style="white-space:nowrap">[''i''] = ''Ausdruck''</code>, wobei ''i'' eine Ganzzahl ist, die bei 1 beginnt und mit jeder Feldbezeichnung dieser Form erhöht wird. Wenn dies der letzte Feldbezeichner ist und der Ausdruck mehrere Werte enthält, werden alle Werte genutzt; ansonsten wird nur der erste behalten.</span> * <span lang="en" dir="ltr" class="mw-content-ltr"><code style="white-space:nowrap">''[[#name|name]]'' = ''[[#Expressions|expression]]''</code> is equivalent to <code style="white-space:nowrap">["''name''"] = ''expression''</code></span> * <span lang="en" dir="ltr" class="mw-content-ltr"><code>''[[#Expressions|expression]]''</code> is roughly equivalent to <code style="white-space:nowrap">[''i''] = ''expression''</code>, where ''i'' is an integer starting at 1 and incrementing with each field specification of this form. If this is the last field specifier and the expression has multiple values, all values are used; otherwise only the first is kept.</span> Auf die Felder in einer Tabelle wird unter Verwendung der Klammernotation zugegriffen, z. B. <code>table[key]</code>. Auf Zeichenkettenschlüssel, die auch gültige [[#name|Namen]] sind, kann auch mittels der Punktnotation zugegriffen werden, z. B. <code>table.key</code> entspricht <code>table['key']</code>. Das Aufrufen einer Funktion, die ein Wert in der Tabelle ist, kann die Doppelpunktnotation verwenden; zum Beispiel: <code style="white-space:nowrap">table:func( ... )</code>, was gleichwertig ist zu <code style="white-space:nowrap">table['func']( table, ... )</code> oder <code style="white-space:nowrap">table.func( table, ... )</code>. {{Anchor|sequence}} <div class="mw-translate-fuzzy"> Eine „Sequenz“ ist eine Tabelle mit nicht-nil-Werten für alle positiven Ganzzahlen von 1 bis N und keinem Wert (nil) für alle positiven Ganzzahlen größer als N. Viele Lua-Funktionen arbeiten nur mit Sequenzen und ignorieren nicht-positiv-ganzzahlige Schlüssel. </div> Im Gegensatz zu vielen anderen Sprachen wie PHP oder JavaScript kann jeder Wert außer nil und NaN als Schlüssel genutzt werden, und es wird keine Typumwandlung durchgeführt. Diese sind alle gültig und unterschiedlich: <syntaxhighlight lang="lua"> -- Tabelle erstellen t = {} t["foo"] = "foo" t.bar = "bar" t[1] = "eins" t[2] = "zwei" t[3] = "drei" t[12] = "Die Nummer zwölf" t["12"] = "Die Zeichenfolge zwölf" t[true] = "true" t[tonumber] = "yes, even functions may be table keys" t[t] = "yes, a table may be a table key too. Even in itself." -- Dies erstellt eine Tabelle grob gleichwertig zur obigen t2 = { foo = "foo", bar = "bar", "eins", "zwei", [12] = "Die Nummer zwölf" ["12"] = "Die Zeichenfolge zwölf" "drei" [true] = "true", [tonumber] = "yes, even functions may be table keys", } t2[t2] = "yes, a table may be a table key too. Even in itself." </syntaxhighlight> Ähnlich kann jeder Wert außer nil als Wert in einer Tabelle gespeichert werden. Das Speichern von nil ist gleichwertig zum Löschen des Schlüssels aus der Tabelle, und das Zugreifen auf einen nicht gesetzten Schlüssel führt zu einem nil-Wert. Hinweis: Tabellen werden in Lua niemals implizit kopiert. Wenn eine Tabelle als Argument an die Funktion übergeben wird und die Funktion die Schlüssel oder Werte in der Tabelle manipuliert, werden diese Änderungen im Aufrufer sichtbar. Bei der Umwandlung in einen String ist das gewöhnliche Ergebnis „table“, kann aber mittels der <code>__tostring</code>-[[#Metatables|Metamethode]] überschrieben werden. Lediglich die leere Tabelle wird als Boolescher Wert betrachtet. ==== function ==== Funktionen in Lua sind First-Class-Werte: Sie können anonym erstellt, als Argumente übergeben, Variablen zugewiesen usw. werden. <div class="mw-translate-fuzzy"> Funktionen werden mittels des Schlüsselwortes <code>function</code> erstellt und mittels Klammern aufgerufen. [[:de:Syntaktischer Zucker|Syntaktischer Zucker]] ist für benannte Funktionen, lokale Funktionen und Funktionen, die wie Methoden für eine Tabelle fungieren, verfügbar. Für Einzelheiten siehe unten: [[#Function declarations|Funktionsdeklarationen]] und [[#Function calls|Funktionsaufrufe]]. </div> <div class="mw-translate-fuzzy"> Lua-Funktionen sind [[:de:Closure (Funktion)|Closures]], das heißt, dass sie einen Verweis auf den Gültigkeitsbereich, in dem sie deklariert sind, enthalten und in diesem Gültigkeitsbereich auf Variablen zugreifen und sie bearbeiten können. </div> Wenn eine Funktion wie Tabellen einer anderen Variablen zugewiesen oder als Argument an eine andere Funktion übergeben wird, wird immer noch dasselbe zugrunde liegende „Funktionsobjekt“ aufgerufen. Bei Umwandlung in eine Zeichenfolge ist das Ergebnis „function“. <span id="Unsupported_types"></span> ==== Nichtunterstützte Typen ==== {{Anchor|userdata}} Der „userdata“-Typ wird genutzt, um verschleierte Werte für Erweiterungen von Lua zu speichern, die in anderen Sprachen geschrieben wurden; zum Beispielsweise kann ein „userdata“-Objekt genutzt werden, um einen C-Zeiger oder eine C-Struktur aufzunehmen. Um die Nutzung von Scribunto in Hostumgebungen zu erlauben, wo benutzerdefinierter Code nicht erlaubt ist, werden keine solchen Erweiterungen genutzt. {{Anchor|thread}} Der „thread“-Typ repräsentiert die Handles für Coroutinen, die in der Sandbox von Scribunto nicht verfügbar sind. <span id="Upvalues"></span> return p <div lang="en" dir="ltr" class="mw-content-ltr"> There is a strict limit of max 60 unique upvalues acessed inside a function. An upvalue is a value declared outside of a function and used inside it. As upvalues do count: * variables (a table with many elements counts as one upvalue) * functions (only those directly called from function in question, not their dependencies) A violation of the limit can be triggered by a use of such a variable or function, not by its mere presence or availability. Repeated access to same upvalue does not exhaust the limit further. </div> <span id="Metatables"></span> === Metatabellen === Jede Tabelle kann eine zugeordnete Tabelle haben, die als „Metatabelle“ bezeichnet wird. Die Felder in der Metatabelle werden von einigen Operatoren und Funktionen genutzt, um ein anderes oder ein Fallback-Verhalten für die Tabelle anzugeben. Auf die Metatabelle für eine Tabelle kann mittels der Funktion [[#getmetatable|getmetatable()]] zugegriffen und mittels der Funktion [[#setmetatable|setmetatable()]] kann sie festgelegt werden. Beim Zugriff auf ihre Metafunktionen wird auf Metatabellenfelder wie mit [[#rawget|rawget()]] zugegriffen. Metatabellenfelder, die die Tabelle selbst betreffen, sind: ; __index : Dies wird genutzt, wenn ein Tabellenzugriff <code>t[key]</code> nil zurückgeben würde. <span class="mw-translate-fuzzy">Wenn der Wert dieses Feldes eine Tabelle ist, wird der Zugriff in dieser Tabelle wiederholt, d. h. <code>__index[key]</code> (was __index der Metatabelle der Tabelle aufgerufen kann).</span> Wenn der Wert dieses Feldes eine Funktion ist, wird die Funktion als <code style="white-space:nowrap">__index( t, key )</code> aufgerufen. Die Funktion [[#rawget|rawget()]] umgeht diese Metamethode. ; __newindex : Dies wird genutzt, wenn ein Schlüssel einer Tabelle <code style="white-space:nowrap">t[key] = value</code> zugewiesen wird, wobei <code style="white-space:nowrap">[[#rawget|rawget]]( t, key )</code> nil zurückgeben würde. <span class="mw-translate-fuzzy">Wenn der Wert dieses Feldes eine Tabelle ist, wird der Zugriff in dieser Tabelle wiederholt, d. h. <code>__newindex[key] = value</code> (was __newindex der Metatabelle der Tabelle aufgerufen kann).</span> Wenn der Wert dieses Feldes eine Funktion ist, wird die Funktion als <code style="white-space:nowrap">__newindex( t, key, value )</code> aufgerufen. Die Funktion [[#rawset|rawset()]] umgeht diese Metamethode. ; __call : Dies wird genutzt, wenn Funktionsaufrufsyntax für eine Tabelle <code style="white-space:nowrap">t( ··· )</code> genutzt wird. <span class="mw-translate-fuzzy">Der Wert muss eine Funktion sein, die wie <code style="white-space:nowrap">__call( t, ··· )</code> aufgerufen wird.</span> ; {{Anchor|weak tables}}__mode : Dies wird genutzt, um Tabellen zu erstellen, die schwache Referenzen enthalten. Der Wert muss eine Zeichenfolge sein. Standardmäßig wird kein Wert, der als Schlüssel oder als Wert in einer Tabelle verwendet wird, automatisch speicherbereinigt. <span class="mw-translate-fuzzy">Wenn dieses Metafeld jedoch den Buchstaben „k“ enthält, können Schlüssel automatisch speicherbereinigt werden, wenn es keine nichtschwachen Referenzen gibt und wenn es „v“ -Werte enthält; in beiden Fällen werden sowohl der entsprechende Schlüssel als auch der entsprechende Wert aus der Tabelle entfernt.</span> Hinweis: Das Verhalten ist nicht definiert, wenn dieses Feld geändert wird, nachdem die Tabelle als Metatabelle genutzt wurde. Andere Metatabellenfelder umfassen: <div style="margin:0 1.6em; column-width: 10em;"> * [[#Arithmetic operators|__add]]<sup>[[#binop-note|†]]</sup> * [[#Arithmetic operators|__sub]]<sup>[[#binop-note|†]]</sup> * [[#Arithmetic operators|__mul]]<sup>[[#binop-note|†]]</sup> * [[#Arithmetic operators|__div]]<sup>[[#binop-note|†]]</sup> * [[#Arithmetic operators|__mod]]<sup>[[#binop-note|†]]</sup> * [[#Arithmetic operators|__pow]]<sup>[[#binop-note|†]]</sup> * [[#Arithmetic operators|__unm]] * [[#Concatenation operator|__concat]]<sup>[[#binop-note|†]]</sup> * [[#Relational operators|__eq]]<sup>[[#relop-note|‡]]</sup> * [[#Relational operators|__lt]]<sup>[[#relop-note|‡]]</sup> * [[#Relational operators|__le]]<sup>[[#relop-note|‡]]</sup> * [[#pairs|__pairs]] * [[#ipairs|__ipairs]] * __metatable<sup>[[#metatable-note|*]]</sup> * [[#tostring|__tostring]] </div> <div style="font-size:smaller"> <div id="binop-note" style="padding:0 1em;text-indent: -1em;"><sup>†</sup> Bei binären Operatoren betrachtet Lua zuerst die Metatabelle des linken Arguments (falls vorhanden) und dann die des rechten Arguments, wenn nach einer zu nutzenden Metamethode gesucht wird.</div> <div id="relop-note" style="padding:0 1em;text-indent: -1em;"><sup>‡</sup> Bei relationalen Operatoren wird die Metamethode nur genutzt, wenn dieselbe Funktion in den Metatabellen beider Argumente angegeben ist. Unterschiedliche anonyme Funktionen, auch bei identischem Rumpf und Einschluss, können nicht gleich betrachtet werden.</div> <div id="metatable-note" style="padding:0 1em;text-indent: -1em;"><sup>*</sup> <span class="mw-translate-fuzzy">__metatable betrifft sowohl [[$anchor1|getmetatable()]] als auch [[$anchor2|setmetatable()]]</span></div> </div> <div class="mw-translate-fuzzy"> Hinweis: In Lua teilen sich alle Zeichenfolgen eine einzige Metatabelle, in der sich <code>__index</code> auf die Tabelle <code>[[#String library|string]]</code> bezieht. Diese Metatabelle ist weder in Scribunto noch die referenzierte Tabelle <code>string</code> zugänglich; die für Module verfügbare Zeichenfolgentabelle ist eine Kopie. </div> <span id="Variables"></span> === Variablen === Variablen sind Stellen, die Werte speichern. Es gibt drei Arten von Variablen in Lua: globale Variablen, lokale Variablen und Tabellenfelder. <div class="mw-translate-fuzzy"> Ein [[#name|Name]] repräsentiert eine globale oder lokale Variable (oder ein Funktionsargument, das nur eine Art lokale Variable ist). Variablen werden vermutet, global zu sein, außer dass sie ausdrücklich mittels des Schlüsselwortes <code>local</code> als lokal deklariert wurden. Jede Variable, der kein Wert zugewiesen wurde, hat den Wert nil. </div> <div class="mw-translate-fuzzy"> Globale Variablen werden in einer Standard-Lua-Tabelle gespeichert, die als „Umgebung“ bezeichnet wird; diese Tabelle ist oft als globale Variable <code>_G</code> verfügbar. Es ist möglich, eine Metatabelle für diese globale Variablentabelle festzulegen; die Metamethoden __index und __newindex werden für Zugriffe auf und Zuweisungen zu globalen Variablen aufgerufen, eben wie sie es für Zugriffe auf und Zuweisungen zu Feldern in anderen Tabellen würden. </div> <div class="mw-translate-fuzzy"> Die Umgebung für eine Funktion kann mittels der Funktion [[$anchor1|getfenv()]] Zugriff erfahren und mittels der Funktion [[$anchor2|setfenv()]] geändert werden. In Scribunto sind diese Funktionen stark eingeschränkt, wenn sie überhaupt verfügbar sind. </div> Lokale Variablen haben einen lexikalischen Gültigkeitsbereich; siehe [[#Local variable declarations|Lokale Variablendeklarationen]] für Einzelheiten. <span id="Expressions"></span> === Ausdrücke === <div lang="en" dir="ltr" class="mw-content-ltr"> An ''expression'' is something that has values: literals (numbers, strings, true, false, nil), anonymous function declarations, table constructors, variable references, function calls, the [[#varargs|vararg expression]], expressions wrapped in parentheses, unary operators applied to expressions, and expressions combined with binary operators. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Most expressions have one value; function calls and the vararg expression can have any number. Note that wrapping a function call or vararg expression in parentheses will lose all except the first value. </div> {{Anchor|expression-list|exp-list}} <div lang="en" dir="ltr" class="mw-content-ltr"> Expression lists are comma-separated lists of expressions. All except the last expression are forced to one value (dropping additional values, or using nil if the expression has no values); all values from the last expression are included in the values of the expression list. </div> <span id="Arithmetic_operators"></span> ==== Arithmetische Operatoren ==== Lua unterstützt die üblichen arithmetischen Operatoren: Addition, Subtraktion, Multiplikation, Division, Modulo, Potenzierung und Negation. <div lang="en" dir="ltr" class="mw-content-ltr"> When all operands are numbers or strings for which [[#tonumber|tonumber()]] returns non-nil, the operations have their usual meaning. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If either operand is a table with an appropriate [[#Metatables|metamethod]], the metamethod will be called. </div> {| class="wikitable" style="text-align:center" |- ! Operator !! Funktion !! Beispiel !! <span lang="en" dir="ltr" class="mw-content-ltr">Metamethod</span> !! Anmerkungen |- | + || Addition || a + b || __add || |- | - || Subtraktion || a - b || __sub || |- | * || Multiplikation || a * b || __mul || |- | / || Division || a / b || __div || Geteilt durch null ist kein Fehler; NaN oder infinity wird ausgegeben |- | % || Modulo || a % b || __mod || definiert als <code style="white-space:nowrap">a % b == a - math.floor( a / b ) * b</code> |- | ^ || Potenzierung || a ^ b || __pow || Nicht-Ganzzahl-Potenzen sind erlaubt |- | - || Negation || -a || __unm || |} <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Relational operators ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The relational operators in Lua are <code>==</code>, <code>~=</code>, <code><</code>, <code>></code>, <code><=</code>, and <code>>=</code>. The result of a relational operator is always a boolean. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Equality (<code>==</code>) first compares the types of its operands; if they are different, the result is false. Then it compares the values: nil, boolean, number, and string are compared in the expected manner. Functions are equal if they refer to the exact same function object; <code style="white-space:nowrap">function() end == function() end</code> will return false, as it is comparing two different anonymous functions. Tables are by default compared in the same manner, but this may be changed using the __eq [[#Metatables|metamethod]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Inequality (<code>~=</code>) is the exact negation of equality. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For the ordering operators, if both are numbers or both are strings, they are compared directly. Next, metamethods are checked: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code style="white-space:nowrap">a < b</code> uses <code>__lt</code> * <code style="white-space:nowrap">a <= b</code> uses <code>__le</code> if available, or if <code>__lt</code> is available then it is considered equivalent to <code style="white-space:nowrap">not ( b < a )</code> * <code style="white-space:nowrap">a > b</code> is considered equivalent to <code style="white-space:nowrap">b < a</code> * <code style="white-space:nowrap">a >= b</code> is considered equivalent to <code style="white-space:nowrap">b <= a</code> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the necessary metamethods are not available, an error is raised. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Logical operators ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The logical operators are <code>and</code>, <code>or</code>, and <code>not</code>. All use the standard interpretation where nil and false are considered false and anything else is considered true. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For <code>and</code>, if the left operand is considered false then it is returned and the second operand is not evaluated; otherwise the second operand is returned. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For <code>or</code>, if the left operand is considered true then it is returned and the second operand is not evaluated; otherwise the second operand is returned. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For <code>not</code>, the result is always true or false. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that <code>and</code> and <code>or</code> short circuit. For example, <code style="white-space:nowrap">foo() or bar()</code> will only call <code>bar()</code> if <code>foo()</code> returns false or nil as its first value. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Concatenation operator ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The concatenation operator is two dots, used as <code style="white-space:nowrap">a .. b</code>. If both operands are numbers or strings, they are converted to strings and concatenated. Otherwise if a __concat [[#Metatables|metamethod]] is available, it is used. Otherwise, an error is raised. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that Lua strings are immutable and Lua does not provide any sort of "string builder", so a loop that repeatedly does <code style="white-space:nowrap">a = a .. b</code> will have to create a new string for each iteration and eventually garbage-collect the old strings. If many strings need concatenating, it may be faster to use [[#string.format|string.format()]] or to insert all the strings into a [[#sequence|sequence]] and use [[#table.concat|table.concat()]] at the end. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Length operator ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The length operator is <code>#</code>, used as <code>#a</code>. If <code>a</code> is a string, it returns the length in bytes. If <code>a</code> is a [[#sequence|sequence]] table, it returns the length of the sequence. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>a</code> is a table that is ''not'' a sequence, the <code>#a</code> may return 0 or any value N such that <code>a[N]</code> is not nil and <code>a[N+1]</code> is nil, even if there are non-nil values at higher indexes. For example, </div> <syntaxhighlight lang="lua"> -- This is not a sequence, because a[3] is nil and a[4] is not. a = { 1, 2, nil, 4 } -- This may output either 2 or 4. -- And this may change even if the table is not modified. mw.log( #a ) </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Operator precedence ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua's operator precedence or [[w:order of operations|order of operations]], from highest to lowest: </div> # <code>^</code> # <code>not</code> <code>#</code> <code>-</code> <span lang="en" dir="ltr" class="mw-content-ltr">(negation)</span> # <code>*</code> <code>/</code> <code>%</code> # <code>+</code> <code>-</code> (Subtraktion) # <code>..</code> # <code><</code> <code>></code> <code><=</code> <code>>=</code> <code>~=</code> <code>==</code> # <code>and</code> # <code>or</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Within a precedence level, most binary operators are left-associative, i.e. <code style="white-space:nowrap">a / b / c</code> is interpreted as <code style="white-space:nowrap">(a / b) / c</code>. Exponentiation and concatenation are right-associative, i.e. <code style="white-space:nowrap">a ^ b ^ c</code> is interpreted as <code style="white-space:nowrap">a ^ (b ^ c)</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Function calls ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua function calls look like those in most other languages: a name followed by a list of arguments in parentheses: </div> <span lang="en" dir="ltr" class="mw-content-ltr">func</span>( [[#expression-list|''<span lang="en" dir="ltr" class="mw-content-ltr">expression-list</span>'']] ) <div lang="en" dir="ltr" class="mw-content-ltr"> As is usual with expression lists in Lua, the last expression in the list may supply multiple argument values. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the function is called with fewer values in the expression list than there are arguments in the function definition, the extra arguments will have a nil value. If the expression list contains more values than there are arguments, the excess values are discarded. It is also possible for a function to take a variable number of arguments; see [[#Function declarations|Function declarations]] for details. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua also allows direct calling of a function return value, i.e. <code>func()()</code>. If an expression more complex than a variable access is needed to determine the function to be called, a parenthesized expression may be used in place of the variable access. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua has syntactic sugar for two common cases. The first is when a table is being used as an object, and the function is to be called as a method on the object. The syntax </div> <span lang="en" dir="ltr" class="mw-content-ltr">table:name</span>( [[#expression-list|''<span lang="en" dir="ltr" class="mw-content-ltr">expression-list</span>'']] ) <div lang="en" dir="ltr" class="mw-content-ltr"> is exactly equivalent to </div> <span lang="en" dir="ltr" class="mw-content-ltr">table.name</span>( <span lang="en" dir="ltr" class="mw-content-ltr">table</span>, [[#expression-list|''<span lang="en" dir="ltr" class="mw-content-ltr">expression-list</span>'']] ) {{Anchor|named arguments}} <div lang="en" dir="ltr" class="mw-content-ltr"> The second common case is Lua's method of implementing ''named arguments'' by passing a table containing the name-to-value mappings as the only positional argument to the function. In this case, the parentheses around the argument list may be omitted. This also works if the function is to be passed a single literal string. For example, the calls </div> {{pre|1= func{ arg1 = ''exp'', arg2 = ''exp'' } func"string" }} <div lang="en" dir="ltr" class="mw-content-ltr"> are equivalent to </div> {{pre|1= func( { arg1 = ''exp'', arg2 = ''exp'' } ) func( "string" ) }} <div lang="en" dir="ltr" class="mw-content-ltr"> These may be combined; the following calls are equivalent: </div> {{pre|1= table:name{ arg1 = ''exp'', arg2 = ''exp'' } table.name( table, { arg1 = ''exp'', arg2 = ''exp'' } ) }} <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Function declarations ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The syntax for function declaration looks like this: </div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"> <span class="kr">function</span> <span class="nf">''name''<sub>optional</sub></span> <span class="p">(</span> <span class="nf">''var-list''<sub>optional</sub></span> <span class="p">)</span> [[#block|<span class="nf">''<span lang="en" dir="ltr" class="mw-content-ltr">block</span>''</span>]] <span class="kr">end</span> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> All variables in ''var-list'' are local to the function, with values assigned from the expression list in the [[#Function calls|function call]]. Additional local variables may be declared inside the block. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> When the function is called, the statements in ''block'' are executed after local variables corresponding to ''var-list'' are created and assigned values. If a [[#return|return statement]] is reached, the block is exited and the values of the function call expression are those given by the return statement. If execution reaches the end of the function's block without encountering a return statement, the result of the function call expression has zero values. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua functions are [[w:Closure (computer science)|lexical closures]]. A common idiom is to declare "private static" variables as locals in the scope where the function is declared. For example, </div> <syntaxhighlight lang="lua"> -- This returns a function that adds a number to its argument function makeAdder( n ) return function( x ) -- The variable n from the outer scope is available here to be added to x return x + n end end local add5 = makeAdder( 5 ) mw.log( add5( 6 ) ) -- prints 11 </syntaxhighlight> {{Anchor|varargs}} <div lang="en" dir="ltr" class="mw-content-ltr"> A function may be declared to accept a variable number of arguments, by specifying <code>...</code> as the final item in the ''var-list'': </div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"> <span class="kr">function</span> <span class="nf">''name''<sub>optional</sub></span> <span class="p">(</span> <span class="nf">''var-list''</span><span class="p">,</span> <span class="p">...</span> <span class="p">)</span> [[#block|<span class="nf">''<span lang="en" dir="ltr" class="mw-content-ltr">block</span>''</span>]] <span class="kr">end</span> <span class="c1">-- or</span> <span class="kr">function</span> <span class="nf">''name''<sub>optional</sub></span> <span class="p">(</span> <span class="p">...</span> <span class="p">)</span> [[#block|<span class="nf">''<span lang="en" dir="ltr" class="mw-content-ltr">block</span>''</span>]] <span class="kr">end</span> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Within the block, the varargs expression <code>...</code> may be used, with the result being all the extra values in the function call. For example, </div> <syntaxhighlight lang="lua"> local join = function ( separator, ... ) -- get the extra arguments as a new table local args = { ... } -- get the count of extra arguments, correctly local n = select( '#', ... ) return table.concat( args, separator, 1, n ) end join( ', ', 'foo', 'bar', 'baz' ) -- returns the string "foo, bar, baz" </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> The [[#select|select()]] function is designed to work with the varargs expression; in particular, <code style="white-space:nowrap">select( '#', ... )</code> should be used instead of <code style="white-space:nowrap">#{ ... }</code> to count the number of values in the varargs expression, because <code style="white-space:nowrap">{ ... }</code> may not be a [[#sequence|sequence]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua provides syntactic sugar to combine function declaration and assignment to a variable; see [[#Function declaration statements|Function declaration statements]] for details. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that this will not work: </div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"> <span class="kr">local</span> <span class="nf">factorial</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">n</span> <span class="p">)</span> <span class="kr">if</span> <span class="n">n</span> <span class="o"><=</span> <span class="mi">2</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">n</span> <span class="kr">else</span> <span class="kr">return</span> <span class="n">n</span> <span class="o">*</span> <span class="nf"><s>factorial</s></span><span class="p">(</span> <span class="n">n</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">)</span> <span class="kr">end</span> <span class="kr">end</span> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Since the function declaration is processed before the local variable assignment statement is complete, "factorial" inside the function body refers to the (probably undefined) variable of that name in an outer scope. This problem may be avoided by declaring the local variable first and then assigning it in a subsequent statement, or by using the [[#Function declaration statements|function declaration statement]] syntax. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Statements === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A ''statement'' is the basic unit of execution: one assignment, control structure, function call, variable declaration, etc. </div> {{Anchor|chunk}} <div lang="en" dir="ltr" class="mw-content-ltr"> A ''chunk'' is a sequence of statements, optionally separated by semicolons. A chunk is basically considered the body of an anonymous function, so it can declare local variables, receive arguments, and return values. </div> {{Anchor|block}} <div lang="en" dir="ltr" class="mw-content-ltr"> A ''block'' is also a sequence of statements, just like a chunk. A block can be delimited to create a single statement: {{tmpl|0=<code style="white-space:nowrap">do ''$1'' end</code>|block}}. These may be used to limit the scope of local variables, or to add a <code>return</code> or <code>break</code> in the middle of another block. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Assignments ==== </div> <code style="white-space:nowrap">''<span lang="en" dir="ltr" class="mw-content-ltr">variable-list</span>'' = [[#expression-list|''<span lang="en" dir="ltr" class="mw-content-ltr">expression-list</span>'']]</code> <div lang="en" dir="ltr" class="mw-content-ltr"> The ''variable-list'' is a comma-separated list of variables; the ''expression-list'' is a comma-separated list of one or more expressions. All expressions are evaluated before any assignments are performed, so <code style="white-space:nowrap">a, b = b, a</code> will swap the values of <var>a</var> and <var>b</var>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Local variable declarations ==== </div> <code style="white-space:nowrap">local ''<span lang="en" dir="ltr" class="mw-content-ltr">variable-list</span>''</code> <code style="white-space:nowrap">local ''<span lang="en" dir="ltr" class="mw-content-ltr">variable-list</span>'' = [[#expression-list|''<span lang="en" dir="ltr" class="mw-content-ltr">expression-list</span>'']]</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Local variables may be declared anywhere within a [[#block|block]] or [[#block|chunk]]. The first form, without an expression list, declares the variables but does not assign a value so all variables have nil as a value. The second form assigns values to the local variables, as described in [[#Assignments|Assignments]] above. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that visibility of the local variable begins with the statement after the local variable declaration. So a declaration like <code style="white-space:nowrap">local x = x</code> declares a local variable x and assigns it the value of x from the outer scope. The local variable remains in scope until the end of the innermost block containing the local variable declaration. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Control structures ==== </div> {{Anchor|while}} <code style="white-space:nowrap">while ''<span lang="en" dir="ltr" class="mw-content-ltr">exp</span>'' do ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block</span>]]'' end</code> <div lang="en" dir="ltr" class="mw-content-ltr"> The while statement repeats a block as long as an expression evaluates to a true value. </div> {{Anchor|repeat}} <code style="white-space:nowrap">repeat ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block</span>]]'' until ''<span lang="en" dir="ltr" class="mw-content-ltr">exp</span>''</code> <div lang="en" dir="ltr" class="mw-content-ltr"> The repeat statement repeats a block until an expression evaluates to a true value. Local variables declared inside the block may be accessed in the expression. </div> {{Anchor|for}} <code style="white-space:nowrap">for <span lang="en" dir="ltr" class="mw-content-ltr">''name'' = ''exp1'', ''exp2'', ''exp3''</span> do ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block</span>]]'' end</code><br/> <code style="white-space:nowrap">for <span lang="en" dir="ltr" class="mw-content-ltr">''name'' = ''exp1'', ''exp2''</span> do ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block</span>]]'' end</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This first form of the for loop will declare a local variable, and repeat the block for values from ''exp1'' to ''exp2'' adding ''exp3'' on each iteration. Note that ''exp3'' may be omitted entirely, in which case 1 is used, but non-numeric values such as <code>nil</code> and <code>false</code> are an error. All expressions are evaluated once before the loop is started. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This form of the for loop is roughly equivalent to </div> <syntaxhighlight lang="lua"> do local var, limit, step = tonumber( exp1 ), tonumber( exp2 ), tonumber( exp3 ) if not ( var and limit and step ) then error() end while ( step > 0 and var <= limit ) or ( step <= 0 and var >= limit ) do local name = var block var = var + step end end </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> except that the variables var, limit, and step are not accessible anywhere else. Note that the variable ''name'' is local to the block; to use the value after the loop, it must be copied to a variable declared outside the loop. </div> {{Anchor|iterators}} <code style="white-space:nowrap">for ''<span lang="en" dir="ltr" class="mw-content-ltr">var-list</span>'' in [[#expression-list|''<span lang="en" dir="ltr" class="mw-content-ltr">expression-list</span>'']] do ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block</span>]]'' end</code> <div lang="en" dir="ltr" class="mw-content-ltr"> The second form of the for loop works with ''iterator'' functions. As in the first form, the ''expression-list'' is evaluated only once before beginning the loop. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This form of the for loop is roughly equivalent to </div> <syntaxhighlight lang="lua"> do local func, static, var = expression-list while true do local var-list = func( static, var ) var = var1 -- ''var1'' is the first variable in ''var-list'' if var == nil then break end block end end </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> except that again the variables func, static, and var are not accessible anywhere else. Note that the variables in ''var-list'' are local to the block; to use them after the loop, they must be copied to variables declared outside the loop. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Often the ''expression-list'' is a single function call that returns the three values. If the iterator function can be written so it only depends on the parameters passed into it, that would be the most efficient. If not, [https://www.lua.org/pil/7.4.html Programming in Lua] suggests that a closure be preferred to returning a table as the static variable and updating its members on each iteration. </div> {{Anchor|if}} <code style="white-space:nowrap">if ''<span lang="en" dir="ltr" class="mw-content-ltr">exp1</span>'' then ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block1</span>]]'' elseif ''<span lang="en" dir="ltr" class="mw-content-ltr">exp2</span>'' then ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block2</span>]]'' else ''[[#block|<span lang="en" dir="ltr" class="mw-content-ltr">block3</span>]]'' end</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Executes ''block1'' if ''exp1'' returns true, otherwise executes ''block2'' if ''exp2'' returns true, and ''block3'' otherwise. The <code style="white-space:nowrap">else ''block3''</code> portion may be omitted, and the <code style="white-space:nowrap">elseif ''exp2'' then ''block2''</code> portion may be repeated or omitted as necessary. </div> {{Anchor|return}} <code style="white-space:nowrap">return [[#expression-list|''<span lang="en" dir="ltr" class="mw-content-ltr">expression-list</span>'']]</code> <div lang="en" dir="ltr" class="mw-content-ltr"> The return statement is used to return values from a function or a [[#chunk|chunk]] (which is just a function). The ''expression-list'' is a comma-separated list of zero or more expressions. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua implements [[w:tail call|tail calls]]: if ''expression-list'' consists of exactly one expression which is a function call, the current stack frame will be reused for the call to that function. This has implication for functions that deal with the call stack, such as <code>[[#getfenv|getfenv()]]</code> and <code>[[#debug.traceback|debug.traceback()]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The return statement must be the last statement in its [[#block|block]]. If for some reason a return is needed in the middle of a block, an explicit block <code style="white-space:nowrap">do return end</code> may be used. </div> {{Anchor|break}} <code>break</code> <div lang="en" dir="ltr" class="mw-content-ltr"> The break statement is used to terminate the execution of a while, repeat, or for loop, skipping to the next statement after the loop. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The break statement must be the last statement in its [[#block|block]]. If for some reason a break is needed in the middle of a block, an explicit block <code style="white-space:nowrap">do break end</code> may be used. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Unlike some other languages, Lua does not have a "continue" statement for loops (i.e. a statement to move onto the next iteration without breaking the loop altogether). </div> <span lang="en" dir="ltr" class="mw-content-ltr">It is straightforward to achieve the same effect by nesting a <code style="white-space:nowrap">repeat ... until true</code> block immediately inside the main loop, which will only ever iterate once for each iteration of the main loop (as its condition is always true).</span> <span lang="en" dir="ltr" class="mw-content-ltr">Using <code style="white-space:nowrap">break</code> will only end the inner loop, which has the practical effect of causing the main loop to continue onto the next iteration.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> If it is necessary to use <code style="white-space:nowrap">break</code> on the main loop, simply declare a variable which is checked each time the inner loop completes, and set it when necessary. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Function calls as statements ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A function call may be used as a statement; in this case, the function is being called only for any side effects it may have (e.g. [[#mw.log|mw.log()]] logs values) and any return values are discarded. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Function declaration statements ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua provides syntactic sugar to make declaring a function and assigning it to a variable more natural. The following pairs of declarations are equivalent </div> -- <span lang="en" dir="ltr" class="mw-content-ltr">Basic declaration</span> function func( ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end func = function ( ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end -- <span lang="en" dir="ltr" class="mw-content-ltr">Local function</span> local function func( ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end local func; func = function ( ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end -- <span lang="en" dir="ltr" class="mw-content-ltr">Function as a field in a table</span> function table.func( ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end table.func = function ( ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end -- <span lang="en" dir="ltr" class="mw-content-ltr">Function as a method in a table</span> function table:func( ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end table.func = function ( self, ''var-list'' ) <span lang="en" dir="ltr" class="mw-content-ltr">''[[#block|block]]''</span> end <div lang="en" dir="ltr" class="mw-content-ltr"> Note the colon notation here parallels the colon notation for [[#Function calls|function calls]], adding an implicit argument named <code>self</code> at the beginning of the arguments list. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Error handling === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Errors may be "thrown" using the [[#error|error()]] and [[#assert|assert()]] functions. To "catch" errors, use [[#pcall|pcall()]] or [[#xpcall|xpcall()]]. Note that certain internal Scribunto errors cannot be caught in Lua code. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Garbage collection === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lua performs automatic memory management. This means that you have to worry neither about allocating memory for new objects nor about freeing it when the objects are no longer needed. Lua manages memory automatically by running a ''garbage collector'' from time to time to collect all dead objects (that is, objects that are no longer accessible from Lua) and objects that are only reachable via [[#weak tables|weak references]]. All memory used by Lua is subject to automatic management: tables, functions, strings, etc. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Garbage collection happens automatically, and cannot be configured from within Scribunto. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Standard libraries == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The standard Lua libraries provide essential services and performance-critical functions to Lua. Only those portions of the standard libraries that are available in Scribunto are documented here. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Basic functions === </div> ==== _G ==== <span id="_G"></span><!-- Don't use {{anchor}}, it strips the underscore --> <div lang="en" dir="ltr" class="mw-content-ltr"> This variable holds a reference to the current global variable table; the global variable <code>foo</code> may also be accessed as <code>_G.foo</code>. Note, however, that there is nothing special about _G itself; it may be reassigned in the same manner as any other variable: </div> <syntaxhighlight lang="lua"> foo = 1 mw.log( foo ) -- logs "1" _G.foo = 2 mw.log( foo ) -- logs "2" _G = {} -- _G no longer points to the global variable table _G.foo = 3 mw.log( foo ) -- still logs "2" </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> The global variable table may be used just like any other table. For example, </div> <syntaxhighlight lang="lua"> -- Call a function whose name is stored in a variable _G[var]() -- Log the names and stringified values of all global variables for k, v in pairs( _G ) do mw.log( k, v ) end -- Log the creation of new global variables setmetatable( _G, { __newindex = function ( t, k, v ) mw.log( "Creation of new global variable '" .. k .. "'" ) rawset( t, k, v ) end } ) </syntaxhighlight> ==== _VERSION ==== <span id="_VERSION"></span><!-- Don't use {{anchor}}, it strips the underscore --> <div lang="en" dir="ltr" class="mw-content-ltr"> A string containing the running version of Lua, e.g. "Lua 5.1". </div> ==== assert ==== <code style="white-space:nowrap">assert( v, message, ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>v</code> is nil or false, issues an error. In this case, <code>message</code> is used as the text of the error: if nil (or unspecified), the text is "assertion failed!"; if a string or number, the text is that value; otherwise assert itself will raise an error. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>v</code> is any other value, assert returns all arguments including <code>v</code> and <code>message</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A somewhat common idiom in Lua is for a function to return a "true" value in normal operation, and on failure return nil or false as the first value and an error message as the second value. Easy error checking can then be implemented by wrapping the call in a call to <code>assert</code>: </div> <syntaxhighlight lang="lua"> -- This doesn't check for errors local result1, result2, etc = func( ... ) -- This works the same, but does check for errors local result1, result2, etc = assert( func( ... ) ) </syntaxhighlight> ==== error ==== <code style="white-space:nowrap">error( message, level )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Issues an error, with text <code>message</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> <code>error</code> normally adds some information about the location of the error. If <code>level</code> is 1 or omitted, that information is the location of the call to <code>error</code> itself; 2 uses the location of the call of the function that called error; and so on. Passing 0 omits inclusion of the location information. </div> ==== getfenv ==== <code style="white-space:nowrap">getfenv( f )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Note this function may not be available, depending on <code>allowEnvFuncs</code> in the engine configuration. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns an ''environment'' (global variable table), as specified by <code>f</code>: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * If 1, nil, or omitted, returns the environment of the function calling <code>getfenv</code>. Often this will be the same as [[#_G|_G]]. * Integers 2–10 return the environment of functions higher in the call stack. For example, 2 returns the environment for the function that called the current function, 3 returns the environment for the function calling that function, and so on. An error will be raised if the value is higher than the number of function calls in the stack, or if the targeted stack level returned with a tail call. * Passing a function returns the environment that will be used when that function is called. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The environments used by all standard library functions and Scribunto library functions are protected. Attempting to access these environments using <code>getfenv</code> will return nil instead. </div> ==== getmetatable ==== <code style="white-space:nowrap">getmetatable( table )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the [[#Metatables|metatable]] of a [[#table|table]]. Any other type will return nil. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the metatable has a <code>__metatable</code> field, that value will be returned instead of the actual metatable. </div> ==== ipairs ==== <code style="white-space:nowrap">ipairs( t )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns three values: an iterator function, the table <code>t</code>, and 0. This is intended for use in the [[#iterators|iterator form of <code>for</code>]]: </div> <syntaxhighlight lang="lua"> for i, v in ipairs( t ) do -- process each index-value pair end </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> This will iterate over the pairs ( 1, t[1] ), ( 2, t[2] ), and so on, stopping when t[i] would be nil. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The standard behavior may be overridden by providing an <code>__ipairs</code> [[#Metatables|metamethod]]. If that metamethod exists, the call to ipairs will return the three values returned by <code style="white-space:nowrap">__ipairs( t )</code> instead. </div> ==== next ==== <code style="white-space:nowrap">next( table, key )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This allows for iterating over the keys in a table. If <code>key</code> is nil or unspecified, returns the "first" key in the table and its value; otherwise, it returns the "next" key and its value. When no more keys are available, returns nil. It is possible to check whether a table is empty using the expression <code style="white-space:nowrap">next( t ) == nil</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that the order in which the keys are returned is not specified, even for tables with numeric indexes. To traverse a table in numerical order, use a [[#for|numerical for]] or [[#ipairs|ipairs]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Behavior is undefined if, when using next for traversal, any non-existing key is assigned a value. Assigning a new value (including nil) to an existing field is allowed. </div> ==== pairs ==== <code style="white-space:nowrap">pairs( t )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns three values: an iterator function ([[#next|next]] or a work-alike), the table <code>t</code>, and nil. This is intended for use in the [[#iterators|iterator form of <code>for</code>]]: </div> <syntaxhighlight lang="lua"> for k, v in pairs( t ) do -- process each key-value pair end </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> This will iterate over the key-value pairs in <code>t</code> just as [[#next|next]] would; see the documentation for [[#next|next]] for restrictions on modifying the table during traversal. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The standard behavior may be overridden by providing a __pairs [[#Metatables|metamethod]]. If that metamethod exists, the call to pairs will return the three values returned by <code style="white-space:nowrap">__pairs( t )</code> instead. </div> ==== pcall ==== <code style="white-space:nowrap">pcall( f, ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Calls the function <code>f</code> with the given arguments in ''protected mode''. This means that if an error is raised during the call to <code>f</code>, pcall will return false and the error message raised. If no error occurs, pcall will return true and all values returned by the call. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In [[w:pseudocode|pseudocode]], <code>pcall</code> might be defined something like this: </div> <syntaxhighlight lang="lua"> function pcall( f, ... ) try return true, f( ... ) catch ( message ) return false, message end end </syntaxhighlight> ==== rawequal ==== <code style="white-space:nowrap">rawequal( a, b )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This is equivalent to <code style="white-space:nowrap">a == b</code> except that it ignores any __eq [[#Metatables|metamethod]]. </div> ==== rawget ==== <code style="white-space:nowrap">rawget( table, k )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This is equivalent to <code>table[k]</code> except that it ignores any __index [[#Metatables|metamethod]]. </div> ==== rawset ==== <code style="white-space:nowrap">rawset( table, k, v )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This is equivalent to <code style="white-space:nowrap">table[k] = v</code> except that it ignores any __newindex [[#Metatables|metamethod]]. </div> ==== select ==== <code style="white-space:nowrap">select( index, ... )</code> <span lang="en" dir="ltr" class="mw-content-ltr">If <code>index</code> is a number, returns all arguments in <code>...</code> from that index onwards.</span> <span lang="en" dir="ltr" class="mw-content-ltr">If <code>index</code> is the string {{luai|"#"}}, returns the number of arguments in <code>...</code>.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> Note: unlike tables, lists of arguments (including the [[#varargs|vararg expression]] <code>...</code>) treat {{luai|nil}} as a distinct value (see documentation for [[#Length operator|#]] and [[#unpack|unpack]] for the problem with {{luai|nil}} in tables). For example: * {{luai|select(2, "foo", "bar")}} returns {{luai|"bar"}}. * {{luai|select(2, "foo", nil, "bar", nil)}} returns {{luai|nil, "bar", nil}}. * {{luai|select("#", "foo", "bar")}} returns {{luai|2}}. * {{luai|select("#", "foo", "bar", nil)}} returns {{luai|3}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In other words, <code>select</code> is roughly like the following (except that it also handles any {{luai|nil}} arguments after the final non-nil argument): </div> <syntaxhighlight lang="lua"> function select( index, ... ) local t = { ... } local maxindex = table.maxn( t ) if index == "#" then return maxindex else return unpack( t, index, maxindex ) end end </syntaxhighlight> ==== setmetatable ==== <code style="white-space:nowrap">setmetatable( table, metatable )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Sets the [[#Metatables|metatable]] of a [[#table|table]]. <code>metatable</code> may be nil, but must be explicitly provided. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the current metatable has a __metatable field, <code>setmetatable</code> will throw an error. </div> ==== tonumber ==== <code style="white-space:nowrap">tonumber( value, base )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Tries to convert <code>value</code> to a number. If it is already a number or a string convertible to a number, then <code>tonumber</code> returns this number; otherwise, it returns nil. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The optional <code>base</code> (default 10) specifies the base to interpret the numeral. The base may be any integer between 2 and 36, inclusive. In bases above 10, the letter 'A' (in either upper or lower case) represents 10, 'B' represents 11, and so forth, with 'Z' representing 35. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In base 10, the value may have a decimal part, be expressed in [[w:E notation|E notation]], and may have a leading "0x" to indicate base 16. In other bases, only unsigned integers are accepted. </div> ==== tostring ==== <code style="white-space:nowrap">tostring( value )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts <code>value</code> to a string. See [[#Data types|Data types]] above for details on how each type is converted. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The standard behavior for tables may be overridden by providing a __tostring [[#Metatables|metamethod]]. If that metamethod exists, the call to tostring will return the single value returned by <code style="white-space:nowrap">__tostring( value )</code> instead. </div> ==== type ==== <code style="white-space:nowrap">type( value )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the type of <code>value</code> as a string: <code>"[[#nil|nil]]"</code>, <code>"[[#number|number]]"</code>, <code>"[[#string|string]]"</code>, <code>"[[#boolean|boolean]]"</code>, <code>"[[#table|table]]"</code>, or <code>"[[#function|function]]"</code>. </div> ==== unpack ==== <code style="white-space:nowrap">unpack( table, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns values from the given table, something like <code style="white-space:nowrap">table[i], table[i+1], ···, table[j]</code> would do if written out manually. If nil or not given, <code>i</code> defaults to 1 and <code>j</code> defaults to <code style="white-space:nowrap">[[#Length operator|#]]table</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the table does not have a value for a particular key, unpack will return nil for that value. For example, {{luai|1=unpack({"foo", [3] = "bar"}, 1, 4)}} returns {{luai|"foo", nil, "bar", nil}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that results are not deterministic if <code>table</code> is not a [[#sequence|sequence]] and <code>j</code> is nil or unspecified; see [[#Length operator|Length operator]] for details. </div> ==== xpcall ==== <code style="white-space:nowrap">xpcall( f, errhandler )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This is much like <code>[[#pcall|pcall]]</code>, except that the error message is passed to the function <code>errhandler</code> before being returned. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In [[w:pseudocode|pseudocode]], <code>xpcall</code> might be defined something like this: </div> <syntaxhighlight lang="lua"> function xpcall( f, errhandler ) try return true, f() catch ( message ) message = errhandler( message ) return false, message end end </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> === Debug library === </div> ==== debug.traceback ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">debug.traceback( message, level )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a string with a traceback of the call stack. An optional message string is appended at the beginning of the traceback. An optional level number tells at which stack level to start the traceback. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Math library === </div> ==== math.abs ==== <code style="white-space:nowrap">math.abs( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the absolute value of <code>x</code>. </div> ==== math.acos ==== <code style="white-space:nowrap">math.acos( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the arc cosine of <code>x</code> (given in radians). </div> ==== math.asin ==== <code style="white-space:nowrap">math.asin( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the arc sine of <code>x</code> (given in radians). </div> ==== math.atan ==== <code style="white-space:nowrap">math.atan( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the arc tangent of <code>x</code> (given in radians). </div> ==== math.atan2 ==== <code style="white-space:nowrap">math.atan2( y, x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the arc tangent of <code>y/x</code> (given in radians), using the signs of both parameters to find the quadrant of the result. </div> ==== math.ceil ==== <code style="white-space:nowrap">math.ceil( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the smallest integer larger than or equal to <code>x</code>. </div> ==== math.cos ==== <code style="white-space:nowrap">math.cos( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the cosine of <code>x</code> (given in radians). </div> ==== math.cosh ==== <code style="white-space:nowrap">math.cosh( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the hyperbolic cosine of <code>x</code>. </div> ==== math.deg ==== <code style="white-space:nowrap">math.deg( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the angle <code>x</code> (given in radians) in degrees. </div> ==== math.exp ==== <code style="white-space:nowrap">math.exp( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the value <math>e^x</math>. </div> ==== math.floor ==== <code style="white-space:nowrap">math.floor( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the largest integer smaller than or equal to <code>x</code>. </div> ==== math.fmod ==== <code style="white-space:nowrap">math.fmod( x, y )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the remainder of the division of <code>x</code> by <code>y</code> that rounds the quotient towards zero. For example, <code>math.fmod( 10, 3 )</code> yields <code>1</code>. </div> ==== math.frexp ==== <code style="white-space:nowrap">math.frexp( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns two values <code>m</code> and <code>e</code> such that: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * If <code>x</code> is finite and non-zero: <math>x = m \times 2^e</math>, <code>e</code> is an integer, and the absolute value of <code>m</code> is in the range <math>[0.5, 1)</math> * If <code>x</code> is zero: <code>m</code> and <code>e</code> are 0 * If <code>x</code> is NaN or infinite: <code>m</code> is <code>x</code> and <code>e</code> is not specified </div> ==== math.huge ==== <div lang="en" dir="ltr" class="mw-content-ltr"> The value representing positive infinity; larger than or equal to any other numerical value. </div> ==== math.ldexp ==== <code style="white-space:nowrap">math.ldexp( m, e )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns <math>m \times 2^e</math> (<code>e</code> should be an integer). </div> ==== math.log ==== <code style="white-space:nowrap">math.log( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the natural logarithm of <code>x</code>. </div> ==== math.log10 ==== <code style="white-space:nowrap">math.log10( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the base-10 logarithm of <code>x</code>. </div> ==== math.max ==== <code style="white-space:nowrap">math.max( x, ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the maximum value among its arguments. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Behavior with NaNs is not specified. With the current implementation, NaN will be returned if <code>x</code> is NaN, but any other NaNs will be ignored. </div> ==== math.min ==== <code style="white-space:nowrap">math.min( x, ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the minimum value among its arguments. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Behavior with NaNs is not specified. With the current implementation, NaN will be returned if <code>x</code> is NaN, but any other NaNs will be ignored. </div> ==== math.modf ==== <code style="white-space:nowrap">math.modf( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns two numbers, the integral part of <code>x</code> and the fractional part of <code>x</code>. For example, <code>math.modf( 1.25 )</code> yields <code>1, 0.25</code>. </div> ==== math.pi ==== <div lang="en" dir="ltr" class="mw-content-ltr"> The value of <math>\pi</math>. </div> ==== math.pow ==== <code style="white-space:nowrap">math.pow( x, y )</code> Äquivalent zu <code>x^y</code>. ==== math.rad ==== <code style="white-space:nowrap">math.rad( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the angle <code>x</code> (given in degrees) in radians. </div> ==== math.random ==== <code style="white-space:nowrap">math.random( m, n )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a pseudo-random number. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The arguments <code>m</code> and <code>n</code> may be omitted, but if specified must be convertible to integers. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * With no arguments, returns a real number in the range <math>[0,1)</math> * With one argument, returns an integer in the range <math>[1,m]</math> * With two arguments, returns an integer in the range <math>[m,n]</math> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that incorrect output may be produced if <code>m</code> or <code>n</code> are less than −2147483648 or greater than 2147483647, or if <code>n - m</code> is greater than 2147483646. </div> ==== math.randomseed ==== <code style="white-space:nowrap">math.randomseed( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Sets <code>x</code> as the [[w:Random seed|seed]] for the pseudo-random generator. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that using the same seed will cause <code>math.random</code> to output the same sequence of numbers. </div> <syntaxhighlight lang="lua"> math.randomseed( tonumber( mw.getContentLanguage():formatDate( "U" ) ) * 10000 + os.clock() * 10000 ) </syntaxhighlight> ==== math.sin ==== <code style="white-space:nowrap">math.sin( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the sine of <code>x</code> (given in radians). </div> ==== math.sinh ==== <code style="white-space:nowrap">math.sinh( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the hyperbolic sine of <code>x</code>. </div> ==== math.sqrt ==== <code style="white-space:nowrap">math.sqrt( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the square root of <code>x</code>. Equivalent to <code>x^0.5</code>. </div> ==== math.tan ==== <code style="white-space:nowrap">math.tan( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the tangent of <code>x</code> (given in radians). </div> ==== math.tanh ==== <code style="white-space:nowrap">math.tanh( x )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the hyperbolic tangent of <code>x</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Operating system library === </div> ==== os.clock ==== <code>os.clock()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns an approximation of the amount in seconds of CPU time used by the program. </div> ==== os.date ==== <code style="white-space:nowrap">os.date( format, time )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> : ''[[#mw.language:formatDate|Language library's formatDate]] may be used for more comprehensive date formatting'' </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a string or a table containing date and time, formatted according to <code>format</code>. If the format is omitted or nil, "%c" is used. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>time</code> is given, it is the time to be formatted (see <code>[[#os.time|os.time()]]</code>). Otherwise the current time is used. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>format</code> starts with '!', then the date is formatted in UTC rather than the server's local time. After this optional character, if format is the string "*t", then date returns a table with the following fields: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * year (full) * month (1–12) * day (1–31) * hour (0–23) * min (0–59) * sec (0–60, to allow for [[w:leap second|leap seconds]]) * wday (weekday, Sunday is 1) * yday (day of the year) * isdst (daylight saving flag, a boolean; may be absent if the information is not available) </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If format is not "*t", then date returns the date as a string, formatted according to the same rules as the C function [http://man7.org/linux/man-pages/man3/strftime.3.html strftime]. </div> ==== os.difftime ==== <code style="white-space:nowrap">os.difftime( t2, t1 )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number of seconds from <code>t1</code> to <code>t2</code>. </div> ==== os.time ==== <code style="white-space:nowrap">os.time( table )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a number representing the current [[w:Unix time|Unix time]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> When called without arguments, returns the current time. If passed a table, the time encoded in the table will be parsed. The table must have the fields "year", "month", and "day", and may also include "hour" (default 12), "min" (default 0), "sec" (default 0), and "isdst". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Package library === </div> ==== require ==== <code style="white-space:nowrap">require( modulename )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Loads the specified module. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> First, it looks in <code>package.loaded[modulename]</code> to see if the module is already loaded. If so, returns <code>package.loaded[modulename]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Otherwise, it calls each loader in the <code>package.loaders</code> sequence to attempt to find a loader for the module. If a loader is found, that loader is called. The value returned by the loader is stored into <code>package.loaded[modulename]</code> and is returned. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See the documentation for <code>[[#package.loaders|package.loaders]]</code> for information on the loaders available. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For example, if you have a module "Module:Giving" containing the following: </div> <syntaxhighlight lang="lua"> local p = {} p.someDataValue = 'Hello!' return p </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> You can load this in another module with code such as this: </div> <syntaxhighlight lang="lua"> local giving = require( "Module:Giving" ) local value = giving.someDataValue -- value is now 'Hello!' </syntaxhighlight> ==== package.loaded ==== <div lang="en" dir="ltr" class="mw-content-ltr"> This table holds the loaded modules. The keys are the module names, and the values are the values returned when the module was loaded. </div> ==== package.loaders ==== <div lang="en" dir="ltr" class="mw-content-ltr"> This table holds the sequence of searcher functions to use when loading modules. Each searcher function is called with a single argument, the name of the module to load. If the module is found, the searcher must return a function that will actually load the module and return the value to be returned by [[#require|require]]. Otherwise, it must return nil. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Scribunto provides two searchers: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> # Look in <code>package.preload[modulename]</code> for the loader function # Look in the [[#Loadable libraries|modules provided with Scribunto]] for the module name, and if that fails look in the Module: namespace. The "Module:" prefix must be provided. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that the standard Lua loaders are '''not''' included. </div> ==== package.preload ==== <div lang="en" dir="ltr" class="mw-content-ltr"> This table holds loader functions, used by the first searcher Scribunto includes in [[#package.loaders|package.loaders]]. </div> ==== package.seeall ==== <code style="white-space:nowrap">package.seeall( table )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Sets the __index [[#Metatables|metamethod]] for <code>table</code> to [[#_G|_G]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === String library === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In all string functions, the first character is at position 1, not position 0 as in C, PHP, and JavaScript. Indexes may be negative, in which case they count from the end of the string: position -1 is the last character in the string, -2 is the second-last, and so on. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> {{red|Warning:}} The string library assumes one-byte character encodings. '''It cannot handle Unicode characters'''. To operate on Unicode strings, use the corresponding methods in the [[#Ustring library|Scribunto Ustring library]]. </div> ==== string.byte ==== <code style="white-space:nowrap">string.byte( s, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> If the string is considered as an array of bytes, returns the byte values for <code>s[i]</code>, <code>s[i+1]</code>, ···, <code>s[j]</code>. The default value for <code>i</code> is 1; the default value for <code>j</code> is <code>i</code>. Identical to [[#mw.ustring.byte|mw.ustring.byte()]]. </div> ==== string.char ==== <code style="white-space:nowrap">string.char( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Receives zero or more integers. Returns a string with length equal to the number of arguments, in which each character has the byte value equal to its corresponding argument. </div> <syntaxhighlight lang="lua"> local value = string.char( 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21 ) --value is now 'Hello!' </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.char|mw.ustring.char()]] for a similar function that uses Unicode codepoints rather than byte values. </div> ==== string.find ==== <code style="white-space:nowrap">string.find( s, pattern, init, plain )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Looks for the first match of <code>[[#Patterns|pattern]]</code> in the string <code>s</code>. If it finds a match, then <code>find</code> returns the offsets in <code>s</code> where this occurrence starts and ends; otherwise, it returns nil. If the pattern has captures, then in a successful match the captured values are also returned after the two indices. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A third, optional numerical argument <code>init</code> specifies where to start the search; its default value is 1 and can be negative. A value of true as a fourth, optional argument <code>plain</code> turns off the pattern matching facilities, so the function does a plain "find substring" operation, with no characters in <code>pattern</code> being considered "magic". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that if <code>plain</code> is given, then <code>init</code> must be given as well. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.find|mw.ustring.find()]] for a similar function extended as described in [[#Ustring patterns|Ustring patterns]] and where the <code>init</code> offset is in characters rather than bytes. </div> ==== string.format ==== <code style="white-space:nowrap">string.format( formatstring, ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a formatted version of its variable number of arguments following the description given in its first argument (which must be a string). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The format string uses a limited subset of the [http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html <code>printf</code> format specifiers]: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Recognized flags are <code>'-', '+', ' ', '#',</code> and <code>'0'</code>. * Integer field widths up to 99 are supported. <code>'*'</code> is not supported. * Integer precisions up to 99 are supported. <code>'*'</code> is not supported. * Length modifiers are not supported. * Recognized conversion specifiers are <code>'c', 'd', 'i', 'o', 'u', 'x', 'X', 'e', 'E', 'f', 'g', 'G', 's', '%',</code> and the non-standard <code>'q'</code>. * Positional specifiers (e.g. "%2$s") are not supported. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The conversion specifier <code>q</code> is like <code>s</code>, but formats the string in a form suitable to be safely read back by the Lua interpreter: the string is written between double quotes, and all double quotes, newlines, embedded zeros, and backslashes in the string are correctly escaped when written. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Conversion between strings and numbers is performed as specified in [[#Data types|Data types]]; other types are not automatically converted to strings. Strings containing NUL characters (byte value 0) are not properly handled. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Identical to [[#mw.ustring.format|mw.ustring.format()]]. </div> ==== string.gmatch ==== <code style="white-space:nowrap">string.gmatch( s, pattern )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns an iterator function that, each time it is called, returns the next captures from [[#Patterns|<code>pattern</code>]] over string <code>s</code>. If <code>pattern</code> specifies no captures, then the whole match is produced in each call. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For this function, a '<code>^</code>' at the start of a pattern is not magic, as this would prevent the iteration. It is treated as a literal character. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.gmatch>|mw.ustring.gmatch()]] for a similar function for which the pattern is extended as described in [[#Ustring patterns|Ustring patterns]]. </div> ==== string.gsub ==== <code style="white-space:nowrap">string.gsub( s, pattern, repl, n )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a copy of <code>s</code> in which all (or the first <code>n</code>, if given) occurrences of the [[#Patterns|<code>pattern</code>]] have been replaced by a replacement string specified by <code>repl</code>, which can be a string, a table, or a function. <code>gsub</code> also returns, as its second value, the total number of matches that occurred. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>repl</code> is a string, then its value is used for replacement. The character <code>%</code> works as an escape character: any sequence in <code>repl</code> of the form <code>%''d''</code>, with ''d'' between 1 and 9, stands for the value of the ''d''-th captured substring. The sequence <code>%0</code> stands for the whole match, and the sequence <code>%%</code> stands for a single <code>%</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>repl</code> is a table, then the table is queried for every match, using the first capture as the key; if the pattern specifies no captures, then the whole match is used as the key. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>repl</code> is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order; if the pattern specifies no captures, then the whole match is passed as a sole argument. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil, then there is no replacement (that is, the original match is kept in the string). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.gsub|mw.ustring.gsub()]] for a similar function in which the pattern is extended as described in [[#Ustring patterns|Ustring patterns]]. </div> ==== string.len ==== <code style="white-space:nowrap">string.len( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the length of the string, in bytes. Is not confused by ASCII NUL characters. Equivalent to <code style="white-space:nowrap">[[#Length operator|#]]s</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.len|mw.ustring.len()]] for a similar function using Unicode codepoints rather than bytes. </div> ==== string.lower ==== <code style="white-space:nowrap">string.lower( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a copy of this string with all ASCII uppercase letters changed to lowercase. All other characters are left unchanged. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.lower|mw.ustring.lower()]] for a similar function in which all characters with uppercase to lowercase definitions in Unicode are converted. </div> ==== string.match ==== <code style="white-space:nowrap">string.match( s, pattern, init )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Looks for the first match of [[#Patterns|<code>pattern</code>]] in the string. If it finds one, then <code>match</code> returns the captures from the pattern; otherwise it returns nil. If <code>pattern</code> specifies no captures, then the whole match is returned. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A third, optional numerical argument <code>init</code> specifies where to start the search; its default value is 1 and can be negative. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.match|mw.ustring.match()]] for a similar function in which the pattern is extended as described in [[#Ustring patterns|Ustring patterns]] and the <code>init</code> offset is in characters rather than bytes. </div> ==== string.rep ==== <code style="white-space:nowrap">string.rep( s, n )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a string that is the concatenation of <code>n</code> copies of the string <code>s</code>. Identical to [[#mw.ustring.rep|mw.ustring.rep()]]. </div> ==== string.reverse ==== <code style="white-space:nowrap">string.reverse( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a string that is the string <code>s</code> reversed (bytewise). </div> ==== string.sub ==== <code style="white-space:nowrap">string.sub( s, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the substring of <code>s</code> that starts at <code>i</code> and continues until <code>j</code>; <code>i</code> and <code>j</code> can be negative. If <code>j</code> is nil or omitted, it will continue until the end of the string. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In particular, the call <code>string.sub(s,1,j)</code> returns a prefix of <code>s</code> with length <code>j</code>, and <code style="white-space:nowrap">string.sub(s, -i)</code> returns a suffix of <code>s</code> with length <code>i</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.sub|mw.ustring.sub()]] for a similar function in which the offsets are characters rather than bytes. </div> ==== string.ulower ==== <code style="white-space:nowrap">string.ulower( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> An alias for [[#mw.ustring.lower|mw.ustring.lower()]]. </div> ==== string.upper ==== <code style="white-space:nowrap">string.upper( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a copy of this string with all ASCII lowercase letters changed to uppercase. All other characters are left unchanged. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#mw.ustring.upper|mw.ustring.upper()]] for a similar function in which all characters with lowercase to uppercase definitions in Unicode are converted. </div> ==== string.uupper ==== <code style="white-space:nowrap">string.uupper( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> An alias for [[#mw.ustring.upper|mw.ustring.upper()]]. </div> <span id="Patterns"></span> ==== Suchmuster ==== <div lang="en" dir="ltr" class="mw-content-ltr"> Note that Lua's patterns are similar to [[w:regular expression|regular expressions]], but are not identical. In particular, note the following differences from regular expressions and [[w:PCRE|PCRE]]: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The quoting character is percent (<code>%</code>), not backslash (<code>\</code>). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Dot (<code>.</code>) always matches all characters, including newlines. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * No case-insensitive mode. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * No alternation (the <code>|</code> operator). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Quantifiers (<code>*</code>, <code>+</code>, <code>?</code>, and <code>-</code>) may only be applied to individual characters or character classes, not to capture groups. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The only non-greedy quantifier is <code>-</code>, which is equivalent to PCRE's <code>*?</code> quantifier. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * No generalized finite quantifier (e.g. the <code>{''n'',''m''}</code> quantifier in PCRE). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The only zero-width assertions are <code>^</code>, <code>$</code>, and the <code>%f[set]</code> "frontier" pattern; assertions such as PCRE's <code>\b</code> or <code>(?=···)</code> are not present. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Patterns themselves do not recognize character escapes such as <code>\''ddd''</code><!-- balanced quotes intended, I assume 2021-03-06 -->. However, since patterns are [[#string|strings]] these sort of escapes may be used in the string literals used to create the pattern-string. </div> <!-- ** For example, in PCRE the regexp <code>\x65</code> (from a string literal such as <code>"\\x65"</code>) will match the string "hello", because the PCRE engine interprets escaped characters. But in Lua the equivalent pattern <code>\101</code> (from a string literal such as <code>"\\101"</code>) will not match "hello". --> <div lang="en" dir="ltr" class="mw-content-ltr"> Also note that a pattern cannot contain embedded zero bytes (ASCII NUL, <code>"\0"</code>). Use <code>%z</code> instead. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Also see [[#Ustring patterns|Ustring patterns]] for a similar pattern-matching scheme using Unicode characters. </div> <span id="Character_class"></span> ===== Zeichenklassen ===== <div lang="en" dir="ltr" class="mw-content-ltr"> A ''character class'' is used to represent a set of characters. The following combinations are allowed in describing a character class: </div> {| class="wikitable" ! scope="row" | <code>{{var|x}}</code> | <span lang="en" dir="ltr" class="mw-content-ltr">(where <code>{{var|x}}</code> is not one of the magic characters <code>^$()%.[]*+-?</code>) represents the character <code>{{var|x}}</code> itself.</span> |- ! scope="row" | <code>.</code> | <span lang="en" dir="ltr" class="mw-content-ltr">(a dot) Represents all characters.</span> |- ! scope="row" | <code>%a</code> | Repräsentiert alle ASCII-Buchstaben. |- ! scope="row" | <code>%c</code> | Repräsentiert alle ASCII-Kontrollzeichen. |- ! scope="row" | <code>%d</code> | Repräsentiert alle Ziffern. |- ! scope="row" | <code>%l</code> | Repräsentiert alle ASCII-Kleinbuchstaben. |- ! scope="row" | <code>%p</code> | Repräsentiert alle ASCII-Satzzeichen. |- ! scope="row" | <code>%s</code> | Repräsentiert alle ASCII-Leerzeichen. |- ! scope="row" | <code>%u</code> | Repräsentiert alle ASCII-Großbuchstaben. |- ! scope="row" | <code>%w</code> | <span class="mw-translate-fuzzy">Repräsentiert alle ASCII-Alphanumerische Zeichen.</span> |- ! scope="row" | <code>%x</code> | Repräsentiert alle hexadezimale Ziffern. |- ! scope="row" | <code>%z</code> | Repräsentiert ASCII NUL, der null-Byte. |- ! scope="row" | <code>%A</code> | Alle Zeichen, die nicht in <code>%a</code> sind. |- ! scope="row" | <code>%C</code> | Alle Zeichen, die nicht in <code>%c</code> sind. |- ! scope="row" | <code>%D</code> | Alle Zeichen, die nicht in <code>%d</code> sind. |- ! scope="row" | <code>%L</code> | Alle Zeichen, die nicht in <code>%l</code> sind. |- ! scope="row" | <code>%P</code> | Alle Zeichen, die nicht in <code>%p</code> sind. |- ! scope="row" | <code>%S</code> | Alle Zeichen, die nicht in <code>%s</code> sind. |- ! scope="row" | <code>%U</code> | Alle Zeichen, die nicht in <code>%u</code> sind. |- ! scope="row" | <code>%W</code> | Alle Zeichen, die nicht in <code>%w</code> sind. |- ! scope="row" | <code>%X</code> | Alle Zeichen, die nicht in <code>%x</code> sind. |- ! scope="row" | <code>%Z</code> | Alle Zeichen, die nicht in <code>%z</code> sind. |- ! scope="row" | <code>%{{var|y}}</code> | <span lang="en" dir="ltr" class="mw-content-ltr">(where <code>{{var|y}}</code> is any non-alphanumeric character) represents the character <code>{{var|y}}</code>. This is the standard way to escape the magic characters. Any punctuation character (even the non magic) can be preceded by a '<code>%</code>' when used to represent itself in a pattern.</span> |- ! scope="row" | <code>[{{var|set}}]</code> | <span lang="en" dir="ltr" class="mw-content-ltr">Represents the class which is the union of all characters in {{var|set}}. A range of characters can be specified by separating the end characters of the range with a '<code>-</code>'. All classes <code>%{{var|y}}</code> described above can also be used as components in {{var|set}}. All other characters in {{var|set}} represent themselves.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example, <code>[%w_]</code> (or <code>[_%w]</code>) represents all alphanumeric characters plus the underscore, and <code style="white-space:nowrap">[0-7]</code> represents the octal digits. To include literal '<code>-</code>' in the set, use '<code>%-</code>', so <code style="white-space:nowrap">[0-7%l%-]</code> represents the octal digits plus the lowercase letters plus the '<code>-</code>' character.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> The interaction between ranges and classes is not defined. Therefore, patterns like <code>[%a-z]</code> or <code>[a-%%]</code> have no meaning. </div> |- ! scope="row" | <code>[^{{var|set}}]</code> | <span lang="en" dir="ltr" class="mw-content-ltr">Represents the complement of {{var|set}}, where {{var|set}} is interpreted as above.</span> |} <span id="Pattern_items"></span> ===== Suchmuster-Elemente ===== <div lang="en" dir="ltr" class="mw-content-ltr"> A ''pattern item'' can be </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * a single character class, which matches any single character in the class; </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * a single character class followed by '<code>*</code>', which matches 0 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence; </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * a single character class followed by '<code>+</code>', which matches 1 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence; </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * a single character class followed by '<code>-</code>', which also matches 0 or more repetitions of characters in the class. Unlike '<code>*</code>', these repetition items will always match the ''shortest'' possible sequence; </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * a single character class followed by '<code>?</code>', which matches 0 or 1 occurrence of a character in the class; </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>%''n''</code>, for ''n'' between 1 and 9; such item matches a substring equal to the ''n''-th captured string (see below); </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>%b''xy''</code>, where ''x'' and ''y'' are two distinct characters; such item matches strings that start with ''x'', end with ''y'', and where the ''x'' and ''y'' are ''balanced''. This means that, if one reads the string from left to right, counting +1 for an ''x'' and -1 for a ''y'', the ending ''y'' is the first ''y'' where the count reaches 0. For instance, the item <code>%b()</code> matches expressions with balanced parentheses. </div> <!-- This description of frontier patterns is from the Lua 5.2 manual, which is under the same license as the 5.1 manual. --> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>%f[''set'']</code>, a ''frontier pattern''; such item matches an empty string at any position such that the next character belongs to ''set'' and the previous character does not belong to ''set''. The set ''set'' is interpreted as previously described. The beginning and the end of the subject are handled as if they were the character '\0'. </div><br/><small><span lang="en" dir="ltr" class="mw-content-ltr">Note that frontier patterns were present but undocumented in Lua 5.1, and officially added to Lua in 5.2. The implementation in Lua 5.2.1 is unchanged from that in 5.1.0.</span></small> <span id="Pattern"></span> ===== Suchmuster ===== <div lang="en" dir="ltr" class="mw-content-ltr"> A ''pattern'' is a sequence of pattern items. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A <code>^</code> at the beginning of a pattern anchors the match at the beginning of the subject string. </div> <span lang="en" dir="ltr" class="mw-content-ltr">A <code>$</code> at the end of a pattern anchors the match at the end of the subject string. At other positions, <code>^</code> and <code>$</code> have no special meaning and represent themselves.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> ===== Captures ===== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A pattern can contain sub-patterns enclosed in parentheses; they describe ''captures''. When a match succeeds, the substrings of the subject string that match captures are stored ("captured") for future use. Captures are numbered according to their left parentheses. For instance, in the pattern <code>(a*(.)%w(%s*))</code>, the part of the string matching <code>a*(.)%w(%s*)</code> is stored as the first capture (and therefore has number 1); the character matching <code>.</code> is captured with number 2, and the part matching <code>%s*</code> has number 3. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Capture references can appear in the pattern string itself, and refer back to text that was captured earlier in the match. For example, <code>([a-z])%1</code> will match any pair of identical lowercase letters, while <code>([a-z])([a-z])([a-z])[a-z]%3%2%1</code> will match any 7-letter [[w:Palindrome|palindrome]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> As a special case, the empty capture <code>()</code> captures the current string position (a number). For instance, if we apply the pattern <code>"()aa()"</code> on the string <code>"flaaap"</code>, there will be two captures: 3 and 5. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> {{red|Known limitations}}: Unlike [[#Ustring patterns|Ustring library patterns]], String library patterns may not contain more than 32 captures. If the pattern has more, then the String function will throw an error. Because the Ustring library has its own maximum of 10,000 bytes for patterns (unlike the String library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Table library === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Most functions in the table library assume that the table represents a [[#sequence|sequence]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The functions <code>table.foreach()</code>, <code>table.foreachi()</code>, and <code>table.getn()</code> may be available but are deprecated; use a for loop with <code>[[#pairs|pairs()]]</code>, a for loop with <code>[[#ipairs|ipairs()]]</code>, or the [[#Length operator</tvar>|length operator]] <code>#</code>, respectively. The function <code>table.setn()</code> is completely obsolete, however, and will throw an error if used. </div> ==== table.concat ==== <code style="white-space:nowrap">table.concat( table, sep, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Given an array where all elements are strings or numbers, returns <code style="white-space:nowrap">table[i] .. sep .. table[i+1] ··· sep .. table[j]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The default value for <code>sep</code> is an empty string, the default for <code>i</code> is 1, and the default for <code>j</code> is the length of the table. If <code>i</code> is greater than <code>j</code>, it returns an empty string. </div> ==== table.insert ==== <code style="white-space:nowrap">table.insert( table, value )</code> <br/> <code style="white-space:nowrap">table.insert( table, pos, value )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Inserts element <code>value</code> at position <code>pos</code> in <code>table</code>, shifting up other elements to open space, if necessary. The default value for <code>pos</code> is the length of the table plus 1, so that a call <code style="white-space:nowrap">table.insert(t, x)</code> inserts <code>x</code> at the end of table <code>t</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Elements up to <code>#table</code> are shifted; see [[#Length operator|Length operator]] for caveats if the table is not a [[#sequence|sequence]]. </div> <span lang="en" dir="ltr" class="mw-content-ltr">{{red|Note}}: when using the <code>pos</code> parameter, <code>value</code> should not be <code>nil</code>. Attempting to insert an explicit <code>nil</code> value into the middle of a table will result in undefined behaviour, which may delete elements in the table unpredictably.</span> ==== table.maxn ==== <code style="white-space:nowrap">table.maxn( table )</code> Gibt die größte positive numerische Indexnummer des angegebenen Feldausdrucks (table) zurück oder den wert „0“, wenn der Feldausdruck keine positive numerische Indexnummer hat. Dazu durchläuft es den gesamten Feldausdruck. Das entspricht ungefähr: <syntaxhighlight lang="lua"> function table.maxn( table ) local maxn, k = 0, nil repeat k = next( table, k ) if type( k ) == 'number' and k > maxn then maxn = k end until not k return maxn end </syntaxhighlight> ==== table.remove ==== <code style="white-space:nowrap">table.remove( table, pos )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Removes from <code>table</code> the element at position <code>pos</code>, shifting down other elements to close the space, if necessary. Returns the value of the removed element. The default value for <code>pos</code> is the length of the table, so that a call <code style="white-space:nowrap">table.remove( t )</code> removes the last element of table <code>t</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Elements up to <code>#table</code> are shifted; see [[#Length operator|Length operator]] for caveats if the table is not a [[#sequence|sequence]]. </div> ==== table.sort ==== <code style="white-space:nowrap">table.sort( table, comp )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Sorts table elements in a given order, ''in-place'', from <code>table[1]</code> to <code>table[#table]</code>. </div> <span lang="en" dir="ltr" class="mw-content-ltr">If <code>comp</code> is given, then it must be a function that receives two table elements, and returns {{luai|true}} when the first is less than the second (so that <code style="white-space:nowrap">not comp(a[i+1],a[i])</code> will be true after the sort).</span> <span lang="en" dir="ltr" class="mw-content-ltr">If <code>comp</code> is not given, then the standard Lua operator <code><</code> is used instead.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> The sort algorithm is not stable; that is, elements considered equal by the given order may have their relative positions changed by the sort. </div> <span id="Scribunto_libraries"></span> == Scribunto-Bibliotheken == Alle Scribunto-Bibliotheken befinden sich in der Tabelle <code>mw</code>. <div lang="en" dir="ltr" class="mw-content-ltr"> === Base functions === </div> ==== mw.addWarning ==== <code style="white-space:nowrap">mw.addWarning( text )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Adds a warning which is displayed above the preview when previewing an edit. <code>text</code> is parsed as wikitext. </div> ==== mw.allToString ==== <code style="white-space:nowrap">mw.allToString( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Calls [[#tostring|tostring()]] on all arguments, then concatenates them with tabs as separators. </div> ==== mw.clone ==== <code style="white-space:nowrap">mw.clone( value )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Creates a deep copy of a value. All tables (and their metatables) are reconstructed from scratch. Functions are still shared, however. </div> ==== mw.getCurrentFrame ==== <code>mw.getCurrentFrame()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the current [[#frame-object|frame object]], typically the frame object from the most recent <code>#invoke</code>. </div> ==== mw.incrementExpensiveFunctionCount ==== <code>mw.incrementExpensiveFunctionCount()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Adds one to the "expensive parser function" count, and throws an exception if it exceeds the limit (see {{wg|ExpensiveParserFunctionLimit}}). </div> ==== mw.isSubsting ==== <code>mw.isSubsting()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns true if the current <code>#invoke</code> is being [[Special:MyLanguage/Manual:Substitution|substed]], {{luai|false}} otherwise. See [[#Returning text|Returning text]] above for discussion on differences when substing versus not substing. </div> ==== mw.loadData ==== <code style="white-space:nowrap">mw.loadData( module )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Sometimes a module needs large tables of data; for example, a general-purpose module to convert units of measure might need a large table of recognized units and their conversion factors. And sometimes these modules will be used many times in one page. Parsing the large data table for every <code><nowiki>{{#invoke:}}</nowiki></code> can use a significant amount of time. To avoid this issue, <code>mw.loadData()</code> is provided. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> <code>mw.loadData</code> works like <code>[[#require|require()]]</code>, with the following differences: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The loaded module is evaluated only once per page, rather than once per <code><nowiki>{{#invoke:}}</nowiki></code> call. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The loaded module is not recorded in <code>[[#package.loaded|package.loaded]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The value returned from the loaded module must be a table. Other data types are not supported. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The returned table (and all subtables) may contain only booleans, numbers, strings, and other tables. Other data types, particularly functions, are not allowed. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The returned table (and all subtables) may not have a [[#Metatables|metatable]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * All table keys must be booleans, numbers, or strings. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The table actually returned by <code>mw.loadData()</code> has metamethods that provide read-only access to the table returned by the module. Since it does not contain the data directly, <code>[[#pairs|pairs()]]</code> and <code>[[#ipairs|ipairs()]]</code> will work but other methods, including <code>[[#Length operator|#value]]</code>, <code style="white-space:nowrap">[[#next|next()]]</code>, and the functions in the [[#Table library|Table library]], will not work correctly. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The hypothetical unit-conversion module mentioned above might store its code in "Module:Convert" and its data in "Module:Convert/data", and "Module:Convert" would use <code style="white-space:nowrap">local data = mw.loadData( 'Module:Convert/data' )</code> to efficiently load the data. </div> ==== mw.loadJsonData ==== <code style="white-space:nowrap">mw.loadJsonData( page )</code> <!-- description of mw.loadJsonData --> <span lang="en" dir="ltr" class="mw-content-ltr">This is the same as <code>mw.loadData()</code> above, except it loads data from JSON pages rather than Lua tables.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The JSON content must be an array or object.</span> Siehe auch <code>[[#mw.text.jsonDecode|mw.text.jsonDecode()]]</code>. <!-- link of mw.text.jsonDecode --> ==== mw.dumpObject ==== <code style="white-space:nowrap">mw.dumpObject( object )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Serializes <code>object</code> to a human-readable representation, then returns the resulting string. </div> ==== mw.log ==== {{Anchor|print}} <code style="white-space:nowrap">mw.log( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Passes the arguments to [[#mw.allToString|mw.allToString()]], then appends the resulting string to the log buffer. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In the debug console, the function <code>print()</code> is an alias for this function. </div> ==== mw.logObject ==== <code style="white-space:nowrap">mw.logObject( object )</code> <br/> <code style="white-space:nowrap">mw.logObject( object, prefix )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Calls [[#mw.dumpObject|mw.dumpObject()]] and appends the resulting string to the log buffer. If <code>prefix</code> is given, it will be added to the log buffer followed by an equals sign before the serialized string is appended (i.e. the logged text will be "prefix = object-string"). </div> {{anchor|frame-object}} <span id="Frame_object"></span> === Frame-Objekt === Das Frame-Objekt ist die Schnittstelle zu den Parametern, die an <syntaxhighlight lang="text" inline>{{#invoke:}}</syntaxhighlight> übergeben werden, und dem Parser. <div lang="en" dir="ltr" class="mw-content-ltr"> Note that there is no frame library, and there is no global variable named {{luai|frame}}. A frame object is typically obtained by being passed as a parameter to the function called by <syntaxhighlight lang="text" inline>{{#invoke:}}</syntaxhighlight>, and can also be obtained from <code>[[#mw.getCurrentFrame|mw.getCurrentFrame()]]</code>. </div> ==== frame.args ==== Dieser Feldausdruck (table) bildet den Rahmen für den Zugriff auf die an das Modul übergebenen Argumente. Zum Beispiel, wenn ein Modul aus Wikitext aufgerufen wird mit <syntaxhighlight lang="text"> {{#invoke:module|function|arg1|arg2|name=arg3}} </syntaxhighlight> <span lang="en" dir="ltr" class="mw-content-ltr">then {{luai|frame.args[1]}} will return <code>"arg1"</code>, {{luai|frame.args[2]}} will return <code>"arg2"</code>, and {{luai|frame.args['name']}} (or {{luai|frame.args.name}}) will return <code>"arg3"</code>. It is also possible to iterate over arguments using {{luai|pairs( frame.args )}} or {{luai|ipairs( frame.args )}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">However, due to how Lua implements table iterators, iterating over arguments will return them in an unspecified order, and there's no way to know the original order as they appear in wikitext.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that values in this table are always strings; <code>[[#tonumber|tonumber()]]</code> may be used to convert them to numbers, if necessary. Keys, however, are numbers even if explicitly supplied in the invocation: <syntaxhighlight lang="text" inline>{{#invoke:module|function|1|2=2}}</syntaxhighlight> gives string values <code>"1"</code> and <code>"2"</code> indexed by numeric keys <code>1</code> and <code>2</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> As in MediaWiki template invocations, named arguments will have leading and trailing whitespace removed from both the name and the value before they are passed to Lua, whereas unnamed arguments will not have whitespace stripped. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For performance reasons, <code>frame.args</code> uses a metatable, rather than directly containing the arguments. Argument values are requested from MediaWiki on demand. This means that most other table methods will not work correctly, including <code>[[#Length operator|#frame.args]]</code>, <code style="white-space:nowrap">[[#next|next]]( frame.args )</code>, and the functions in the [[#Table library|Table library]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If preprocessor syntax such as template invocations and triple-brace arguments are included within an argument to <code>#invoke</code>, they will not be expanded, after being passed to Lua, until their values are being requested in Lua. If certain special tags written in XML notation, such as {{tag|pre|o}}, {{tag|nowiki|o}}, {{tag|gallery|o}} and {{tag|ref|o}}, are included as arguments to <code>#invoke</code>, then these tags will be converted to "[[strip marker]]s" — special strings which begin with a delete character (ASCII 127), to be replaced with HTML after they are returned from #invoke. </div> ==== frame:callParserFunction ==== {{ubl |{{luai|frame:callParserFunction( name, args )}} |{{luai|frame:callParserFunction( name, ... )}} |<syntaxhighlight lang="lua" inline>frame:callParserFunction{ name = string, args = table }</syntaxhighlight> }} <div lang="en" dir="ltr" class="mw-content-ltr"> : ''Note the use of [[#named arguments|named arguments]].'' </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Call a [[Special:MyLanguage/Help:Magic words#Parser functions|parser function]], returning an appropriate string. This is preferable to <code>frame:preprocess</code>, but whenever possible, native Lua functions or Scribunto library functions should be preferred to this interface. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The following calls are approximately equivalent to the indicated wikitext: </div> <syntaxhighlight lang="lua"> -- {{ns:0}} frame:callParserFunction( 'ns', { 0 } ) frame:callParserFunction( 'ns', 0 ) frame:callParserFunction{ name = 'ns', args = { 0 } } -- {{#tag:nowiki|some text}} frame:callParserFunction( '#tag', { 'nowiki', 'some text' } ) frame:callParserFunction( '#tag', 'nowiki', 'some text' ) frame:callParserFunction( '#tag:nowiki', 'some text' ) frame:callParserFunction{ name = '#tag', args = { 'nowiki', 'some text' } } -- {{#tag:ref|some text|name=foo|group=bar}} frame:callParserFunction( '#tag', { 'ref', 'some text', name = 'foo', group = 'bar' } ) </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that, as with [[#frame:expandTemplate|frame:expandTemplate()]], the function name and arguments are not preprocessed before being passed to the parser function. </div> ==== frame:expandTemplate ==== <syntaxhighlight lang="lua" inline>frame:expandTemplate{ title = title, args = table }</syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> : ''Note the use of [[#named arguments|named arguments]].'' </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This is equivalent to a call to [[#frame:callParserFunction|frame:callParserFunction()]] with function name {{luai|'msg'}} (see [[Special:MyLanguage/Help:Magic words#Transclusion modifiers|Help:Magic words#Transclusion modifiers]]) and with {{luai|title}} prepended to {{luai|args}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This is transclusion. The call: </div> <syntaxhighlight lang="lua"> frame:expandTemplate{ title = 'template', args = { 'arg1', 'arg2', name = 'arg3' } } </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> does roughly the same thing from Lua that <syntaxhighlight lang="text" inline>{{template|arg1|arg2|name=arg3}}</syntaxhighlight> does in wikitext. As in transclusion, if the passed title does not contain a namespace prefix it will be assumed to be in the Template: namespace. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that the title and arguments are not preprocessed before being passed into the template: </div> <syntaxhighlight lang="lua"> -- This is roughly equivalent to wikitext like {{template|{{!}}}} frame:expandTemplate{ title = 'template', args = { '|' } } frame:callParserFunction{ 'msg', { 'template', '|' } } -- This is roughly equivalent to wikitext like {{template|{{((}}!{{))}}}} frame:expandTemplate{ title = 'template', args = { '{{!}}' } } frame:callParserFunction{ 'msg', { 'template', '{{!}}' } } </syntaxhighlight> ==== frame:extensionTag ==== {{ubl |{{luai|frame:extensionTag( name, content, args )}} |<syntaxhighlight lang="lua" inline>frame:extensionTag{ name = string, content = string, args = table_or_string }</syntaxhighlight> }} <div lang="en" dir="ltr" class="mw-content-ltr"> This is equivalent to a call to [[#frame:callParserFunction|frame:callParserFunction()]] with function name {{luai|'#tag'}} (see [[Special:MyLanguage/Help:Magic_words#Miscellaneous|Help:Magic_words#Miscellaneous]]) and with {{luai|name}} and {{luai|content}} prepended to {{luai|args}}. </div> <syntaxhighlight lang="lua"> -- Diese sind gleichwertig frame:extensionTag( 'ref', 'some text', { name = 'foo', group = 'bar' } ) frame:extensionTag{ name = 'ref', content = 'some text', args = { name = 'foo', group = 'bar' } } frame:callParserFunction( '#tag', { 'ref' , 'some text', name = 'foo', group = 'bar' } ) -- Diese sind gleichwertig frame:extensionTag{ name = 'ref', content = 'some text', args = { 'some other text' } } frame:callParserFunction( '#tag', { 'ref', 'some text', 'some other text' } ) </syntaxhighlight> ==== frame:getParent ==== {{luai|frame:getParent()}} <div lang="en" dir="ltr" class="mw-content-ltr"> Called on the frame created by <syntaxhighlight lang="text" inline>{{#invoke:}}</syntaxhighlight>, returns the frame for the page that called <syntaxhighlight lang="text" inline>{{#invoke:}}</syntaxhighlight>. Called on that frame, returns nil. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For instance, if the template <syntaxhighlight lang="text" inline>{{Example}}</syntaxhighlight> contains the code <syntaxhighlight lang="text" inline>{{#invoke:ModuleName|FunctionName|A|B}}</syntaxhighlight>, and a page transcludes that template with the code <syntaxhighlight lang="text" inline>{{Example|C|D}}</syntaxhighlight>, then in ''Module:ModuleName'', calling <code>frame.args[1]</code> and <code>frame.args[2]</code> returns <code>"A"</code> and <code>"B"</code>, and calling <code>frame:getParent().args[1]</code> and <code>frame:getParent().args[2]</code> returns <code>"C"</code> and <code>"D"</code>, with <code>frame</code> being the first argument in the function call. </div> ==== frame:getTitle ==== {{luai|frame:getTitle()}} <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the title associated with the frame as a string. For the frame created by <syntaxhighlight lang="text" inline>{{#invoke:}}</syntaxhighlight>, this is the title of the module invoked. </div> ==== frame:newChild ==== <syntaxhighlight lang="lua" inline>frame:newChild{ title = title, args = table }</syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> : ''Note the use of [[#named arguments|named arguments]].'' </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Create a new [[#frame-object|Frame object]] that is a child of the current frame, with optional arguments and title. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This is mainly intended for use in modules that call other modules whose name is defined by the caller (e.g. <code>{{[[w:Module:Params|#invoke:params]]|[[w:Module:Params#concat_and_invoke|concat_and_invoke]]}}</code>), or in the debug console for testing functions that would normally be called by <syntaxhighlight lang="text" inline>{{#invoke:}}</syntaxhighlight>. The number of frames that may be created at any one time is limited. </div> ==== frame:preprocess ==== {{ubl |{{luai|frame:preprocess( string )}} |<syntaxhighlight lang="lua" inline>frame:preprocess{ text = string }</syntaxhighlight> }} <div lang="en" dir="ltr" class="mw-content-ltr"> This expands wikitext in the context of the frame, i.e. templates, parser functions, and parameters such as <syntaxhighlight lang="text" inline>{{{1}}}</syntaxhighlight> are expanded, and returns the expanded text. Certain special tags written in XML-style notation, such as {{tag|pre|o}}, {{tag|nowiki|o}}, {{tag|gallery|o}} and {{tag|ref|o}}, will be replaced with "[[Special:MyLanguage/strip marker|strip markers]]" — special strings which begin with a delete character (ASCII 127), to be replaced with HTML after they are returned from <code>#invoke</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If you are expanding a single template, use <code>[[#frame:expandTemplate|frame:expandTemplate]]</code> instead of trying to construct a wikitext string to pass to this method. It's faster and less prone to error if the arguments contain pipe characters or other wikimarkup. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If you are expanding a single parser function, use <code>[[#frame:callParserFunction|frame:callParserFunction]]</code> for the same reasons. </div> ==== frame:getArgument ==== {{ubl |{{luai|frame:getArgument( arg )}} |<syntaxhighlight lang="lua" inline>frame:getArgument{ name = arg }</syntaxhighlight> }} <div lang="en" dir="ltr" class="mw-content-ltr"> Gets an object for the specified argument, or nil if the argument is not provided. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The returned object has one method, <code>object:expand()</code>, that returns the expanded wikitext for the argument. </div> ==== frame:newParserValue ==== {{ubl |{{luai|frame:newParserValue( text )}} |<syntaxhighlight lang="lua" inline>frame:newParserValue{ text = text }</syntaxhighlight> }} <div lang="en" dir="ltr" class="mw-content-ltr"> Returns an object with one method, <code>object:expand()</code>, that returns the result of <code style="white-space:nowrap">[[#frame:preprocess|frame:preprocess]]( text )</code>. </div> ==== frame:newTemplateParserValue ==== <syntaxhighlight lang="lua" inline>frame:newTemplateParserValue{ title = title, args = table }</syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> : ''Note the use of [[#named arguments|named arguments]].'' </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns an object with one method, <code>object:expand()</code>, that returns the result of <code>[[#frame:expandTemplate|frame:expandTemplate]]</code> called with the given arguments. </div> ==== frame:argumentPairs ==== {{luai|frame:argumentPairs()}} <div lang="en" dir="ltr" class="mw-content-ltr"> Same as {{luai|pairs( frame.args )}}. Included for backwards compatibility. </div> <span id="Hash_library"></span> == Hash-Bibliothek == ==== mw.hash.hashValue ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">mw.hash.hashValue( algo, value )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Hashes a string value with the specified algorithm. Valid algorithms may be fetched using [[#mw.hash.listAlgorithms|mw.hash.listAlgorithms()]]. </div> ==== mw.hash.listAlgorithms ==== <code style="white-space:nowrap">mw.hash.listAlgorithms()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a list of supported hashing algorithms, for use in [[#mw.hash.hashValue|mw.hash.hashValue()]]. </div> <span id="HTML_library"></span> === HTML-Bibliothek === <div lang="en" dir="ltr" class="mw-content-ltr"> <code>mw.html</code> is a fluent interface for building complex HTML from Lua. On many Wikimedia wikis this was formerly implemented in <code>Module:HtmlBuilder</code>. A mw.html object can be created using <code>[[#mw.html.create|mw.html.create]]</code>. </div> {{anchor|mw.html-object}} <div lang="en" dir="ltr" class="mw-content-ltr"> Functions documented as <code>mw.html.<var>name</var></code> are available on the global <code>mw.html</code> table; functions documented as <code>mw.html:<var>name</var></code> and <code>html:<var>name</var></code> are methods of an mw.html object (see <code>[[#mw.html.create|mw.html.create]]</code>). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A basic example could look like this: </div> <syntaxhighlight lang="lua"> local div = mw.html.create( 'div' ) div :attr( 'id', 'testdiv' ) :css( 'width', '100%' ) :wikitext( 'Some text' ) :tag( 'hr' ) return tostring( div ) -- Output: <div id="testdiv" style="width:100%;">Some text<hr /></div> </syntaxhighlight> ==== mw.html.create ==== <code style="white-space:nowrap">mw.html.create( tagName, args )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Creates a new mw.html object containing a <code>tagName</code> html element. You can also pass an empty string or nil as <code>tagName</code> in order to create an empty mw.html object. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> <code>args</code> can be a table with the following keys: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>args.selfClosing</code>: Force the current tag to be self-closing, even if mw.html doesn't recognize it as self-closing * <code>args.parent</code>: Parent of the current mw.html instance (intended for internal usage) </div> ==== mw.html:node ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:node( builder )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Appends a child mw.html (<code>builder</code>) node to the current mw.html instance. If a nil parameter is passed, this is a no-op. A (<code>builder</code>) node is a string representation of an html element. </div> ==== mw.html:wikitext ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:wikitext( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Appends an undetermined number of wikitext strings to the mw.html object. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that this stops at the first ''nil'' item. </div> <span lang="en" dir="ltr" class="mw-content-ltr">Basic wikitext will get parsed, like HTML, links, bold, lists or tables. However, templates and parser functions won't be evaluated if they are passed directly to this function, unless they came from template parameters.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Those will be rendered in plain text instead.</span> <span lang="en" dir="ltr" class="mw-content-ltr">To evaluate them, they'll have to be passed through [[#frame:preprocess|frame:preprocess]].</span> ==== mw.html:newline ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:newline()</code> <span lang="en" dir="ltr" class="mw-content-ltr">Appends a newline to the mw.html object.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Useful when used before and after [[#mw.html:wikitext|mw.html:wikitext()]], when the wikitext contains lists or tables, whose syntax only has a special meaning when present at the start of a line.</span> ==== mw.html:tag ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:tag( tagName, args )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Appends a new child node with the given <code>tagName</code> to the builder, and returns a mw.html instance representing that new node. The <code>args</code> parameter is identical to that of <code>[[#mw.html.create|mw.html.create]]</code> </div> <span lang="en" dir="ltr" class="mw-content-ltr">Note that contrarily to other methods such as <code>[[#mw.html:node|html:node()]]</code>, this method doesn't return the current mw.html instance, but the mw.html instance of the newly inserted tag.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Make sure to use [[#mw.html:done|<code>html:done()</code>]] to go up to the parent mw.html instance, or [[#mw.html:allDone|<code>html:allDone()</code>]] if you have nested tags on several levels.</span> ==== mw.html:attr ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:attr( name, value )</code> <br/> <code style="white-space:nowrap">[[#mw.html-object|html]]:attr( table )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Set an HTML attribute with the given <code>name</code> and <code>value</code> on the node. Alternatively a table holding name->value pairs of attributes to set can be passed. In the first form, a value of nil causes any attribute with the given name to be unset if it was previously set. </div> ==== mw.html:getAttr ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:getAttr( name )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Get the value of a html attribute previously set using [[#mw.html:attr|<code>html:attr()</code>]] with the given <code>name</code>. </div> ==== mw.html:addClass ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:addClass( class )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Adds a class name to the node's class attribute. If a nil parameter is passed, this is a no-op. </div> ==== mw.html:css ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:css( name, value )</code> <br/> <code style="white-space:nowrap">[[#mw.html-object|html]]:css( table )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Set a CSS property with the given <code>name</code> and <code>value</code> on the node. Alternatively a table holding name->value pairs of properties to set can be passed. In the first form, a value of nil causes any property with the given name to be unset if it was previously set. </div> ==== mw.html:cssText ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:cssText( css )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Add some raw <code>css</code> to the node's style attribute. If a nil parameter is passed, this is a no-op. </div> ==== mw.html:done ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:done()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the parent node under which the current node was created. Like jQuery.end, this is a convenience function to allow the construction of several child nodes to be chained together into a single statement. </div> ==== mw.html:allDone ==== <code style="white-space:nowrap">[[#mw.html-object|html]]:allDone()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Like [[#mw.html:done|<code>html:done()</code>]], but traverses all the way to the root node of the tree and returns it. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Language library === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Language codes are described at [[Special:MyLanguage/Language code|language code]]. Many of MediaWiki's language codes are similar to [[w:IETF language tag|IETF language tags]], but not all MediaWiki language codes are valid IETF tags or vice versa. </div> {{anchor|mw.language-object}} <div lang="en" dir="ltr" class="mw-content-ltr"> Functions documented as <code>mw.language.<var>name</var></code> are available on the global <code>mw.language</code> table; functions documented as <code>mw.language:<var>name</var></code> and <code>lang:<var>name</var></code> are methods of a language object (see [[#mw.language.new|<code>mw.language.new</code>]] or [[#mw.language.getContentLanguage|<code>mw.language.getContentLanguage</code>]]). </div> ==== mw.language.fetchLanguageName ==== <code style="white-space:nowrap">mw.language.fetchLanguageName( code, inLanguage )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> The full name of the language for the given language code: native name (language autonym) by default, name translated in target language if a value is given for <var>inLanguage</var>. </div> ==== mw.language.fetchLanguageNames ==== <code style="white-space:nowrap">mw.language.fetchLanguageNames()</code> <br/> <code style="white-space:nowrap">mw.language.fetchLanguageNames( inLanguage )</code> <br/> <code style="white-space:nowrap">mw.language.fetchLanguageNames( inLanguage, include )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Fetch the list of languages known to MediaWiki, returning a table mapping language code to language name. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> By default the name returned is the language autonym; passing a language code for <var>inLanguage</var> returns all names in that language. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> By default, only language names known to MediaWiki are returned; passing <code>'all'</code> for <var>include</var> will return all available languages (from {{ll|Extension:CLDR}}), while passing <code>'mwfile'</code> will include only languages having customized messages included with MediaWiki core or enabled extensions. To explicitly select the default, <code>'mw'</code> may be passed. </div> ==== mw.language.getContentLanguage ==== <code>mw.language.getContentLanguage()</code> <br/> <code>mw.getContentLanguage()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a new language object for the wiki's default content language. </div> ==== mw.language.getFallbacksFor ==== [[File:MediaWiki fallback chains.svg|thumb|<span lang="en" dir="ltr" class="mw-content-ltr">Fallback chains</span>]] <code style="white-space:nowrap">mw.language.getFallbacksFor( code )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a list of MediaWiki's fallback language codes for the specified code. </div> ==== mw.language.isKnownLanguageTag ==== <code style="white-space:nowrap">mw.language.isKnownLanguageTag( code )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns {{luai|true}} if a language code is known to MediaWiki. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A language code is "known" if it is a "valid built-in code" (i.e. it returns {{luai|true}} for [[#mw.language.isValidBuiltInCode|<code>mw.language.isValidBuiltInCode</code>]]) and returns a non-empty string for [[#mw.language.fetchLanguageName|<code>mw.language.fetchLanguageName</code>]]. </div> ==== mw.language.isSupportedLanguage ==== <code style="white-space:nowrap">mw.language.isSupportedLanguage( code )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Checks whether any localisation is available for that language code in MediaWiki. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A language code is "supported" if it is a "valid" code (returns {{luai|true}} for [[#mw.language.isValidCode|<code>mw.language.isValidCode</code>]]), contains no uppercase letters, and has a message file in the currently-running version of MediaWiki. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> It is possible for a language code to be "supported" but not "known" (i.e. returning {{luai|true}} for [[#mw.language.isKnownLanguageTag|<code>mw.language.isKnownLanguageTag</code>]]). Also note that certain codes are "supported" despite [[#mw.language.isValidBuiltInCode|<code>mw.language.isValidBuiltInCode</code>]] returning {{luai|false}}. </div> ==== mw.language.isValidBuiltInCode ==== <code style="white-space:nowrap">mw.language.isValidBuiltInCode( code )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns {{luai|true}} if a language code is of a valid form for the purposes of internal customisation of MediaWiki. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The code may not actually correspond to any known language. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A language code is a "valid built-in code" if it is a "valid" code (i.e. it returns {{luai|true}} for [[#mw.language.isValidCode|<code>mw.language.isValidCode</code>]]); consists of only ASCII letters, numbers, and hyphens; and is at least two characters long. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that some codes are "supported" (i.e. returning {{luai|true}} from [[#mw.language.isSupportedLanguage|<code>mw.language.isSupportedLanguage</code>]]) even though this function returns {{luai|false}}. </div> ==== mw.language.isValidCode ==== <code style="white-space:nowrap">mw.language.isValidCode( code )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns {{luai|true}} if a language code string is of a valid form, whether or not it exists. This includes codes which are used solely for customisation via the MediaWiki namespace. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The code may not actually correspond to any known language. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A language code is valid if it does not contain certain unsafe characters (colons, single- or double-quotes, slashs, backslashs, angle brackets, ampersands, or ASCII NULs) and is otherwise allowed in a page title. </div> ==== mw.language.new ==== <code style="white-space:nowrap">mw.language.new( code )</code> <br/> <code style="white-space:nowrap">mw.getLanguage( code )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Creates a new language object. Language objects do not have any publicly accessible properties, but they do have several methods, which are documented below. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> There is a limit of 200 on the number of distinct language codes that may be used on a page. Exceeding this limit will result in errors. </div> ==== mw.language:getCode ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:getCode()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the language code for this language object. </div> ==== mw.language:toBcp47Code ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:toBcp47Code()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the standard [[w:IETF language tag|BCP-47]] language code for this language object. This is the code string which is appropriate to use in HTML, for example as the value of a <code>lang</code> attribute. </div> ==== mw.language:getFallbackLanguages ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:getFallbackLanguages()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a list of MediaWiki's fallback language codes for this language object. Equivalent to <code style="white-space:nowrap">mw.language.getFallbacksFor( lang:getCode() )</code>. </div> ==== mw.language:isRTL ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:isRTL()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns {{luai|true}} if the language is written right-to-left, {{luai|false}} if it is written left-to-right. </div> ==== mw.language:lc ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:lc( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the string to lowercase, honoring any special rules for the given language. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> When the [[#Ustring library|Ustring library]] is loaded, the [[#mw.ustring.lower|mw.ustring.lower()]] function is implemented as a call to <code style="white-space:nowrap">mw.language.getContentLanguage():lc( s )</code>. </div> ==== mw.language:lcfirst ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:lcfirst( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the first character of the string to lowercase, as with [[#mw.language:lc|<code>lang:lc()</code>]]. </div> ==== mw.language:uc ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:uc( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the string to uppercase, honoring any special rules for the given language. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> When the [[#Ustring library|Ustring library]] is loaded, the [[#mw.ustring.upper|<code>mw.ustring.upper()</code>]] function is implemented as a call to <code style="white-space:nowrap">mw.language.getContentLanguage():uc( s )</code>. </div> ==== mw.language:ucfirst ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:ucfirst( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the first character of the string to uppercase, as with [[#mw.language:uc|lang:uc()]]. </div> ==== mw.language:caseFold ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:caseFold( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the string to a representation appropriate for case-insensitive comparison. Note that the result may not make any sense when displayed. </div> ==== mw.language:formatNum ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:formatNum( n )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:formatNum( n, options )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Formats a number with grouping and decimal separators appropriate for the given language. Given 123456.78, this may produce "123,456.78", "123.456,78", or even something like "١٢٣٬٤٥٦٫٧٨" depending on the language and wiki configuration. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The <code>options</code> is a table of options, which can be: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>noCommafy</code>: Set {{luai|true}} to omit grouping separators and use a dot (<code>.</code>) as the decimal separator. </div> <span lang="en" dir="ltr" class="mw-content-ltr">Digit transformation may still occur, which may include transforming the decimal separator.</span> ==== mw.language:formatDate ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:formatDate( format, timestamp, local )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Formats a date according to the given format string. If <code>timestamp</code> is omitted, the default is the current time. The value for <code>local</code> must be a boolean or nil; if {{luai|true}}, the time is formatted in the [[Special:MyLanguage/Manual:$wgLocaltimezone|wiki's local time]] rather than in UTC. </div> <span lang="en" dir="ltr" class="mw-content-ltr">The format string and supported values for <code>timestamp</code> are identical to those for the [[Special:MyLanguage/Help:Extension:ParserFunctions#.23time|#time parser function]] from {{ll|Extension:ParserFunctions}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note however that backslashes may need to be doubled in a Lua string literal, since Lua also uses backslash as an escape character while wikitext does not:</span> <syntaxhighlight lang="lua"> -- This string literal contains a newline, not the two characters "\n", so it is not equivalent to {{#time:\n}}. lang:formatDate( '\n' ) -- This is equivalent to {{#time:\n}}, not {{#time:\\n}}. lang:formatDate( '\\n' ) -- This is equivalent to {{#time:\\n}}, not {{#time:\\\\n}}. lang:formatDate( '\\\\n' ) </syntaxhighlight> ==== mw.language:formatDuration ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:formatDuration( seconds )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:formatDuration( seconds, chosenIntervals )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Breaks a duration in seconds into more human-readable units, e.g. 12345 to 3 hours, 25 minutes and 45 seconds, returning the result as a string. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> <code>chosenIntervals</code>, if given, is a table with values naming the interval units to use in the response. These include '<code>millennia</code>', '<code>centuries</code>', '<code>decades</code>', '<code>years</code>', '<code>weeks</code>', '<code>days</code>', '<code>hours</code>', '<code>minutes</code>', and '<code>seconds</code>'. </div> ==== mw.language:parseFormattedNumber ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:parseFormattedNumber( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This takes a number as formatted by [[#mw.language:formatNum|lang:formatNum()]] and returns the actual number. In other words, this is basically a language-aware version of [[#tonumber|<code>tonumber()</code>]]. </div> ==== mw.language:convertPlural ==== {{Anchor|mw.language:plural}} <code style="white-space:nowrap">[[#mw.language-object|lang]]:convertPlural( n, ... )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:convertPlural( n, forms )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:plural( n, ... )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:plural( n, forms )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> This chooses the appropriate grammatical form from <code>forms</code> (which must be a [[#sequence|sequence]] table) or <code>...</code> based on the number <code>n</code>. For example, in English you might use <code style="white-space:nowrap">n .. ' ' .. lang:plural( n, 'sock', 'socks' )</code> or <code style="white-space:nowrap">n .. ' ' .. lang:plural( n, { 'sock', 'socks' } )</code> to generate grammatically-correct text whether there is only 1 sock or 200 socks. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The necessary values for the sequence are language-dependent, see [[Special:MyLanguage/Help:Magic words#Localization|localization of magic words]] and [[translatewiki:Special:MyLanguage/FAQ#PLURAL|translatewiki's FAQ on PLURAL]] for some details. </div> ==== mw.language:convertGrammar ==== {{Anchor|mw.language:grammar}} <code style="white-space:nowrap">[[#mw.language-object|lang]]:convertGrammar( word, case )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:grammar( case, word )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> : ''Note the different parameter order between the two aliases. <code>convertGrammar</code> matches the order of the method of the same name on MediaWiki's Language object, while <code>grammar</code> matches the order of the parser function of the same name, documented at [[Special:MyLanguage/Help:Magic words#Localisation|Help:Magic words#Localisation]].'' </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This chooses the appropriate inflected form of <code>word</code> for the given inflection code <code>case</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The possible values for <code>word</code> and <code>case</code> are language-dependent, see [[Special:MyLanguage/Help:Magic words#Localisation]] and [[translatewiki:Special:MyLanguage/Grammar|translatewiki:Grammar]] for some details. </div> ==== mw.language:gender ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:gender( what, masculine, feminine, neutral )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:gender( what, { masculine, feminine, neutral } )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Chooses the string corresponding to the gender of <code>what</code>, which may be "male", "female", or a registered user name. </div> ==== mw.language:getArrow ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:getArrow( direction )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a Unicode arrow character corresponding to <code>direction</code>: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''forwards''': Either "→" or "←" depending on the directionality of the language. * '''backwards''': Either "←" or "→" depending on the directionality of the language. * '''left''': "←" * '''right''': "→" * '''up''': "↑" * '''down''': "↓" </div> ==== mw.language:getDir ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:getDir()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns "ltr" or "rtl", depending on the directionality of the language. </div> ==== mw.language:getDirMark ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:getDirMark( opposite )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a string containing either U+200E (the left-to-right mark) or U+200F (the right-to-left mark), depending on the directionality of the language and whether <code>opposite</code> is a true or false value. </div> ==== mw.language:getDirMarkEntity ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:getDirMarkEntity( opposite )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns "&lrm;" or "&rlm;", depending on the directionality of the language and whether <code>opposite</code> is a true or false value. </div> ==== mw.language:getDurationIntervals ==== <code style="white-space:nowrap">[[#mw.language-object|lang]]:getDurationIntervals( seconds )</code> <br/> <code style="white-space:nowrap">[[#mw.language-object|lang]]:getDurationIntervals( seconds, chosenIntervals )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Breaks a duration in seconds into more human-readable units, e.g. 12345 to 3 hours, 25 minutes and 45 seconds, returning the result as a table mapping unit names to numbers. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> <code>chosenIntervals</code>, if given, is a table with values naming the interval units to use in the response. These include '<code>millennia</code>', '<code>centuries</code>', '<code>decades</code>', '<code>years</code>', '<code>weeks</code>', '<code>days</code>', '<code>hours</code>', '<code>minutes</code>', and '<code>seconds</code>'. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Those unit keywords are also the keys used in the response table. Only units with a non-zero value are set in the response, unless the response would be empty in which case the smallest unit is returned with a value of 0. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Message library === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This library is an interface to the localisation messages and the MediaWiki: namespace. </div> {{anchor|mw.message-object}} <div lang="en" dir="ltr" class="mw-content-ltr"> Functions documented as <code>mw.message.<var>name</var></code> are available on the global <code>mw.message</code> table; functions documented as <code>mw.message:<var>name</var></code> and <code>msg:<var>name</var></code> are methods of a message object (see [[#mw.message.new|<code>mw.message.new</code>]]). </div> ==== mw.message.new ==== <code style="white-space:nowrap">mw.message.new( key, ... )</code> <span lang="en" dir="ltr" class="mw-content-ltr">Creates a new message object for the given message <code>key</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The remaining parameters are passed to the new object's <code>[[#mw.message:params|params()]]</code> method.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> The message object has no properties, but has several methods documented below. </div> ==== mw.message.newFallbackSequence ==== <code style="white-space:nowrap">mw.message.newFallbackSequence( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Creates a new message object for the given messages (the first one that exists will be used). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The message object has no properties, but has several methods documented below. </div> ==== mw.message.newRawMessage ==== <code style="white-space:nowrap">mw.message.newRawMessage( msg, ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Creates a new message object, using the given text directly rather than looking up an internationalized message. The remaining parameters are passed to the new object's <code>[[#mw.message:params|params()]]</code> method. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The message object has no properties, but has several methods documented below. </div> ==== mw.message.rawParam ==== <code style="white-space:nowrap">mw.message.rawParam( value )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Wraps the value so that it will not be parsed as wikitext by <code>[[#mw.message:parse|msg:parse()]]</code>. </div> ==== mw.message.numParam ==== <code style="white-space:nowrap">mw.message.numParam( value )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Wraps the value so that it will automatically be formatted as by <code>[[#mw.language:formatNum|lang:formatNum()]]</code>. Note this does not depend on the [[#Language library|Language library]] actually being available. </div> ==== mw.message.getDefaultLanguage ==== <code style="white-space:nowrap">mw.message.getDefaultLanguage()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a Language object for the default language. </div> ==== mw.message:params ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:params( ... )</code> <br/> <code style="white-space:nowrap">[[#mw.message-object|msg]]:params( params )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Add parameters to the message, which may be passed as individual arguments or as a [[#sequence|sequence]] table. Parameters must be numbers, strings, or the special values returned by [[#mw.message.numParam|mw.message.numParam()]] or [[#mw.message.rawParam|mw.message.rawParam()]]. If a sequence table is used, parameters must be directly present in the table; references using the [[#Metatables|__index metamethod]] will not work. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the <code>msg</code> object, to allow for call chaining. </div> ==== mw.message:rawParams ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:rawParams( ... )</code> <br/> <code style="white-space:nowrap">[[#mw.message-object|msg]]:rawParams( params )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Like [[#mw.message:params|:params()]], but has the effect of passing all the parameters through [[#mw.message.rawParam|mw.message.rawParam()]] first. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the <code>msg</code> object, to allow for call chaining. </div> ==== mw.message:numParams ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:numParams( ... )</code> <br/> <code style="white-space:nowrap">[[#mw.message-object|msg]]:numParams( params )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Like [[#mw.message:params|:params()]], but has the effect of passing all the parameters through [[#mw.message.numParam|mw.message.numParam()]] first. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the <code>msg</code> object, to allow for call chaining. </div> ==== mw.message:inLanguage ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:inLanguage( lang )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Specifies the language to use when processing the message. <code>lang</code> may be a string or a table with a <code>getCode()</code> method (i.e. a [[#Language library|Language object]]). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The default language is the one returned by <code>[[#mw.message.getDefaultLanguage|mw.message.getDefaultLanguage()]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the <code>msg</code> object, to allow for call chaining. </div> ==== mw.message:useDatabase ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:useDatabase( bool )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Specifies whether to look up messages in the MediaWiki: namespace (i.e. look in the database), or just use the default messages distributed with MediaWiki. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The default is {{luai|true}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the <code>msg</code> object, to allow for call chaining. </div> ==== mw.message:plain ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:plain()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Substitutes the parameters and returns the message wikitext as-is. Template calls and parser functions are intact. </div> ==== mw.message:exists ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:exists()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a boolean indicating whether the message key exists. </div> ==== mw.message:isBlank ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:isBlank()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a boolean indicating whether the message key has content. Returns {{luai|true}} if the message key does not exist or the message is the empty string. </div> ==== mw.message:isDisabled ==== <code style="white-space:nowrap">[[#mw.message-object|msg]]:isDisabled()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a boolean indicating whether the message key is disabled. Returns {{luai|true}} if the message key does not exist or if the message is the empty string or the string "-". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Site library === </div> ==== mw.site.currentVersion ==== <div lang="en" dir="ltr" class="mw-content-ltr"> A string holding the current version of MediaWiki. </div> ==== mw.site.scriptPath ==== Der Wert von {{wg|ScriptPath}}. ==== mw.site.server ==== Der Wert von {{wg|Server}}. ==== mw.site.siteName ==== Der Wert von {{wg|Sitename}}. ==== mw.site.stylePath ==== Der Wert von {{wg|StylePath}}. ==== mw.site.namespaces ==== <div lang="en" dir="ltr" class="mw-content-ltr"> Table holding data for all namespaces, indexed by number. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The data available is: </div> * '''id''': <span lang="en" dir="ltr" class="mw-content-ltr">Namespace number.</span> * '''name''': <span lang="en" dir="ltr" class="mw-content-ltr">Local namespace name.</span> * '''canonicalName''': <span lang="en" dir="ltr" class="mw-content-ltr">Canonical namespace name.</span> * '''displayName''': <span lang="en" dir="ltr" class="mw-content-ltr">Set on namespace 0, the name to be used for display (since the name is often the empty string).</span> * '''hasSubpages''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether subpages are enabled for the namespace.</span> * '''hasGenderDistinction''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether the namespace has different aliases for different genders.</span> * '''isCapitalized''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether the first letter of pages in the namespace is capitalized.</span> * '''isContent''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether this is a content namespace.</span> * '''isIncludable''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether pages in the namespace can be transcluded.</span> * '''isMovable''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether pages in the namespace can be moved.</span> * '''isSubject''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether this is a subject namespace.</span> * '''isTalk''': <span lang="en" dir="ltr" class="mw-content-ltr">Whether this is a talk namespace.</span> * '''defaultContentModel''': <span lang="en" dir="ltr" class="mw-content-ltr">The default content model for the namespace, as a string.</span> * '''aliases''': <span lang="en" dir="ltr" class="mw-content-ltr">List of aliases for the namespace.</span> * '''subject''': <span lang="en" dir="ltr" class="mw-content-ltr">Reference to the corresponding subject namespace's data.</span> * '''talk''': <span lang="en" dir="ltr" class="mw-content-ltr">Reference to the corresponding talk namespace's data.</span> * '''associated''': <div lang="en" dir="ltr" class="mw-content-ltr"> Reference to the associated namespace's data. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A metatable is also set that allows for looking up namespaces by name (localized or canonical). For example, both <code>mw.site.namespaces[4]</code> and <code>mw.site.namespaces.Project</code> will return information about the Project namespace. </div> ==== mw.site.contentNamespaces ==== <div lang="en" dir="ltr" class="mw-content-ltr"> Table holding just the content namespaces, indexed by number. See [[#mw.site.namespaces|mw.site.namespaces]] for details. </div> ==== mw.site.subjectNamespaces ==== <div lang="en" dir="ltr" class="mw-content-ltr"> Table holding just the subject namespaces, indexed by number. See [[#mw.site.namespaces|mw.site.namespaces]] for details. </div> ==== mw.site.talkNamespaces ==== <div lang="en" dir="ltr" class="mw-content-ltr"> Table holding just the talk namespaces, indexed by number. See [[#mw.site.namespaces|mw.site.namespaces]] for details. </div> ==== mw.site.stats ==== <div lang="en" dir="ltr" class="mw-content-ltr"> Table holding site statistics. Available statistics are: </div> * '''pages''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of pages in the wiki.</span> * '''articles''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of articles in the wiki.</span> * '''files''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of files in the wiki.</span> * '''edits''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of edits in the wiki.</span> * '''users''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of users in the wiki.</span> * '''activeUsers''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of active users in the wiki.</span> * '''admins''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of users in group 'sysop' in the wiki.</span> ==== mw.site.stats.pagesInCategory ==== <code style="white-space:nowrap">mw.site.stats.pagesInCategory( <span lang="en" dir="ltr" class="mw-content-ltr">category, which</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> : {{red|This function is [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive]]}} </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Gets statistics about the category. If <code>which</code> has the special value "<code>*</code>", the result is a table with the following properties: </div> * '''all''': <span lang="en" dir="ltr" class="mw-content-ltr">Total pages, files, and subcategories.</span> * '''subcats''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of subcategories.</span> * '''files''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of files.</span> * '''pages''': <span lang="en" dir="ltr" class="mw-content-ltr">Number of pages.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>which</code> is one of the above keys ("all", "subcats", "files", "pages"), the result is a number with the corresponding value. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Each new category queried will increment the expensive function count. </div> ==== mw.site.stats.pagesInNamespace ==== <code style="white-space:nowrap">mw.site.stats.pagesInNamespace( <span lang="en" dir="ltr" class="mw-content-ltr">namespace</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number of pages in the given namespace (specify by number). </div> ==== mw.site.stats.usersInGroup ==== <code style="white-space:nowrap">mw.site.stats.usersInGroup( <span lang="en" dir="ltr" class="mw-content-ltr">group</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number of users in the given group. </div> ==== mw.site.interwikiMap ==== <code style="white-space:nowrap">mw.site.interwikiMap( <span lang="en" dir="ltr" class="mw-content-ltr">filter</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a table holding data about available [[Special:MyLanguage/Manual:Interwiki|interwiki]] prefixes. If <code>filter</code> is the string "local", then only data for local interwiki prefixes is returned. If <code>filter</code> is the string "!local", then only data for non-local prefixes is returned. If no filter is specified, data for all prefixes is returned. A "local" prefix in this context is one that is for the same project. For example, on the English Wikipedia, other-language Wikipedias are considered local, while Wiktionary and such are not. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Keys in the table returned by this function are interwiki prefixes, and the values are subtables with the following properties: </div> * '''prefix''' - <span lang="en" dir="ltr" class="mw-content-ltr">the interwiki prefix.</span> * '''url''' - <span lang="en" dir="ltr" class="mw-content-ltr">the URL that the interwiki points to. The page name is represented by the parameter $1.</span> * '''isProtocolRelative''' - <span lang="en" dir="ltr" class="mw-content-ltr">a boolean showing whether the URL is [[w:Protocol-relative URL|protocol-relative]].</span> * '''isLocal''' - <span lang="en" dir="ltr" class="mw-content-ltr">whether the URL is for a site in the current project.</span> * '''isCurrentWiki''' - <span lang="en" dir="ltr" class="mw-content-ltr">whether the URL is for the current wiki.</span> * '''isTranscludable''' - <span lang="en" dir="ltr" class="mw-content-ltr">whether pages using this interwiki prefix are [[Transclusion|transcludable]]. This requires [[Special:MyLanguage/Manual:$wgEnableScaryTranscluding|scary transclusion]], which is disabled on Wikimedia wikis.</span> * '''isExtraLanguageLink''' - <span lang="en" dir="ltr" class="mw-content-ltr">whether the interwiki is listed in {{wg|ExtraInterlanguageLinkPrefixes}}.</span> * '''displayText''' - <span lang="en" dir="ltr" class="mw-content-ltr">for links listed in $wgExtraInterlanguageLinkPrefixes, this is the display text shown for the interlanguage link. Nil if not specified.</span> * '''tooltip''' - <div lang="en" dir="ltr" class="mw-content-ltr"> for links listed in $wgExtraInterlanguageLinkPrefixes, this is the tooltip text shown when users hover over the interlanguage link. Nil if not specified. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Text library === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The text library provides some common text processing functions missing from the [[#String library|String library]] and the [[#Ustring library|Ustring library]]. These functions are safe for use with UTF-8 strings. </div> ==== mw.text.decode ==== <code style="white-space:nowrap">mw.text.decode( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <br/> <code style="white-space:nowrap">mw.text.decode( <span lang="en" dir="ltr" class="mw-content-ltr">string, decodeNamedEntities</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Replaces [[w:HTML entities|HTML entities]] in the string with the corresponding characters. </div> <span lang="en" dir="ltr" class="mw-content-ltr">If boolean <code>decodeNamedEntities</code> is omitted or false, the only named entities recognized are <code>&lt;</code> (<), <code>&gt;</code> (>), <code>&amp;</code> (&), <code>&quot;</code> (") and <code>&nbsp;</code> (the non-breaking space, U+00A0).</span> <span lang="en" dir="ltr" class="mw-content-ltr">Otherwise, the list of HTML5 named entities to recognize is loaded from PHP's [https://php.net/get_html_translation_table <code>get_html_translation_table</code>] function.</span> <span lang="en" dir="ltr" class="mw-content-ltr">{{red|Known bugs}}: Approximately 600 of around {{formatnum:2200}} named entities in the HTML5 standard do not get decoded, even when <code>decodeNamedEntities</code> is used; this includes approximately 40 of around 250 entities which are also included in HTML4.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This occurs because PHP's <code>get_html_translation_table</code> function returns only one mapping for each character, so for example {{code|lang=text|inline=1|→}} is not decoded since PHP returns only {{code|lang=text|inline=1|→}} as the mapping for {{code|lang=text|inline=1|→}}.</span> ==== mw.text.encode ==== <code style="white-space:nowrap">mw.text.encode( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <br/> <code style="white-space:nowrap">mw.text.encode( <span lang="en" dir="ltr" class="mw-content-ltr">string, charset</span> )</code> <span lang="en" dir="ltr" class="mw-content-ltr">Replaces characters in a string with [[w:HTML entities|HTML entities]].</span> <span lang="en" dir="ltr" class="mw-content-ltr">Five characters are replaced with the appropriate named entities: <code><</code>, <code>></code>, <code>&</code>, <code>"</code> and the non-breaking space (U+00A0).</span> <span lang="en" dir="ltr" class="mw-content-ltr">All others are replaced with numeric entities.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>charset</code> is supplied, it should be a string as appropriate to go inside brackets in a [[#Ustring patterns|Ustring pattern]], i.e. the "set" in <code>[set]</code>. The default charset contains six characters: <code><</code>, <code>></code>, <code>&</code>, <code>"</code>, <code>'</code> and the non-breaking space (U+00A0). </div> ==== mw.text.jsonDecode ==== <code style="white-space:nowrap">mw.text.jsonDecode( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <br/> <code style="white-space:nowrap">mw.text.jsonDecode( <span lang="en" dir="ltr" class="mw-content-ltr">string, flags</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Decodes a JSON string. <code>flags</code> is 0 or a combination (use <code>+</code>) of the flags <code>mw.text.JSON_PRESERVE_KEYS</code> and <code>mw.text.JSON_TRY_FIXING</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Normally JSON's zero-based arrays are renumbered to Lua one-based sequence tables; to prevent this, pass <code>mw.text.JSON_PRESERVE_KEYS</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> To relax certain requirements in JSON, such as no terminal comma in arrays or objects, pass <code>mw.text.JSON_TRY_FIXING</code>. This is not recommended. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Limitations: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Decoded JSON arrays may not be Lua sequences if the array contains null values. * JSON objects will drop keys having null values. * It is not possible to directly tell whether the input was a JSON array or a JSON object with sequential integer keys. * A JSON object having sequential integer keys beginning with 1 will decode to the same table structure as a JSON array with the same values, despite these not being at all equivalent, unless <code>mw.text.JSON_PRESERVE_KEYS</code> is used. </div> ==== mw.text.jsonEncode ==== <code style="white-space:nowrap">mw.text.jsonEncode( <span lang="en" dir="ltr" class="mw-content-ltr">value</span> )</code> <br/> <code style="white-space:nowrap">mw.text.jsonEncode( <span lang="en" dir="ltr" class="mw-content-ltr">value, flags</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Encode a JSON string. Errors are raised if the passed value cannot be encoded in JSON. <code>flags</code> is 0 or a combination (use <code>+</code>) of the flags <code>mw.text.JSON_PRESERVE_KEYS</code> and <code>mw.text.JSON_PRETTY</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Normally Lua one-based sequence tables are encoded as JSON zero-based arrays; when <code>mw.text.JSON_PRESERVE_KEYS</code> is set in <code>flags</code>, zero-based sequence tables are encoded as JSON arrays. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Limitations: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Empty tables are always encoded as empty arrays (<code>[]</code>), not empty objects (<code>{}</code>). * Sequence tables cannot be encoded as JSON objects without adding a "dummy" element. * To produce objects or arrays with nil values, a tricky implementation of the <code>__pairs</code> metamethod is required. * A Lua table having sequential integer keys beginning with 0 will encode as a JSON array, the same as a Lua table having integer keys beginning with 1, unless <code>mw.text.JSON_PRESERVE_KEYS</code> is used. * When both a number and the string representation of that number are used as keys in the same table, behavior is unspecified. </div> ==== mw.text.killMarkers ==== <code style="white-space:nowrap">mw.text.killMarkers( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Removes all MediaWiki [[strip marker|strip marker]]s from a string. </div> ==== mw.text.listToText ==== <code style="white-space:nowrap">mw.text.listToText( <span lang="en" dir="ltr" class="mw-content-ltr">list</span> )</code> <br/> <code style="white-space:nowrap">mw.text.listToText( <span lang="en" dir="ltr" class="mw-content-ltr">list, separator, conjunction</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Joins a list, prose-style. In other words, it's like <code>[[#table.concat|table.concat()]]</code> but with a different separator before the final item. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The default separator is taken from [[MediaWiki:comma-separator]] in the wiki's content language, and the default conjunction is [[MediaWiki:and]] concatenated with [[MediaWiki:word-separator]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Examples, using the default values for the messages: </div> <syntaxhighlight lang="lua"> -- Returns the empty string mw.text.listToText( {} ) -- Gibt "1" aus: mw.text.listToText( { 1 } ) -- Returns "1 and 2" mw.text.listToText( { 1, 2 } ) -- Returns "1, 2, 3, 4 and 5" mw.text.listToText( { 1, 2, 3, 4, 5 } ) -- Returns "1; 2; 3; 4 or 5" mw.text.listToText( { 1, 2, 3, 4, 5 }, '; ', ' or ' ) </syntaxhighlight> ==== mw.text.nowiki ==== <code style="white-space:nowrap">mw.text.nowiki( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Replaces various characters in the string with [[w:HTML entities|HTML entities]] to prevent their interpretation as wikitext. This includes: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The following characters: <code>"</code>, <code>&</code>, <code>'</code>, <code><</code>, <code>=</code>, <code>></code>, <code>[</code>, <code>]</code>, <code>{</code>, <code>|</code>, <code>}</code> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The following characters at the start of the string or immediately after a newline: <code>#</code>, <code>*</code>, <code>:</code>, <code>;</code>, space, tab (<code>\t</code>) </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Blank lines will have one of the associated newline or carriage return characters escaped </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>----</code> at the start of the string or immediately after a newline will have the first <code>-</code> escaped </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>__</code> will have one underscore escaped </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * <code>://</code> will have the colon escaped </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * A whitespace character following <code>ISBN</code>, <code>RFC</code>, or <code>PMID</code> will be escaped </div> ==== mw.text.split ==== <code style="white-space:nowrap">mw.text.split( <span lang="en" dir="ltr" class="mw-content-ltr">string, pattern, plain</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Splits the string into substrings at boundaries matching the [[#Ustring patterns|Ustring pattern]] <code>pattern</code>. If <code>plain</code> is specified and {{luai|true}}, <code>pattern</code> will be interpreted as a literal string rather than as a Lua pattern (just as with the parameter of the same name for <code>[[#mw.ustring.find|mw.ustring.find()]]</code>). Returns a table containing the substrings. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For example, <code style="white-space:nowrap">mw.text.split( 'a b\tc\nd', '%s' )</code> would return a table <code style="white-space:nowrap">{ 'a', 'b', 'c', 'd' }</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>pattern</code> matches the empty string, <code>string</code> will be split into individual characters. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following: </div> <syntaxhighlight lang="lua"> function split(text, pattern, plain) local ret = {} local s, l = 1, string.len( text ) while s do local e, n = string.find( text, pattern, s, plain ) if not e then ret[#ret+1] = string.sub ( text, s ) s = nil elseif n < e then -- Empty separator! ret[#ret+1] = string.sub ( text, s, e ) if e < l then s = e + 1 else s = nil end else ret[#ret+1] = e > s and string.sub( text, s, e - 1 ) or '' s = n + 1 end end return ret end </syntaxhighlight> ==== mw.text.gsplit ==== <code style="white-space:nowrap">mw.text.gsplit( <span lang="en" dir="ltr" class="mw-content-ltr">string, pattern, plain</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns an [[#iterators|iterator function]] that will iterate over the substrings that would be returned by the equivalent call to <code>[[#mw.text.split|mw.text.split()]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following: </div> <syntaxhighlight lang="lua"> function gsplit( text, pattern, plain ) local s, l = 1, string.len( text ) return function () if s then local e, n = string.find( text, pattern, s, plain ) local ret if not e then ret = string.sub( text, s ) s = nil elseif n < e then -- Empty separator! ret = string.sub( text, s, e ) if e < l then s = e + 1 else s = nil end else ret = e > s and string.sub( text, s, e - 1 ) or '' s = n + 1 end return ret end end, nil, nil end </syntaxhighlight> ==== mw.text.tag ==== <code style="white-space:nowrap">mw.text.tag( <span lang="en" dir="ltr" class="mw-content-ltr">name, attrs, content</span> )</code> <br/> <code style="white-space:nowrap">mw.text.tag{ <span lang="en" dir="ltr" class="mw-content-ltr">name = string, attrs = table, content = string|false</span> }</code> <div lang="en" dir="ltr" class="mw-content-ltr"> : ''Note the use of [[#named arguments|named arguments]].'' </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Generates an HTML-style tag for <code>name</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>attrs</code> is given, it must be a table with string keys. String and number values are used as the value of the attribute; boolean {{luai|true}} results in the key being output as an HTML5 valueless parameter; boolean {{luai|false}} skips the key entirely; and anything else is an error. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>content</code> is not given (or is nil), only the opening tag is returned. If <code>content</code> is boolean {{luai|false}}, a self-closed tag is returned. Otherwise it must be a string or number, in which case that content is enclosed in the constructed opening and closing tag. Note the content is not automatically HTML-encoded; use [[#mw.text.encode|mw.text.encode()]] if needed. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For properly returning extension tags such as {{tag|ref|open}}, use [[#frame:extensionTag|frame:extensionTag()]] instead. </div> ==== mw.text.trim ==== <code style="white-space:nowrap">mw.text.trim( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <br/> <code style="white-space:nowrap">mw.text.trim( <span lang="en" dir="ltr" class="mw-content-ltr">string, charset</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Remove whitespace or other characters from the beginning and end of a string. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>charset</code> is supplied, it should be a string as appropriate to go inside brackets in a [[#Ustring patterns|Ustring pattern]], i.e. the "set" in <code>[set]</code>. The default charset is ASCII whitespace, <code>%s</code>, which is equivalent to <code style="white-space:nowrap">"\t\r\n\f\v "</code>. </div> ==== mw.text.truncate ==== <code style="white-space:nowrap">mw.text.truncate( <span lang="en" dir="ltr" class="mw-content-ltr">text, length</span> )</code> <br/> <code style="white-space:nowrap">mw.text.truncate( <span lang="en" dir="ltr" class="mw-content-ltr">text, length, ellipsis</span> )</code> <br/> <code style="white-space:nowrap">mw.text.truncate( <span lang="en" dir="ltr" class="mw-content-ltr">text, length, ellipsis, adjustLength</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Truncates <code>text</code> to the specified length in code points, adding <code>ellipsis</code> if truncation was performed. If length is positive, the end of the string will be truncated; if negative, the beginning will be removed. If <code>adjustLength</code> is given and {{luai|true}}, the resulting string including ellipsis will not be longer than the specified length. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The default value for <code>ellipsis</code> is taken from [[MediaWiki:ellipsis]] in the wiki's content language. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Examples, using the default "..." ellipsis: </div> <syntaxhighlight lang="lua"> -- Returns "foobarbaz" mw.text.truncate( "foobarbaz", 9 ) -- Returns "fooba..." mw.text.truncate( "foobarbaz", 5 ) -- Returns "...arbaz" mw.text.truncate( "foobarbaz", -5 ) -- Returns "foo..." mw.text.truncate( "foobarbaz", 6, nil, true ) -- Returns "foobarbaz", because that's shorter than "foobarba..." mw.text.truncate( "foobarbaz", 8 ) </syntaxhighlight> ==== mw.text.unstripNoWiki ==== <code style="white-space:nowrap">mw.text.unstripNoWiki( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Replaces MediaWiki <nowiki> [[strip marker|strip marker]]s with the corresponding text. Other types of strip markers are not changed. </div> ==== mw.text.unstrip ==== <code style="white-space:nowrap">mw.text.unstrip( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Equivalent to <code style="white-space:nowrap">mw.text.killMarkers( mw.text.unstripNoWiki( string ) )</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This no longer reveals the HTML behind special page transclusion, <ref> tags, and so on as it did in earlier versions of Scribunto. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Title library === </div> ==== mw.title.equals ==== <code style="white-space:nowrap">mw.title.equals( a, b )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Test for whether two titles are equal. Note that fragments are ignored in the comparison. </div> ==== mw.title.compare ==== <code style="white-space:nowrap">mw.title.compare( a, b )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns -1, 0, or 1 to indicate whether the title <code>a</code> is less than, equal to, or greater than title <code>b</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This compares titles by interwiki prefix (if any) as strings, then by namespace number, then by the unprefixed title text as a string. These string comparisons use Lua's standard <code><</code> operator. </div> ==== mw.title.getCurrentTitle ==== <code style="white-space:nowrap">mw.title.getCurrentTitle()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the title object for the current page. </div> ==== mw.title.new ==== <code style="white-space:nowrap">mw.title.new( <span lang="en" dir="ltr" class="mw-content-ltr">text, namespace</span> )</code> <br/> <code style="white-space:nowrap">mw.title.new( ID )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> : {{red|This function is [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive]] when called with an ID}} </div> <span lang="en" dir="ltr" class="mw-content-ltr">Creates a new title object.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> If a number <code>ID</code> is given, an object is created for the title with that page_id. The title referenced will be counted as linked from the current page. If the page_id does not exist, returns nil. The expensive function count will be incremented if the title object created is not for a title that has already been loaded. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If a string <code>text</code> is given instead, an object is created for that title (even if the page does not exist). If the text string does not specify a namespace, <code>namespace</code> (which may be any key found in <code>[[#mw.site.namespaces|mw.site.namespaces]]</code>) will be used. If the text is not a valid title, nil is returned. </div> ==== mw.title.makeTitle ==== <code style="white-space:nowrap">mw.title.makeTitle( <span lang="en" dir="ltr" class="mw-content-ltr">namespace, title, fragment, interwiki</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Creates a title object with title <code>title</code> in namespace <code>namespace</code>, optionally with the specified <code>fragment</code> and <code>interwiki</code> prefix. <code>namespace</code> may be any key found in <code>[[#mw.site.namespaces|mw.site.namespaces]]</code>. If the resulting title is not valid, returns nil. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that, unlike <code>[[#mw.title.new|mw.title.new()]]</code>, this method will always apply the specified namespace. For example, <code style="white-space:nowrap">mw.title.makeTitle( 'Template', 'Module:Foo' )</code> will create an object for the page Template:Module:Foo, while <code style="white-space:nowrap">mw.title.new( 'Module:Foo', 'Template' )</code> will create an object for the page Module:Foo. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note also that functionality for interwiki titles is limited to <code>interwiki</code> / <code>isExternal</code> / <code>isLocal</code> and URL-related methods; other methods might not behave as expected. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Title objects ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A title object has a number of properties and methods. Most of the properties are read-only. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that fields ending with <code>text</code> return titles as string values whereas the fields ending with <code>title</code> return title objects. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''id''': The page_id. <code>0</code> if the page does not exist. </div> {{red|1=<span lang="en" dir="ltr" class="mw-content-ltr">This [[#Expensive properties|may be expensive]]</span>}}. <div lang="en" dir="ltr" class="mw-content-ltr"> * '''interwiki''': The interwiki prefix, or the empty string if none. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''namespace''': The namespace number. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''fragment''': The fragment (aka section/anchor linking), or the empty string. May be assigned. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''nsText''': The text of the namespace for the page. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''subjectNsText''': The text of the subject namespace for the page. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''talkNsText''': The text of the talk namespace for the page, or <code>nil</code> if this title cannot have a talk page. <small>(added in MediaWiki 1.42.0-wmf.15, refs [[phab:T180911|T180911]])</small> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''text''': The title of the page, without the namespace or interwiki prefixes. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''prefixedText''': The title of the page, with the namespace and interwiki prefixes. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''fullText''': The title of the page, with the namespace and interwiki prefixes and the fragment. Interwiki is not returned if equal to the current. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''rootText''': If this is a subpage, the title of the root page without prefixes. Otherwise, the same as <code>title.text</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''baseText''': If this is a subpage, the title of the page it is a subpage of without prefixes. Otherwise, the same as <code>title.text</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''subpageText''': If this is a subpage, just the subpage name. Otherwise, the same as <code>title.text</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''canTalk''': Whether the page for this title could have a talk page. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''exists''': Whether the page exists. Alias for <code>file.exists</code> for Media-namespace titles. For File-namespace titles this checks the existence of the file description page, not the file itself. {{red|This [[#Expensive properties|may be expensive]]}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''file''', '''fileExists''': See [[#File metadata|#File metadata]] below. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''isContentPage''': Whether this title is in a content namespace. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''isExternal''': Whether this title has an interwiki prefix. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''isLocal''': Whether this title is in this project. For example, on the English Wikipedia, any other Wikipedia is considered "local" while Wiktionary and such are not. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''isRedirect''': Whether this is the title for a page that is a redirect. {{red|This [[#Expensive properties|may be expensive]]}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''isSpecialPage''': Whether this is the title for a possible special page (i.e. a page in the Special: namespace). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''isSubpage''': Whether this title is a subpage of some other title. </div> * '''isTalkPage''': Ob dies ein Titel für eine Diskussionsseite ist. <div lang="en" dir="ltr" class="mw-content-ltr"> * '''isSubpageOf( title2 )''': Whether this title is a subpage of the given title. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''inNamespace( ns )''': Whether this title is in the given namespace. Namespaces may be specified by anything that is a key found in <code>[[#mw.site.namespaces|mw.site.namespaces]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''inNamespaces( ... )''': Whether this title is in any of the given namespaces. Namespaces may be specified by anything that is a key found in <code>[[#mw.site.namespaces|mw.site.namespaces]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''hasSubjectNamespace( ns )''': Whether this title's subject namespace is in the given namespace. Namespaces may be specified by anything that is a key found in <code>[[#mw.site.namespaces|mw.site.namespaces]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''contentModel''': The content model for this title, as a string. {{red|This [[#Expensive properties|may be expensive]]}}. </div> <includeonly><div lang="en" dir="ltr" class="mw-content-ltr"> * '''pageLang''': The page language for this title, as a language object similar to the default returned from <code>[[#mw.language.getContentLanguage|mw.language.getContentLanguage]]</code> but specific to this page. {{red|This [[#Expensive properties|may be expensive]]}}. </div></includeonly> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''basePageTitle''': The same as <code style="white-space:nowrap">mw.title.makeTitle( title.namespace, title.baseText )</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''rootPageTitle''': The same as <code style="white-space:nowrap">mw.title.makeTitle( title.namespace, title.rootText )</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''talkPageTitle''': The same as <code style="white-space:nowrap">mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text )</code>, or <code>nil</code> if this title cannot have a talk page. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''subjectPageTitle''': The same as <code style="white-space:nowrap">mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text )</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''redirectTarget:''' Returns a title object of the target of the redirect page if the page is a redirect and the page exists, returns {{luai|false}} otherwise. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''protectionLevels''': The page's protection levels. This is a table with keys corresponding to each action (e.g., <code>"edit"</code> and <code>"move"</code>). The table values are arrays, the first item of which is a string containing the protection level. If the page is unprotected, either the table values or the array items will be <code>nil</code>. {{red|This is [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive]]}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''cascadingProtection''': The cascading protections applicable to the page. This is a table with keys <code>"restrictions"</code> (itself a table with keys like <code>protectionLevels</code> has) and <code>"sources"</code> (an array listing titles where the protections cascade from). If no protections cascade to the page, <code>"restrictions"</code> and <code>"sources"</code> will be empty. {{red|This is [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive]]}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''categories''': ''(since v1.43.0-wmf.18)'' The list of categories used on the page. {{red|This is [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive]]}} * '''subPageTitle( text )''': The same as <code style="white-space:nowrap">mw.title.makeTitle( title.namespace, title.text .. '/' .. <var>text</var> )</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''partialUrl()''': Returns <code>title.text</code> encoded as it would be in a URL. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''fullUrl( query, proto )''': Returns the full URL (with optional query table/string) for this title. <var>proto</var> may be specified to control the scheme of the resulting url: <code>"http"</code>, <code>"https"</code>, <code>"relative"</code> (the default), or <code>"canonical"</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''localUrl( query )''': Returns the local URL (with optional query table/string) for this title. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''canonicalUrl( query )''': Returns the canonical URL (with optional query table/string) for this title. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''content''' or '''getContent()''': Returns the (unparsed) content of the page, or <code>nil</code> if there is no page. The page will be recorded as a transclusion. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''pageLang''': A [[#Language library|language object]] for the title's [[Special:MyLanguage/Manual:Language#Page content language|page content language]], which defaults to the wiki's content language. {{red|This is [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive]]}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Title objects may be compared using [[#Relational operators|relational operators]]. <code style="white-space:nowrap">[[#tostring|tostring]]( title )</code> will return <code>title.prefixedText</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that accessing any [[#Expensive properties|expensive]] field on a title object records a "link" to the page (as shown on [[Special:WhatLinksHere]], for example). Using the title object's <code>getContent()</code> method or accessing the <code>redirectTarget</code> field records it as <code>file</code> or <code>fileExists</code> fields records it as a "{{int|isimage}}". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ===== File metadata ===== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Title objects representing a page in the File or Media namespace will have a property called <code>file</code>. {{red|This is [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive]].}} This is a table, structured as follows: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''exists''': Whether the file exists. It will be recorded as an image usage. The <code>fileExists</code> property on a Title object exists for backwards compatibility reasons and is an alias for this property. If this is {{luai|false}}, all other file properties will be <code>nil</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''width''': The width of the file. If the file contains multiple pages, this is the width of the first page. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''height''': The height of the file. If the file contains multiple pages, this is the height of the first page. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''pages''': If the file format supports multiple pages, this is a table containing tables for each page of the file; otherwise, it is <code>nil</code>. The [[#Length operator|# operator]] can be used to get the number of pages in the file. Each individual page table contains a width and height property. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''size''': The size of the file in bytes. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''mimeType''': The [[w:MIME type|MIME type]] of the file. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''length''': The length (duration) of the media file in seconds. Zero for media types which do not support length. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ===== Expensive properties ===== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The properties <code>id</code>, <code>isRedirect</code>, <code>exists</code>, and <code>contentModel</code> require fetching data about the title from the database. For this reason, the [[Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit|expensive function count]] is incremented the first time one of them is accessed for a page other than the current page. Subsequent accesses of any of these properties for that page will not increment the expensive function count again. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Other properties marked as expensive will always increment the expensive function count the first time they are accessed for a page other than the current page. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === URI library === </div> ==== mw.uri.encode ==== <code style="white-space:nowrap">mw.uri.encode( <span lang="en" dir="ltr" class="mw-content-ltr">string, enctype</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> [[w:Percent-encoding|Percent-encodes]] the string. The default type, <code>"QUERY"</code>, encodes spaces using '+' for use in query strings; <code>"PATH"</code> encodes spaces as %20; and <code>"WIKI"</code> encodes spaces as '_'. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that the "WIKI" format is not entirely reversible, as both spaces and underscores are encoded as '_'. </div> ==== mw.uri.decode ==== <code style="white-space:nowrap">mw.uri.decode( <span lang="en" dir="ltr" class="mw-content-ltr">string, enctype</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> [[w:Percent-encoding|Percent-decodes]] the string. The default type, <code>"QUERY"</code>, decodes '+' to space; <code>"PATH"</code> does not perform any extra decoding; and <code>"WIKI"</code> decodes '_' to space. </div> ==== mw.uri.anchorEncode ==== <code style="white-space:nowrap">mw.uri.anchorEncode( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Encodes a string for use in a MediaWiki URI fragment. </div> ==== mw.uri.buildQueryString ==== <code style="white-space:nowrap">mw.uri.buildQueryString( <span lang="en" dir="ltr" class="mw-content-ltr">table</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Encodes a table as a URI query string. Keys should be strings; values may be strings or numbers, sequence tables, or boolean false. </div> ==== mw.uri.parseQueryString ==== <code style="white-space:nowrap">mw.uri.parseQueryString( s, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Decodes the query string <code>s</code> to a table. Keys in the string without values will have a value of {{luai|false}}; keys repeated multiple times will have sequence tables as values; and others will have strings as values. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The optional numerical arguments <code>i</code> and <code>j</code> can be used to specify a substring of <code>s</code> to be parsed, rather than the entire string. <code>i</code> is the position of the first character of the substring, and defaults to 1. <code>j</code> is the position of the last character of the substring, and defaults to the length of the string. Both <code>i</code> and <code>j</code> can be negative, as in [[#string.sub|string.sub]]. </div> ==== mw.uri.canonicalUrl ==== <code style="white-space:nowrap">mw.uri.canonicalUrl( <span lang="en" dir="ltr" class="mw-content-ltr">page, query</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a [[#URI object|URI object]] for the [[Special:MyLanguage/Help:Magic words#URL data|canonical URL]] for a page, with optional query string/table. </div> ==== mw.uri.fullUrl ==== <code style="white-space:nowrap">mw.uri.fullUrl( <span lang="en" dir="ltr" class="mw-content-ltr">page, query</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a [[#URI object|URI object]] for the [[Special:MyLanguage/Help:Magic words#URL data|full URL]] for a page, with optional query string/table. </div> ==== mw.uri.localUrl ==== <code style="white-space:nowrap">mw.uri.localUrl( <span lang="en" dir="ltr" class="mw-content-ltr">page, query</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns a [[#URI object|URI object]] for the [[Special:MyLanguage/Help:Magic words#URL data|local URL]] for a page, with optional query string/table. </div> ==== mw.uri.new ==== <code style="white-space:nowrap">mw.uri.new( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Constructs a new [[#URI object|URI object]] for the passed string or table. See the description of URI objects for the possible fields for the table. </div> ==== mw.uri.validate ==== <code style="white-space:nowrap">mw.uri.validate( <span lang="en" dir="ltr" class="mw-content-ltr">table</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Validates the passed table (or URI object). Returns a boolean indicating whether the table was valid, and on failure a string explaining what problems were found. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== URI object ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The URI object has the following fields, some or all of which may be nil: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''protocol''': String protocol/scheme * '''user''': String user * '''password''': String password * '''host''': String host name * '''port''': Integer port * '''path''': String path * '''query''': A table, as from [[#mw.uri.parseQueryString|mw.uri.parseQueryString]] * '''fragment''': String fragment. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The following properties are also available: * '''userInfo''': String user and password * '''hostPort''': String host and port * '''authority''': String user, password, host, and port * '''queryString''': String version of the query table * '''relativePath''': String path, query string, and fragment </div> <div lang="en" dir="ltr" class="mw-content-ltr"> [[#tostring|<code>tostring()</code>]] will give the URI string. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Methods of the URI object are: </div> ===== mw.uri:parse ===== <code style="white-space:nowrap">uri:parse( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Parses a string into the current URI object. Any fields specified in the string will be replaced in the current object; fields not specified will keep their old values. </div> ===== mw.uri:clone ===== <code>uri:clone()</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Makes a copy of the URI object. </div> ===== mw.uri:extend ===== <code style="white-space:nowrap">uri:extend( <span lang="en" dir="ltr" class="mw-content-ltr">parameters</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Merges the parameters table into the object's query table. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Ustring library === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The ustring library is intended to be a direct reimplementation of the standard [[#String library|String library]], except that the methods operate on characters in UTF-8 encoded strings rather than bytes. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Most functions will raise an error if the string is not valid UTF-8; exceptions are noted. </div> ==== mw.ustring.maxPatternLength ==== <div lang="en" dir="ltr" class="mw-content-ltr"> The maximum allowed length of a pattern, in bytes. </div> ==== mw.ustring.maxStringLength ==== <div lang="en" dir="ltr" class="mw-content-ltr"> The maximum allowed length of a string, in bytes. </div> ==== mw.ustring.byte ==== <code style="white-space:nowrap">mw.ustring.byte( s, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns individual bytes; identical to [[#string.byte|string.byte()]]. </div> ==== mw.ustring.byteoffset ==== <code style="white-space:nowrap">mw.ustring.byteoffset( s, l, i )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the byte offset of a character in the string. The default for both <code>l</code> and <code>i</code> is 1. <code>i</code> may be negative, in which case it counts from the end of the string. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The character at <code>l</code> == 1 is the first character starting at or after byte <code>i</code>; the character at <code>l</code> == 0 is the first character starting at or before byte <code>i</code>. Note this may be the same character. Greater or lesser values of <code>l</code> are calculated relative to these. </div> ==== mw.ustring.char ==== <code style="white-space:nowrap">mw.ustring.char( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.char|string.char()]], except that the integers are Unicode codepoints rather than byte values. </div> <syntaxhighlight lang="lua"> local value = mw.ustring.char( 0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x21 ) -- Wert ist nun 'Привет!' </syntaxhighlight> ==== mw.ustring.codepoint ==== <code style="white-space:nowrap">mw.ustring.codepoint( s, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.byte|string.byte()]], except that the return values are codepoints and the offsets are characters rather than bytes. </div> ==== mw.ustring.find ==== <code style="white-space:nowrap">mw.ustring.find( s, pattern, init, plain )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.find|string.find()]], except that the pattern is extended as described in [[#Ustring patterns|Ustring patterns]] and the <code>init</code> offset is in characters rather than bytes. </div> ==== mw.ustring.format ==== <code style="white-space:nowrap">mw.ustring.format( <span lang="en" dir="ltr" class="mw-content-ltr">format</span>, ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Identical to [[#string.format|string.format()]]. Widths and precisions for strings are expressed in bytes, not codepoints. </div> ==== mw.ustring.gcodepoint ==== <code style="white-space:nowrap">mw.ustring.gcodepoint( s, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns three values for iterating over the codepoints in the string. <code>i</code> defaults to 1, and <code>j</code> to -1. This is intended for use in the [[#iterators|iterator form of <code>for</code>]]: </div> <syntaxhighlight lang="lua"> for codepoint in mw.ustring.gcodepoint( s ) do -- block end </syntaxhighlight> ==== mw.ustring.gmatch ==== <code style="white-space:nowrap">mw.ustring.gmatch( s, pattern )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.gmatch|string.gmatch()]], except that the pattern is extended as described in [[#Ustring patterns|Ustring patterns]]. </div> {{red|Known bug}} - <span lang="en" dir="ltr" class="mw-content-ltr">When used with a pattern which can match the empty string, the function will get stuck in an infinite loop. For example, the following loop never terminates:</span> <syntaxhighlight lang="lua"> for capture in mw.ustring.gmatch( "foo bar", ".*" ) do -- block end </syntaxhighlight> ==== mw.ustring.gsub ==== <code style="white-space:nowrap">mw.ustring.gsub( s, pattern, repl, n )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.gsub|string.gsub()]], except that the pattern is extended as described in [[#Ustring patterns|Ustring patterns]]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> {{red|Known bugs}}: When <code>repl</code> is a table, it is possible to use numbers as keys instead of strings (e.g. to replace instances of {{code|lang=lua|inline=1|"5"}} in a string, the value at key {{code|lang=lua|inline=1|[5]}} or {{code|lang=lua|inline=1|["5"]}} would be used); as such, the output is not predictable if they have different (non-nil) values. </div> <span lang="en" dir="ltr" class="mw-content-ltr">This is not an issue for [[#string.gsub|string.gsub()]], which ignores any numbers as keys.</span> ==== mw.ustring.isutf8 ==== <code style="white-space:nowrap">mw.ustring.isutf8( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns {{luai|true}} if the string is valid UTF-8, {{luai|false}} if not. </div> ==== mw.ustring.len ==== <code style="white-space:nowrap">mw.ustring.len( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the length of the string in codepoints, or nil if the string is not valid UTF-8. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> See [[#string.len|string.len()]] for a similar function that uses byte length rather than codepoints. </div> ==== mw.ustring.lower ==== <code style="white-space:nowrap">mw.ustring.lower( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.lower|string.lower()]], except that all characters with lowercase to uppercase definitions in Unicode are converted. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the [[#Language library|Language library]] is also loaded, this will instead call [[#mw.language:lc|lc()]] on the default language object. </div> ==== mw.ustring.match ==== <code style="white-space:nowrap">mw.ustring.match( s, pattern, init )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.match|string.match()]], except that the pattern is extended as described in [[#Ustring patterns|Ustring patterns]] and the <code>init</code> offset is in characters rather than bytes. </div> ==== mw.ustring.rep ==== <code style="white-space:nowrap">mw.ustring.rep( <span lang="en" dir="ltr" class="mw-content-ltr">string, n</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Identical to [[#string.rep|string.rep()]]. </div> ==== mw.ustring.sub ==== <code style="white-space:nowrap">mw.ustring.sub( s, i, j )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.sub|string.sub()]], except that the offsets are characters rather than bytes. </div> ==== mw.ustring.toNFC ==== <code style="white-space:nowrap">mw.ustring.toNFC( <span lang="en" dir="ltr" class="mw-content-ltr">string</span> )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the string to [[w:Normalization Form C|Normalization Form C]] (also known as Normalization Form Canonical Composition). Returns nil if the string is not valid UTF-8. </div> ==== mw.ustring.toNFD ==== <code style="white-space:nowrap">mw.ustring.toNFD( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the string to [[w:Normalization Form D|Normalization Form D]] (also known as Normalization Form Canonical Decomposition). Returns nil if the string is not valid UTF-8. </div> ==== mw.ustring.toNFKC ==== <code style="white-space:nowrap">mw.ustring.toNFKC( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the string to [[w:Normalization Form KC|Normalization Form KC]] (also known as Normalization Form Compatibility Composition). Returns nil if the string is not valid UTF-8. </div> ==== mw.ustring.toNFKD ==== <code style="white-space:nowrap">mw.ustring.toNFKD( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Converts the string to [[w:Normalization Form KD|Normalization Form KD]] (also known as Normalization Form Compatibility Decomposition). Returns nil if the string is not valid UTF-8. </div> ==== mw.ustring.upper ==== <code style="white-space:nowrap">mw.ustring.upper( s )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Much like [[#string.upper|string.upper()]], except that all characters with uppercase to lowercase definitions in Unicode are converted. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If the [[#Language library|Language library]] is also loaded, this will instead call [[#mw.language:uc|uc()]] on the default language object. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Ustring patterns ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Patterns in the ustring functions use the same syntax as the [[#Patterns|String library patterns]]. The major difference is that the character classes are redefined in terms of [[w:Unicode character property|Unicode character properties]]: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%a</code>''': represents all characters with General Category "Letter". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%c</code>''': represents all characters with General Category "Control". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%d</code>''': represents all characters with General Category "Number, decimal digit". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%l</code>''': represents all characters with General Category "Lowercase Letter". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%p</code>''': represents all characters with General Category "Punctuation". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%s</code>''': represents all characters with General Category "Separator", plus tab, linefeed, carriage return, vertical tab, and form feed. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%u</code>''': represents all characters with General Category "Uppercase Letter". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%w</code>''': represents all characters with General Category "Letter" or "Decimal Number". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''<code>%x</code>''': adds fullwidth character versions of the hex digits. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Like in [[#Patterns|String library patterns]], '''<code>%A</code>''', '''<code>%C</code>''', '''<code>%D</code>''', '''<code>%L</code>''', '''<code>%P</code>''', '''<code>%S</code>''', '''<code>%U</code>''', '''<code>%W</code>'''{{int|and}}{{int|word-separator}}'''<code>%X</code>''' here represent the complementary set ("all characters ''without'' given General Category"). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In all cases, characters are interpreted as Unicode characters instead of bytes, so ranges such as <code>[0-9]</code>, patterns such as <code>%b«»</code>, and quantifiers applied to multibyte characters will work correctly. Empty captures will capture the position in code points rather than bytes. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> {{red|Known limitations}}: Unlike [[#Patterns|String library patterns]], Ustring library patterns have a maximum length of 10,000 bytes. If the pattern exceeds this length, then the Ustring function will throw an error. Because the String library has its own maximum of 32 captures (unlike the Ustring library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> {{red|Note}}: 9 ASCII characters, '''<code>$</code>''', '''<code>+</code>''', '''<code><</code>''', '''<code>=</code>''', '''<code>></code>''', '''<code>^</code>''', '''<code>`</code>''', '''<code>|</code>''', '''<code>~</code>''', can be matched by '''<code>%p</code>''' in the string library but not in the ustring library, as Unicode classifies them as Symbols rather than Punctuation. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Loadable libraries == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> These libraries are not included by default, but if needed may be loaded using <code>[[#require|require()]]</code>. </div> === bit32 === <div lang="en" dir="ltr" class="mw-content-ltr"> This emulation of the Lua 5.2 <code>bit32</code> library may be loaded using: </div> <syntaxhighlight lang="lua"> bit32 = require( 'bit32' ) </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> The bit32 library provides [[w:Bitwise operation|bitwise operations]] on unsigned 32-bit integers. Input numbers are truncated to integers (in an unspecified manner) and reduced modulo 2<sup>32</sup> so the value is in the range 0 to 2<sup>32</sup>−1; return values are also in this range. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> When bits are numbered (as in [[#bit32.extract|bit32.extract()]]), 0 is the least-significant bit (the one with value 2<sup>0</sup>) and 31 is the most-significant (the one with value 2<sup>31</sup>). </div> ==== bit32.band ==== <code style="white-space:nowrap">bit32.band( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the [[w:Bitwise operation#AND|bitwise AND]] of its arguments: the result has a bit set only if that bit is set in all of the arguments. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If given zero arguments, the result has all bits set. </div> ==== bit32.bnot ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.bnot( x )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the [[w:Bitwise operation#NOT|bitwise complement]] of <code>x</code>. </div> ==== bit32.bor ==== <code style="white-space:nowrap">bit32.bor( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the [[w:Bitwise operation#OR|bitwise OR]] of its arguments: the result has a bit set if that bit is set in any of the arguments. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If given zero arguments, the result has all bits clear. </div> ==== bit32.btest ==== <code style="white-space:nowrap">bit32.btest( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Equivalent to <code style="white-space:nowrap">bit32.band( ... ) ~= 0</code> </div> ==== bit32.bxor ==== <code style="white-space:nowrap">bit32.bxor( ... )</code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the [[w:Bitwise operation#XOR|bitwise XOR]] of its arguments: the result has a bit set if that bit is set in an odd number of the arguments. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If given zero arguments, the result has all bits clear. </div> ==== bit32.extract ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.extract( n, field, width )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Extracts <code>width</code> bits from <code>n</code>, starting with bit <code>field</code>. Accessing bits outside of the range 0 to 31 is an error. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If not specified, the default for <code>width</code> is 1. </div> ==== bit32.replace ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.replace( n, v, field, width )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Replaces <code>width</code> bits in <code>n</code>, starting with bit <code>field</code>, with the low <code>width</code> bits from <code>v</code>. Accessing bits outside of the range 0 to 31 is an error. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If not specified, the default for <code>width</code> is 1. </div> ==== bit32.lshift ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.lshift( n, disp )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number <code>n</code> [[w:Bitwise operation#Bit shifts|shifted]] <code>disp</code> bits to the left. This is a [[w:Logical shift|logical shift]]: inserted bits are 0. This is generally equivalent to multiplying by 2<sup><code>disp</code></sup>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that a displacement over 31 will result in 0. </div> ==== bit32.rshift ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.rshift( n, disp )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number <code>n</code> [[w:Bitwise operation#Bit shifts|shifted]] <code>disp</code> bits to the right. This is a [[w:Logical shift|logical shift]]: inserted bits are 0. This is generally equivalent to dividing by 2<sup><code>disp</code></sup>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that a displacement over 31 will result in 0. </div> ==== bit32.arshift ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.arshift( n, disp )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number <code>n</code> shifted <code>disp</code> bits to the right. This is an [[w:Arithmetic shift|arithmetic shift]]: if <code>disp</code> is positive, the inserted bits will be the same as bit 31 in the original number. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that a displacement over 31 will result in 0 or 4294967295. </div> ==== bit32.lrotate ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.lrotate( n, disp )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number <code>n</code> [[w:Bitwise operation#Rotate no carry|rotated]] <code>disp</code> bits to the left. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that rotations are equivalent modulo 32: a rotation of 32 is the same as a rotation of 0, 33 is the same as 1, and so on. </div> ==== bit32.rrotate ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">bit32.rrotate( n, disp )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Returns the number <code>n</code> [[w:Bitwise operation#Rotate no carry|rotated]] <code>disp</code> bits to the right. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that rotations are equivalent modulo 32: a rotation of 32 is the same as a rotation of 0, 33 is the same as 1, and so on. </div> === libraryUtil === <div lang="en" dir="ltr" class="mw-content-ltr"> This library contains methods useful when implementing Scribunto libraries. It may be loaded using: </div> <syntaxhighlight lang="lua"> libraryUtil = require( 'libraryUtil' ) </syntaxhighlight> ==== libraryUtil.checkType ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">libraryUtil.checkType( name, argIdx, arg, expectType, nilOk )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Raises an error if <code style="white-space:nowrap">[[#type|type]]( arg )</code> does not match <code>expectType</code>. In addition, no error will be raised if <code>arg</code> is nil and <code>nilOk</code> is true. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> <code>name</code> is the name of the calling function, and <code>argIdx</code> is the position of the argument in the argument list. These are used in formatting the error message. </div> ==== libraryUtil.checkTypeMulti ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">libraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Raises an error if <code style="white-space:nowrap">[[#type|type]]( arg )</code> does not match any of the strings in the array <code>expectTypes</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This is for arguments that have more than one valid type. </div> ==== libraryUtil.checkTypeForIndex ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">libraryUtil.checkTypeForIndex( index, value, expectType )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Raises an error if <code style="white-space:nowrap">[[#type|type]]( value )</code> does not match <code>expectType</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This is intended for use in implementing a <code>__newindex</code> [[#Metatables|metamethod]]. </div> ==== libraryUtil.checkTypeForNamedArg ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">libraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> Raises an error if <code style="white-space:nowrap">[[#type|type]]( arg )</code> does not match <code>expectType</code>. In addition, no error will be raised if <code>arg</code> is nil and <code>nilOk</code> is true. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This is intended to be used as an equivalent to <code>[[#libraryUtil.checkType|libraryUtil.checkType()]]</code> in methods called using Lua's "named argument" syntax, <code style="white-space:nowrap">func{ name = value }</code>. </div> ==== libraryUtil.makeCheckSelfFunction ==== <code style="white-space:nowrap"><span lang="en" dir="ltr" class="mw-content-ltr">libraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc )</span></code> <div lang="en" dir="ltr" class="mw-content-ltr"> This is intended for use in implementing "methods" on object tables that are intended to be called with the <code>obj:method()</code> syntax. It returns a function that should be called at the top of these methods with the <code>self</code> argument and the method name, which will raise an error if that <code>self</code> object is not <code>selfObj</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This function will generally be used in a library's constructor function, something like this: </div> <syntaxhighlight lang="lua"> function myLibrary.new() local obj = {} local checkSelf = libraryUtil.makeCheckSelfFunction( 'myLibrary', 'obj', obj, 'myLibrary object' ) function obj:method() checkSelf( self, 'method' ) end function obj:method2() checkSelf( self, 'method2' ) end return obj end </syntaxhighlight> === luabit === <div lang="en" dir="ltr" class="mw-content-ltr"> The [http://luaforge.net/projects/bit/ luabit] library modules "bit" and "hex" may be loaded using: </div> <syntaxhighlight lang="lua"> bit = require( 'luabit.bit' ) hex = require( 'luabit.hex' ) </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that the [[#bit32|bit32 library]] contains the same operations as "luabit.bit", and the operations in "luabit.hex" may be performed using <code>[[#string.format|string.format()]]</code> and <code>[[#tonumber|tonumber()]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The luabit module "noki" is not available, as it is entirely useless in Scribunto. The luabit module "utf8" is also not available, as it was considered redundant to the [[#Ustring library|Ustring library]]. </div> === strict === <div lang="en" dir="ltr" class="mw-content-ltr"> The ''strict'' library is not a normal library; it causes an error to be raised whenever a new variable is used that is not explicitly scoped as a local variable (e.g., global variable assignment references). This functionality is typically enabled by loading at the top of a module using: </div> <syntaxhighlight lang="lua"> require( 'strict' ) </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> On many Wikimedia wikis this was formerly implemented in <code>Module:No globals</code>, which was replaced via [[:phab:T209310]]. It is in part derived from [https://www.lua.org/extras/5.1/strict.lua strict.lua]. </div> === ustring === <div lang="en" dir="ltr" class="mw-content-ltr"> The pure-Lua backend to the [[#Ustring library|Ustring library]] may be loaded using: </div> <syntaxhighlight lang="lua"> ustring = require( 'ustring' ) </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> In all cases the Ustring library (<code>mw.ustring</code>) should be used instead, as that replaces many of the slower and more memory-intensive operations with callbacks into PHP code. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Extension libraries == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Some MediaWiki extensions provide additional Scribunto libraries. These are also located in the table <code>mw</code>, usually in the table <code>mw.ext</code>, however, they are only present when certain extensions are installed (in addition to the Scribunto extension itself). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Such extensions use Scribunto provided hooks: *[[:Category:ScribuntoExternalLibraries extensions|ScribuntoExternalLibraries]] *[[:Category:ScribuntoExternalLibraryPaths extensions|ScribuntoExternalLibraryPaths]] </div> <div lang="en" dir="ltr" class="mw-content-ltr"> [[#Writing Scribunto libraries|Writing Scribunto libraries]] provides information on how such libraries can be developed to provide Lua interfaces for MediaWiki extensions. </div> === mw.wikibase === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:Wikibase Client|nsp=0}} provides access to localizable structured data, most notably [[d:Special:MyLanguage/Wikidata:Main Page|Wikidata]].</span> <span lang="en" dir="ltr" class="mw-content-ltr">See [[wmdoc:Wikibase/master/php/docs_topics_lua.html|docs_topics_lua.html]] and {{ll|Extension:Wikibase Client/Lua}}.</span> === mw.wikibase.lexeme === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:WikibaseLexeme|nsp=0}} provides access to Wikibase Lexeme entities. This is supported by [[d:Special:MyLanguage/Wikidata:Lexicographical data|Wikidata:Lexicographical data]].</span> <span lang="en" dir="ltr" class="mw-content-ltr">See [[wmdoc:WikibaseLexeme/master/php/md_docs_2topics_2lua.html|md_docs_2topics_2lua.html]] and {{ll|Extension:WikibaseLexeme/Lua}}.</span> === mw.wikibase.mediainfo === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:WikibaseMediaInfo|nsp=0}} provides access to Wikibase MediaInfo entities.</span> Siehe {{ll|Extension:WikibaseMediaInfo/Lua|nsp=0}}. <span lang="en" dir="ltr" class="mw-content-ltr">This is supported by [[c:Special:MyLanguage/Commons:Structured data|Structured Data on Commons]]. See [[c:Special:MyLanguage/Commons:Structured data/Lua|Structured data/Lua]].</span> === mw.bcmath === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:BCmath|nsp=0}} provides arbitrary-precision arithmetic to Lua modules. See BCmath documentation via "LDoc" link at [[Special:MyLanguage/Extension:BCmath#Usage|BCmath § Usage]].</span> === mw.smw === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:Semantic Scribunto|nsp=0}} provides native Scribunto support for the {{ll|Extension:Semantic MediaWiki|nsp=0}} extension.</span> === mw.ext.data === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:JsonConfig|nsp=0}} provides access to localizable tabular and map data.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See {{ll|Extension:JsonConfig/Tabular|nsp=0}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Help:Tabular Data|nsp=0}} and GeoJSON {{ll|Help:Map Data|nsp=0}} is supported in the "[[m:DataNamespace|Data]]:" namespace at Commons.</span> * <code>mw.ext.data.get( ''pagename'' )</code> === mw.ext.cargo === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:Cargo|Cargo}} provides a means to query its data store from Lua.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See {{ll|Extension:Cargo/Other features#Lua support|Extension:Cargo/Other features#Lua support}}.</span> === mw.ext.cattools === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:CategoryToolbox|CategoryToolbox}} provides a means to check from Lua if a certain page belongs to a category.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Is is experimental and not enabled on public WikiMedia wikis.</span> === mw.ext.FlaggedRevs === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:FlaggedRevs|FlaggedRevs}} provides a means to access the stability settings of a page from Lua.</span> === mw.ext.TitleBlacklist === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:TitleBlacklist|TitleBlacklist}} provides a means to test and obtain information about blacklisted page naming entries from Lua.</span> === mw.ext.ParserFunctions === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:ParserFunctions|ParserFunctions}} provides a means from Lua to evaluate expressions in the same way as its PHP-based parser function <code>{{ll|Help:Extension:ParserFunctions###expr|#expr}}</code>.</span> === mw.ext.proofreadPage === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:Proofread Page|Proofread Page}} provides access to Index and Page namespaces.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See {{ll|Extension:Proofread Page/Lua reference}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This is supported by [[oldwikisource:Wikisource:ProofreadPage|Wikisource:ProofreadPage]].</span> <span lang="en" dir="ltr" class="mw-content-ltr">See {{ll|Help:Extension:ProofreadPage}}.</span> === mw.ext.articlePlaceholder === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:ArticlePlaceholder|ArticlePlaceholder}} provides a means to override default Wikibase renderings from Lua.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See {{ll|Extension:ArticlePlaceholder/Module:AboutTopic}}.</span> === mw.ext.externalData === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:ExternalData|ExternalData}} provides a means to get structured data from Internet from Lua.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See {{ll|Extension:External Data/Lua}}.</span> === mw.ext.UnlinkedWikibase === <span lang="en" dir="ltr" class="mw-content-ltr">See {{ll|Extension:UnlinkedWikibase|UnlinkedWikibase}}</span> * <code>mw.ext.UnlinkedWikibase.getEntity( ''id'' )</code> * <code>mw.ext.UnlinkedWikibase.query( ''sparql'' )</code> === mw.ext.seo === <span lang="en" dir="ltr" class="mw-content-ltr">[[Extension:WikiSEO|WikiSEO]] provides a means to set SEO Data for the current page. See [[Extension:WikiSEO#Usage in lua modules]].</span> === mw.slots === <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|Extension:WSSlots|WSSlots}} provides a number of Lua functions for working with [[Special:MyLanguage/Multi-Content Revisions|MCR]] slots:</span> * <code>mw.slots.slotContent(''slotName'', ''pageName'')</code> * <code>mw.slots.slotTemplates(''slotName'', ''pageName'')</code> (deprecated) * <code>mw.slots.slotContentModel(''slotName'', ''pageName'')</code> * <code>mw.slots.slotData(''slotName'', ''pageName'')</code> <span id="Differences_from_standard_Lua"></span> == Unterschiede zum Standard-Lua == <span id="Changed_functions"></span> === Geänderte Funktionen === <div lang="en" dir="ltr" class="mw-content-ltr"> The following functions have been '''modified''': </div> ; [https://www.lua.org/manual/5.1/manual.html#pdf-setfenv setfenv()] ; [https://www.lua.org/manual/5.1/manual.html#pdf-getfenv getfenv()]: <span lang="en" dir="ltr" class="mw-content-ltr">May not be available, depending on the configuration. If available, attempts to access parent environments will fail.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-getmetatable getmetatable()]: <span lang="en" dir="ltr" class="mw-content-ltr">Works on tables only to prevent unauthorized access to parent environments.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-tostring tostring()]: <span lang="en" dir="ltr" class="mw-content-ltr">Pointer addresses of tables and functions are not provided. This is to make memory corruption vulnerabilities more difficult to exploit.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-pairs pairs()] ; [https://www.lua.org/manual/5.1/manual.html#pdf-ipairs ipairs()]: <span lang="en" dir="ltr" class="mw-content-ltr">Support for the __pairs and __ipairs metamethods (added in Lua 5.2) has been added.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-pcall pcall()] ; [https://www.lua.org/manual/5.1/manual.html#pdf-xpcall xpcall()]: <span lang="en" dir="ltr" class="mw-content-ltr">Certain internal errors cannot be intercepted.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-require require()]: <span lang="en" dir="ltr" class="mw-content-ltr">Can fetch certain built-in modules distributed with Scribunto, as well as modules present in the Module namespace of the wiki. To fetch wiki modules, use the full page name including the namespace. Cannot otherwise access the local filesystem.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> === Removed functions and packages === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The following packages are '''mostly removed'''. Only those functions listed are available: </div> ; [https://www.lua.org/manual/5.1/manual.html#5.3 package.*]: <span lang="en" dir="ltr" class="mw-content-ltr">Filesystem and C library access has been removed.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Available functions and tables are:</span> :; [https://www.lua.org/manual/5.1/manual.html#pdf-package.loaded package.loaded] :; [https://www.lua.org/manual/5.1/manual.html#pdf-package.preload package.preload] :; [https://www.lua.org/manual/5.1/manual.html#pdf-package.loaders package.loaders]: <span lang="en" dir="ltr" class="mw-content-ltr">Loaders which access the local filesystem or load C libraries are not present.</span> <span lang="en" dir="ltr" class="mw-content-ltr">A loader for Module-namespace pages is added.</span> :; [https://www.lua.org/manual/5.1/manual.html#pdf-package.seeall package.seeall()] ; [https://www.lua.org/manual/5.1/manual.html#5.8 os.*]: <span lang="en" dir="ltr" class="mw-content-ltr">There are some insecure functions in here, such as os.execute(), which can't be allowed.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Available functions are:</span> :; [https://www.lua.org/manual/5.1/manual.html#pdf-os.clock os.clock()] :; [https://www.lua.org/manual/5.1/manual.html#pdf-os.date os.date()] :; [https://www.lua.org/manual/5.1/manual.html#pdf-os.difftime os.difftime()] :; [https://www.lua.org/manual/5.1/manual.html#pdf-os.time os.time()] ; [https://www.lua.org/manual/5.1/manual.html#5.9 debug.*]: <span lang="en" dir="ltr" class="mw-content-ltr">Most of the functions are insecure.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Available functions are:</span> :; [https://www.lua.org/manual/5.1/manual.html#pdf-debug.traceback debug.traceback()] <div lang="en" dir="ltr" class="mw-content-ltr"> The following functions and packages are '''not''' available: </div> ; [https://www.lua.org/manual/5.1/manual.html#pdf-collectgarbage collectgarbage()] ; [https://www.lua.org/manual/5.1/manual.html#pdf-module module()] ; [https://www.lua.org/manual/5.1/manual.html#2.11 coroutine.*]: <span lang="en" dir="ltr" class="mw-content-ltr">No application is known for us, so it has not been reviewed for security.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-dofile dofile()] ; [https://www.lua.org/manual/5.1/manual.html#pdf-loadfile loadfile()] ; [https://www.lua.org/manual/5.1/manual.html#5.7 io.*, file.*]: <span lang="en" dir="ltr" class="mw-content-ltr">Allows local filesystem access, which is insecure.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-load load()] ; [https://www.lua.org/manual/5.1/manual.html#pdf-loadstring loadstring()]: <span lang="en" dir="ltr" class="mw-content-ltr">These were omitted to allow for static analysis of the Lua source code.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Also, allowing these would allow Lua code to be added directly to article and template pages, which was not desired for usability reasons.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-print print()]: <span lang="en" dir="ltr" class="mw-content-ltr">This was [[mailarchive:wikitech-l/2012-April/059995.html|discussed on wikitech-l]] and it was decided that it should be omitted in favour of return values, to improve code quality.</span> <span lang="en" dir="ltr" class="mw-content-ltr">If necessary, mw.log() may be used to output information to the debug console.</span> ; [https://www.lua.org/manual/5.1/manual.html#pdf-string.dump string.dump()]: <span lang="en" dir="ltr" class="mw-content-ltr">May expose private data from parent environments.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> === Additional caveats === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ; Referential data structures: Circular data structures and data structures where the same node may be reached by more than one path cannot be correctly sent to PHP. </div> <span lang="en" dir="ltr" class="mw-content-ltr">Attempting to do so will cause undefined behavior.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This includes (but is not limited to) returning such data structures from the module called by <code><nowiki>{{#invoke:}}</nowiki></code> and passing such data structures as parameters to Scribunto library functions that are implemented as callbacks into PHP.</span> <br /><span lang="en" dir="ltr" class="mw-content-ltr">Such data structures may be used freely within Lua, including as the return values of modules loaded with <code>[[#mw.loadData|mw.loadData()]]</code>.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> == Writing Scribunto libraries == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> This information is useful to developers writing additional Scribunto libraries, whether for inclusion in Scribunto itself or for providing an interface for their own extensions. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A Scribunto library will generally consist of five parts: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * The PHP portion of the library. * The Lua portion of the library. * The PHP portion of the test cases. * The Lua portion of the test cases. * The documentation. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Existing libraries serve as a good example. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Library === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The PHP portion of the library is a class that must extend <code>Scribunto_LuaLibraryBase</code>. See the documentation for that class for implementation details. In the Scribunto extension, this file should be placed in <code>engines/LuaCommon/''Name''Library.php</code>, and a mapping added to <code>Scribunto_LuaEngine::$libraryClasses</code>. Other extensions should use the [[Extension:Scribunto/Hooks/ScribuntoExternalLibraries|ScribuntoExternalLibraries]] hook. In either case, the key should match the Lua module name ("mw.''name''" for libraries in Scribunto, or "mw.ext.''name''" for extension libraries). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The Lua portion of the library sets up the table containing the functions that can be called from Lua modules. In the Scribunto extension, the file should be placed in <code>engines/LuaCommon/lualib/mw.''name''.lua</code>. This file should generally include boilerplate something like this: </div> <syntaxhighlight lang=lua> local object = {} local php function object.setupInterface( options ) -- Remove setup function object.setupInterface = nil -- Copy the PHP callbacks to a local variable, and remove the global php = mw_interface mw_interface = nil -- Do any other setup here -- Install into the mw global mw = mw or {} mw.ext = mw.ext or {} mw.ext.NAME = object -- Indicate that we're loaded package.loaded['mw.ext.NAME'] = object end return object </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> The module in <code>engines/LuaCommon/lualib/libraryUtil.lua</code> (load this with <code>local util = require 'libraryUtil'</code>) contains some functions that may be helpful. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Be sure to run the Scribunto test cases with your library loaded, even if your library doesn't itself provide any test cases. The standard test cases include tests for things like libraries adding unexpected global variables. Also, if the library is loaded with PHP, any upvalues that its Lua functions have will not be reset between #invoke's. Care must be taken to ensure that modules can't abuse this to transfer information between #invoke's. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Test cases === </div> <span lang="en" dir="ltr" class="mw-content-ltr">The Scribunto extension includes a base class for test cases, <code>Scribunto_LuaEngineTestBase</code>, which will run the tests against both the {{ll|LuaSandbox}} and {{ll|Extension:Scribunto#LuaStandalone|LuaStandalone}} engines.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The library's test case should extend this class, and should not override <code>static function suite()</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">In the Scribunto extension, the test case should be in <code>tests/engines/LuaCommon/''Name''LibraryTest.php</code> and added to the array in {{phpi|ScribuntoHooks::unitTestsList()}} (in <code>common/Hooks.php</code>); extensions should add the test case in their own <code>{{ll|Manual:Hooks/UnitTestsList|UnitTestsList}}</code> hook function, probably conditional on whether <code>$wgAutoloadClasses['Scribunto_LuaEngineTestBase']</code> is set.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> Most of the time, all that is needed to make the test case is this: </div> class ''ClassName''Test extends Scribunto_LuaEngineTestBase { protected static $moduleName = '<i>ClassName</i>Test'; function getTestModules() { return parent::getTestModules() + array( '<i>ClassName</i>Test' => __DIR__ . '/<i>ClassName</i>Tests.lua'; ); } } <div lang="en" dir="ltr" class="mw-content-ltr"> This will load the file <code>''ClassName''Tests.lua</code> as if it were the page "Module:''ClassName''Tests", expecting it to return an object with the following properties: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''count''': Integer, number of tests * '''provide( n )''': Function that returns three values: <code>n</code>, the name of test <code>n</code>, and a string that is the expected output for test <code>n</code>. * '''run( n )''': Function that runs test <code>n</code> and returns one string. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If <code>getTestModules()</code> is declared as shown, "Module:TestFramework" is available which provides many useful helper methods. If this is used, <code>''ClassName''Tests.lua</code> would look something like this: </div> local testframework = require 'Module:TestFramework' return testframework.getTestProvider( { -- <span lang="en" dir="ltr" class="mw-content-ltr">Tests go here</span> } ) <div lang="en" dir="ltr" class="mw-content-ltr"> Each test is itself a table, with the following properties: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''name''': The name of the test. * '''func''': The function to execute. * '''args''': Optional table of arguments to pass to the function. * '''expect''': Results to expect. * '''type''': Optional "type" of the test, default is "Normal". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The type controls the format of <code>expect</code> and how <code>func</code> is called. Included types are: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * '''Normal''': <code>expect</code> is a table of return values, or a string if the test should raise an error. <code>func</code> is simply called. * '''Iterator''': <code>expect</code> is a table of tables of return values. <code>func</code> is called as with an [[#iterators|iterated for loop]], and each iteration's return values are accumulated. * '''ToString''': Like "Normal", except each return value is passed through <code>[[#tostring|tostring()]]</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Test cases in another extension ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> There are (at least) two ways to run PHPUnit tests: </div> <div lang="en" dir="ltr" class="mw-content-ltr"> # Run phpunit against core, allowing the tests/phpunit/suites/ExtensionsTestSuite.php to find the extension's tests using the {{ll|Manual:Hooks/UnitTestsList|UnitTestsList}} hook. </div> <span lang="en" dir="ltr" class="mw-content-ltr">If your extension's test class names all contain a unique component (e.g. the extension's name), the <code>--filter</code> option may be used to run only your extension's tests.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> # Run phpunit against the extension directory, where it will pick up any file ending in "Test.php". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Either of these will work fine if Scribunto is loaded in LocalSettings.php. And it is easy for method #1 to work if Scribunto is not loaded, as the UnitTestsList hook can easily be written to avoid returning the Scribunto test when {{phpi|$wgAutoloadClasses[ 'Scribunto_LuaEngineTestBase' ]}} is not set. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> But [[Jenkins]] uses method #2. For Jenkins to properly run the tests, you will need to add Scribunto as a dependency for your extension. See {{gerrit|56570}} for an example of how this is done. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If for some reason you need the tests to be able to run using method #2 without Scribunto loaded, one workaround is to add this check to the top of your unit test file: </div> <syntaxhighlight lang="php"> if ( !isset( $GLOBALS['wgAutoloadClasses']['Scribunto_LuaEngineTestBase'] ) ) { return; } </syntaxhighlight> <span id="Documentation"></span> === Dokumentation === <div lang="en" dir="ltr" class="mw-content-ltr"> Modules included in Scribunto should include documentation in the [[#Scribunto libraries|Scribunto libraries]] section above. Extension libraries should include documentation in a subpage of their own extension page, and link to that documentation from the [[#Extension libraries|Extension libraries]] subsection above. </div> <span id="See_also"></span> == Siehe auch == <div lang="en" dir="ltr" class="mw-content-ltr"> *[[w:Lua (programming language)|Lua (programming language)]] </div> <span id="License"></span> == Lizenz == Dieses Handbuch stammt aus dem [https://www.lua.org/manual/5.1/index.html Lua-5.1-Referenzhandbuch], das unter der [[https://www.lua.org/license.html MIT-Lizenz]] verfügbar ist. {{mbox | type = notice | image = none | text = Urheberrecht © 1994–2012 Lua.org, PUC-Rio. Hiermit wird jeder Person, die eine Kopie dieser Software und der dazugehörigen Dokumentationsdateien (die „Software“) erhalten hat, unentgeltlich die Erlaubnis erteilt, diese Software uneingeschränkt zu benutzen, einschließlich ohne Einschränkung der Rechte auf Nutzung, Kopien, Änderung, Zusammenführung, Veröffentlichung, Vertrieb, Unterlizenzierung und/oder Verkauf von Kopien der Software, und Personen, die diese Software erhalten, diese Rechte gemäß folgenden Bedingungen zu erteilen: Der obige Urheberechtshinweis und dieser Erlaubnisvermerk sind in allen Kopien oder wesentlichen Teilen der Software beizulegen. <div lang="en" dir="ltr" class="mw-content-ltr"> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. </div> }} <div lang="en" dir="ltr" class="mw-content-ltr"> This derivative manual may also be copied under the terms of the same license. </div> [[Category:Lua{{#translation:}}]]