Handboek:Parser.php
Deze pagina is verouderd. |
MediaWiki bestand: Parser.php | |
---|---|
Locatie: | includes/parser/ |
Broncode: | master • 1.43.0 • 1.42.5 • 1.39.11 |
Classes: | MediaWiki\Parser\Parser |
Beschrijving
Dit bestand bevat de class Parser
, die de methode parse
bevat, die Wikitext naar HTML omzet.
De Parser maken
In veel contexten, zoals bij het maken van een parserfunctie of een speciale pagina, moet u toegang hebben tot een instantie van Parser.
Het maken van een instantie van Parser
Als u geen toegang heeft, kunt u een nieuwe instantie maken met behulp van ParserFactory en de methode create
aanroepen.[1]
De constructor van ParserFactory heeft meerdere argumenten.
Om een ParserFactory te maken met de standaardopties, gebruik MediaWikiServices::getInstance()->getParserFactory()
.
Een regel voor het maken van een nieuwe Parser instantie:
$localParser = MediaWikiServices::getInstance()->getParserFactory()->create();
Deze nieuwe instantie is nog niet klaar voor gebruik. De volgende stap is om ParserOptions in te stellen.
De cyclus van het parsen
- Aanroep helper-functie
Parser::internalParse()
, die op zijn beurt aanroeptParser::replaceVariables
, waarmee magische variabelen, sjablonen en sjabloonargumenten worden vervangen door de bijbehorende tekst.- Het roept
Parser::preprocessToDom
aan, die wat wikitext vooraf verwerkt en de documentenboom teruggeeft. - Vervolgens maakt het een
PPFrame
object aan en roept deexpand()
methode aan om de echte sjabloon magie te doen.
- Het roept
Sanitizer::removeHTMLtags()
, die HTML opschoont, gevaarlijke tags en attributen verwijdert en HTML-commentaren verwijdert.Parser::handleTables
, die de wikitext voor tabellen behandelt en weergeeft.Parser::handleDoubleUnderscore
, waarmee geldige items met dubbele onderstrepingsteken, zoals __NOTOC__, worden verwijderd en in array$Parser->mDoubleUnderscores
worden vastgelegd.Parser::handleHeadings
, die sectiekoppen analyseert en weergeeft.Parser::handleInternalLinks
, die interne links verwerkt ([[ ]]
) en ze opslaat in$Parser->mLinkHolders
(eenLinkHolderArray
.html LinkHolderArlay object),Parser::handleAllQuotes
, die enkele aanhalingstekens vervangt door HTML-markering (<i>
,<b>
, enz.).Parser::handleExternalLinks
, die externe links vervangt en opbouwt.Parser::handleMagicLinks
, die speciale teksten zoals "ISBN xxx" en "RFC xxx" vervangt door magische externe links.Parser::handleHeadings
, dat:- automatische nummering van koppen als die optie is ingeschakeld,
- voegt een link [edit] toe aan secties voor gebruikers die de optie hebben ingeschakeld en de pagina kunnen bewerken,
- Voegt bovenaan een inhoudstabel toe voor gebruikers die de optie hebben ingeschakeld, en
- geeft automatisch een anker aan koppen.
- Daarna,
parse()
roept vervolgensParser::doBlockLevels
aan, die lijsten van regels opbouwt die beginnen met ':', '*', '#', enz. Parser::replaceLinkHolders
wordt geroepen, dieLinkHolderArray::replace
op$Parser->mLinkHolders
aanroept om placeholders van een link te vervangen door werkelijke links, in de buffer Placeholders gecreëerd in Skin::makeLinkObj()- Vervolgens wordt de tekst in de taal omgezet (indien van toepassing) met behulp van de
convert
methode van het juiste Language object. Parser::replaceTransparentTags
wordt aangeroepen, waarbij transparante tags worden vervangen door waarden die worden geleverd door de callback-functies in$Parser->mTransparentTagHooks
. Transparante tag-hooks zijn vergelijkbaar met gewone XML-stijl tag-hooks, behalve dat ze laat in de transformatiesequentie werken, op HTML in plaats van wikitext.Sanitizer::normalizeCharReferences
wordt aangeroepen, wat ervoor zorgt dat alle entiteiten en tekenverwijzingen legaal zijn voor XML en XHTML specifiek.- Als HTML tidy is ingeschakeld, wordt
MWTidy::tidy
aangeroepen om het opruimen uit te voeren. - Ten slotte wordt het weergegeven HTML-resultaat van het parseproces opgeslagen in het
ParserOutput
object$Parser->mOutput
, dat teruggegeven wordt aan de aanroeper vanParser::parse
.
De volgende hooks worden in verschillende stadia van de cyclus van het parsen beschikbaar gesteld:
Versie | Hook | Beschrijving |
---|---|---|
1.5.0 | ParserAfterTidy | Gebruikt om een beetje verwerking toe te voegen aan de volledig opgebouwde pagina. |
1.6.0 | ParserBeforeInternalParse | |
1.6.0 | ParserClearState | Aangeroepen na Parser::clearState(). |
1.6.0 | ParserGetVariableValueSwitch | Kent een waarde toe aan een door de gebruiker gedefinieerde variabele. |
1.6.0 | ParserGetVariableValueTs | Wordt gebruikt om de waarde van de tijd voor het magische woord {{LOCAL...}} te wijzigen. |
1.6.0 | ParserTestParser | Wordt aangeroepen bij het maken van een nieuw voorbeeld van Parser voor parser-testen. |
1.10.0 | InternalParseBeforeLinks | Gebruikt om de uitgebreide wiki-code te verwerken nadat <nowiki>, HTML-commentaren en sjablonen zijn behandeld. |
1.10.1 | BeforeParserFetchTemplateAndtitle | Staat een extensie toe om een versie van een pagina te specificeren om te worden opgenomen in een sjabloon. |
1.10.1 | BeforeParserrenderImageGallery | Staat een extensie toe een beeldgalerij te wijzigen voordat deze wordt opgebouwd om te tonen. |
1.12.0 | ParserFirstCallInit | Wordt aangeroepen als de parser voor het eerst wordt gebruikt, initialiseren. |
1.12.0 | ParserMakeImageParams | Verander de parameters die worden gebruikt om een afbeelding te genereren voordat deze wordt gegenereerd. |
1.18.0 | BeforeParserFetchFileAndTitle | Voordat Parser een afbeelding maakt. |
1.19.0 | ParserSectionCreate | Wordt elke keer aangeroepen dat de parser een documentsectie uit wikitext maakt. |
1.22.0 | ParserLimitReportFormat | Replacement for deprecated ParserLimitReport |
1.22.0 | ParserLimitReportPrepare | Replacement for deprecated ParserLimitReport |
1.36.0 | BeforeParserFetchTemplateRevisionRecord | Replacement for deprecated BeforeParserFetchTemplateAndtitle |
Andere methoden
Accessors
getCustomDefaultSort ()
Accessor voor $mDefaultSort. Anders dan getDefaultSort(), Het retourneert false als er geen is ingesteld.getDefaultSort ()
Accessor voor $mDefaultSort. Zal de lege tekenreeks gebruiken als er geen is ingesteld.getOptions ()
Haal het object ParserOptions op.getOutput ()
Haal het object ParserOutput op.getPreprocessor ()
Haal een object Preprocessor op.- In verband met Manual:Revision :
getRevisionId ()
Haal het ID van de revisie die we verwerken met de parser.getRevisionTimestamp ()
Haal het tijdstempel die wordt geassocieerd met de huidige revisie, aangepast voor het standaard server-lokale tijdstempel.getRevisionUser ()
Haal de naam van de gebruiker op die de laatste revisie heeft gemaakt door een bewerking te doen.
getTags ()
Accessor.getTargetLanguage ()
De doeltaal ophalen van de inhoud die wordt verwerkt door de parser.getTitle ()
Accessor voor het object Title .getUser ()
Haal een object User op uit $this->mUser, indien ingesteld, of anders uit het object van ParserOptions.
Set
Parser::setFunctionHook()
Maak een parser-functie , bijvoorbeeld{{#expr: 1 + 1}}
of{{sum:1|2|3}}
. De functie callback kan de vorm hebben:function myParserFunction( &$parser, $arg1, $arg2, $arg3 ) { ... }
.Parser::setHook()
Maak een HTML-stijl tag , bijv.<yourtag>speciale tekst</yourtag>
. De callback moet de volgende vorm hebben:function myParserHook( $text, $params, $parser, $frame ) { ...
}
Dynamische eigenschappen
Voeg geen class-eigenschappen toe aan de Parser die niet door de Parser zijn gedeclareerd. Afgezien van uitzonderingen, zijn dynamische eigenschappen afgeschaft in PHP 8.2 en ze passen misschien niet goed bij de geplande verschuiving naar parallellisatie voor Parsoid . Als u een extensie schrijft en aangepaste gegevens in de parser moet opslaan, raadpleegt u extensiegegevens voor een mogelijkheid.
Zie ook
- Manual:Code – Overzicht van de belangrijkste bestanden en mappen in de broncode van MediaWiki
- Manual:ParserOptions.php
- Manual:PPFrame.php - uitbreiding frame-interface
Externe links
Referenties
- ↑ Voor MediaWiki 1.36, was het nog steeds mogelijk om een class Parser rechtstreeks te maken.