Wikipedija: funkcije razčlenjevalnika

Iz Wikipedije, proste enciklopedije
Pojdi na navigacijo Pojdi na iskanje
↱
  • VP: PARS
  • VP: Parser

Osnovni nabor funkcij razčlenjevalnika je znan kot čarobne besede . Glejte tudi mw: Pomoč: Razširitev: ParserFunctions / en in mw: Razširitev: StringFunctions . Splošna sintaksa za funkcije razčlenjevalnika je:

 {{ # funkcija : argument 1 | argument 2 | argument 3 ...}}

Če želite, da je vrednost razčlenjevalnika del tabele, morate namesto vodnega znaka uporabiti nadomestne znake - {{ ! - }} , { { ! } } , {{ !! }} , - ki jih funkcije razčlenjevalnika ustrezno zaznajo, in ko stran oblikuje mehanizem MediaWiki, se razširijo v simbole, ki tvorijo tabelo - |- , | , || ...

Za oblikovanje tabele lahko uporabite tudi HTML :

  • <table></table> - podobno kot {|- in -|} ;
  • <tr> - začne vrstico;
  • <td> - ustvari celico v vrsti ...

Funkcije

#expr

Funkcija #expr izvaja matematične izračune številk ali spremenljivk/parametrov, ki jih je mogoče pretvoriti v številke. sintaksa:

 {{#expr: izraz }}

Podprti so naslednji operaterji (navedeni v približnem vrstnem redu prednosti):

Operater Ukrep Primer
- {{#expr: 123456789012345}} = 1,2345678901234E + 14

{{#expr: 0,000001}} = 1,0E-6

() Operatorji združevanja {{#expr: (30 + 7) * 7}} = 259
+ Enarni znak + {{#expr: +30 * +7}} = 210
- Unarni znak - (inverzija predznaka) {{#expr: -30 * -7}} = 210
ne Unarno ali logično NE {{#expr: ne 0 * 7}} = 7
{{#expr: ne 30 + 7}} = 7
* Množenje {{#expr: 30 * 7}} = 210
/ Division, kar ustreza div {{#expr: 30/7}} = 4,2857142857143
^ Eksponentiranje {{#expr: 3 ^ 2}} = 9
razdel Deljenje, enakovredno / (brez celih delitev) {{#expr: 30 div 7}} = 4,2857142857143
{{#expr: 5 div 2 * 2 + 5 mod 2}} = 6
mod Preostanek delitve, pridobljen z deljenjem operandov, pri katerem se ulomni deli zavržejo
(upoštevajte, da div in mod ne delujeta kot v običajnih programskih jezikih)
{{#expr: 30 mod 7}} = 2

{{#expr: -8 mod -3}} = -2
{{#expr: -8 mod +3}} = -2
{{#expr: 8 mod 2.7}} = 0
{{#expr: 8 mod 3.2}} = 2
{{#expr: 8.9 mod 3}} = 2

+ Dodatek {{#expr: 30 + 7}} = 37
- Odštevanje {{#expr: 30 - 7}} = 23
okrogla Zaokroži levi operand na določeno število decimalnih mest {{#expr: 30/7 krog 3}} = 4,286

{{#expr: 30/7 krog 0}} = 4
{{#expr: 3456 krog -2}} = 3500

= Enakost (številčna in logična primerjava) {{#expr: 30 = 7}} = 0
<> Neenakost, enakovredno ! = {{#expr: 30 <> 7}} = 1
! = Neenakost, enakovredna <> in logični xor {{#expr: 1! = 0}} = 1
< manj {{#expr: 30 <7}} = 0
> Več {{#expr: 30> 7}} = 1
<= Manj ali enako {{#expr: 30 <= 7}} = 0
> = Več ali enako {{#expr: 30> = 7}} = 1
in Logično IN {{#expr: 4 <5 in 4 mod 2}} = 0
oz Logično ALI {{#expr: 4 <5 ali 4 mod 2}} = 1
greh Sinus {{#expr: sin (1,57)}} = 0,99999968293183
cos kosinus {{#expr: cos (1,57)}} = 0,00079632671073326
porjavelost Tangenta {{#expr: tan (0)}} = 0

To niso vsi operaterji, ki so na voljo. Podrobnejša dokumentacija o stavkih funkcij je m: Pomoč: Izračun .

Kot vedno je bolje postaviti dodatne oklepaje, kot pa se ugankati glede vrstnega reda izračuna.

Pri logičnem izpisu 0 pomeni napačno in 1 pomeni res.

Na primer:

 {{#expr: (100 - 32) / 9 * 5 krog 0}}

daje: 38.

Pretvorite 100 ° Fahrenheita v Celzije, zaokroženo na najbližje celo število.

#če

Funkcija #if ("if") se uporablja za ustvarjanje konstruktov if-then-else. Njegova sintaksa je naslednja:

 {{#if: testni niz | besedilo, če ni prazno | besedilo, če je prazno }}

Če je testna vrstica prazna ali je sestavljena samo iz presledkov, se besedilo vrne, če je prazno ; v nasprotnem primeru se besedilo vrne, če ni prazno . Zadnji parameter lahko izpustite, v tem primeru bo prazen niz vrnjen s praznim nizom.

Upoštevajte, da #if ne podpira primerjave z "=" in drugimi matematičnimi operacijami. Torej, {{#if: 1 = 2 | да | нет }} bo vrnil "da", saj vrstica 1 = 2 prazna. Uporabite #ifeq za primerjavo nizov. Uporabite #ifexpr za primerjavo številk.

Vsebina za navpičnimi črtami je zaznana kot od začetka vrstice, zato znaki * , : , ; in drugi na prvem mestu se pretvorijo v ustrezne elemente postavitve. Da bi se temu izognili, postavite oznako <nowiki/> prednje ali jih zamenjajte z entitetami HTML &#42; , &#58; in &#59; oz.

#ifeq

Funkcija #ifeq ("če je enako") primerja dva niza in vrne drug niz, odvisno od rezultata primerjave. Njegova sintaksa je naslednja:

 {{#ifeq: niz za primerjavo 1 | niz za primerjavo 2 | besedilo, če je enako | besedilo, če ni enako }}

#ifexist

Funkcija #ifexist ("če obstaja", "če obstaja") je po sintaksi podobna #if , vendar se namesto pogoja preveri obstoj članka z navedenim naslovom. Preverjanje se izvede na način, ki razlikuje velike črke po pretvorbi preverjene glave v kanonično obliko (če je na začetku mala črka, se ta pretvori v velike). Na primer:

{{#ifexist: Uporabnik: Js | Član je | Ni uporabnika}} vrne Uporabnik je tam, ker obstaja stran Uporabnik: Js .
{{#ifexist: uporabnik: js | Član je | Ni uporabnika }} bo vrnil Uporabnik je tam , ker bo uporabnik: js, ko bo pretvorjen v kanonično obliko, dal Uporabnik: Js .
{{#ifexist: Uporabnik: JS | Član je | Brez člana}} bo vrnil Ni člana, ker stran Uporabnik: JS ne obstaja.

{{#ifexist}} ne deluje z relativnimi potmi, kot je / podstran .

Za imenski prostor »Datoteka« (tudi »Datoteka«, »Slika«) je preverjena samo lokalna datoteka, ne pa tudi datoteka na Wikimedia Commons . Če želite preveriti prisotnost razpoložljive datoteke tudi na Wikimedia Commons, morate uporabiti predpono "Media:".

Primer (datoteka Example.png, naložena samo na Wikimedia Commons):

{{#ifexist: Datoteka: Primer.png | imajo | no}} bo vrnil št
{{#ifexist: Slika: Primer.png | imajo | no}} bo vrnil št
{{#ifexist: Mediji: Primer.png | imajo | no}} bo vrnil da

Če je bila ustvarjena lokalna stran z opisom datoteke Wikimedia, bodo vse 3 možnosti vrnile "da".

Deluje tudi s parametri predloge.

Število klicev te funkcije na stran je omejeno. Če je presežen, stran spada v kategorijo Wikipedije : Strani s preveč klici funkcij, ki zahtevajo veliko sredstev . Število klicev funkcij na strani je treba zmanjšati.

#ifexpr

#ifexpr oceni matematični izraz in vrne enega od dveh nizov, odvisno od rezultata.

 {{#ifexpr: izraz | besedilo, če je res | besedilo sicer }}

Matematična sintaksa je enaka kot #expr .

#stikalo

#switch primerja eno vrednost z mnogimi in vrne rezultat, če se najde ujemanje. Če ujemanje ni najdeno, se vrne privzeti rezultat, določen na koncu zapisa (mora biti zadnji). Prisotnost tega rezultata je neobvezna in če manjka in se ujema, se ne vrne nič.

 {{#switch: vrednost za primerjavo
 | vrednost 1 = rezultat 1
 | vrednost 2 = rezultat 2
 | ...
 | vrednost n = rezultat n
 | privzeti rezultat
}}

Če bi moralo imeti več vrednosti enak rezultat, se lahko zapis skrajša:

 {{#switch: vrednost za primerjavo
 | vrednost 1a | vrednost 1b | ... | vrednost 1x = rezultat 1
 | vrednost 2a | vrednost 2b | ... | vrednost 2y = rezultat 2
 | ...
 | vrednost Na | vrednost Nb | ... | Vrednost Nz = N rezultat
 | privzeti rezultat
}}

#switch lahko uporabite namesto enega ali več #ifeqs :

{{#switch: a | a = res | false}} daje true
{{#ifeq: a | a | res | false}} daje true

Če primerjana vrednost ali vrednosti vsebujejo znak enakosti ( = ), #switch ne bo mogel pravilno primerjati te vrednosti in vrednosti. Če želite to narediti, morate v vrednostih (vendar ne nujno v primerjalni vrednosti) uporabiti vzorec { { = } } , ki vsebuje znak enakosti ali kodo &#61; :

{{#stikalo: 1 = 2
| 1 = 2 = surov
| 1 <nowiki> = </nowiki> 2 = nowiki
| 1 & # 61; 2 = html
| 1 {{=}} 2 = predloga
| privzeto
}}html

Če privzeti rezultat vsebuje znake "=", lahko pred njim napišete #default = .

#čas

#time je funkcija, ki vam omogoča prikaz časa in datuma v določeni obliki. sintaksa:

 {{#time: format }}
{{#čas: format | čas }}
{{#čas: format | čas | jezik }}

Parameter časa ima datum v obliki llll-mm-hh , kjer je llll leto, mm je številka meseca in hh dan v mesecu. Če parameter ni podan, se uporabita trenutni čas in datum.

Jezikovni parameter sprejema kodo jezika ISO 639 -1. Če parameter ni določen, sta ura in datum prikazana v ruščini.

Zaradi predpomnjenja lahko pride do razlike med realnim časom in prikazanim. Če želite ročno osvežiti, shranite stran brez kakršnih koli sprememb ali pojdite na http://en.wikipedia.org/wiki/ Ime_stranice ? Action = purge (za več podrobnosti glejte Wikipedia: Cache # Purge/refresh server cache ).

Parameter formata je podoben tistemu, ki se uporablja v PHP-jevi funkciji datum () :

Simbol Opis Primer trenutna vrednost
d Dan v mesecu z ničlo 04 08
D Kratko ime dneva v tednu pon sre
j Dan v mesecu brez nič 4 osem
l Polno ime dneva v tednu ponedeljek sreda
N Številka dneva v tednu ISO 8601 1 (ponedeljek) - 7 (nedelja) 3
w Številka dneva v tednu 0 (nedelja) - 6 (sobota) 3
z Dan v letu (začetek ob 0) 0—365 250
W Številka tedna ISO 8601 36
F Polno ime meseca v imenskem primeru januarja septembra
xg Rodniško polno ime meseca januarja september
m Številka meseca z ničlo 01-12 09
M Kratko ime meseca sep sep
n Številka meseca brez nič 1-12 9
t Število dni v mesecu 28-31 trideset
L Preverjanje, ali je leto prestopno 1, če je leto prestopno, sicer 0 0
Y Letnik s 4 številkami 2006 2021
y Letnik z 2 števki 06 21
a zjutraj ali zvečer am
A AM ali PM AM
g 12-urni format brez 0 1-12 12
G 24-urni format brez 0 0-23 0
h 12-urni format od 0 01-12 12
H 24-urni format c 0 00-23 00
jaz Minuta z ničlo 00-59 osemnajst
s Drugi z ničlo 00-59 23
c ISO 8601 2021-09-08T00: 18:23 + 00:00
r RFC 2822 Sreda, 8. september 2021 00:18:23 +0000
U čas UNIX 1631060303

Razširitev sintakse PHP:

Simbol Opis
xn Izpiše naslednjo številsko kodo v številko ASCII. Na primer, v hindijščini bo {{#time: “H, xnH”}} natisnil “०६, 06”.
xr Izpiše naslednjo številsko kodo z rimskimi številkami (samo za številke <3000). Na primer, {{#time: “Y, xrY”}} bo izpisalo “2021, MMXXI”.
xx črka "x"

Vsi drugi znaki bodo prikazani nespremenjeni.

  • Fraza, zaprta v dvojnih narekovajih, bo izšla brez sprememb ali narekovajev. Nezaprti narekovaji se štejejo za znake.
    • {{#time: "Danes" l}} → Danes je sreda
    • {{#time: jaz sem "}} → 18'23"
  • Poševnica nazaj deluje enako kot v funkciji PHP date () . \ H natisne H , \ " natisne " [za pojasnitev ] .

Oblika parametra časa je enaka tisti, ki se uporablja v funkciji PHP strtotime () . To so lahko absolutni in relativni datumi, na primer "11. december" [t 1] in/ali "+10 ur", ki se lahko uporabijo za prevajanje časovnih pasov. Če morate pretvoriti časovni žig UNIX v datum, pred njim postavite @ .

  • {{#čas: j xg Y | -14 dni}} → 25. avgust 2021 (pred 14 dnevi)
  • {{#čas: H: i | +4 ure}} → 04:18 (UTC + 4)
  • {{#čas: H: i | 8:15 +6 ur}} → 14:15
  • {{#čas: r | @ 1483057398}} → pet, 30. december 2016 00:23:18 +0000

rimske številke

  • {{#čas: xrU | 1970-1-1 + 61 sekund}} → LXI
  • {{#čas: xrU | @ 62}} → LXII

Opombe (uredi)

  1. Ruski datumi, kot je "11. december", trenutno ne delujejo, če jih res morate obdelati, poskusite predlogo {{ Date Converter }} .

# rel2abs

Funkcija # rel2abs pretvori relativno pot povezave v absolutno.

 {{# rel2abs: pot }}
{{# rel2abs: pot | osnovna pot }}

Relativna pot se razume kot tista, ki se začne z znaki / , ./ ali ../ , pa tudi s potmi .. in .

  • . - trenutna raven
  • .. - "pomakni se za eno stopnjo navzgor"
  • /foo - "pojdi eno raven navzdol v podimenik" foo ""

Če osnovna pot ni podana, bo uporabljena trenutna pot .

  • {{#rel2abs: ../baz | Обсуждение:Foo/bar }} → Razprava: Foo / baz
  • Če pokličete {{#rel2abs: ../baz }} na strani »Razprava: Foo / bar«, je rezultat »Razprava: Foo / baz«.
  • Če na strani »Talk: Foo« pokličete {{#rel2abs: ../baz }} , je rezultat »baz«.
  • Če na strani »Talk: Foo« pokličete {{#rel2abs: ../../baz }} , je rezultat » Napaka: napačna globina poti:« Razprava: Foo /../../ baz « (poskus dostopa do vozlišča, ki je višje od korena) ".

Da se izognete preverjanju, ali želena pot obstaja, lahko uporabite to funkcijo v kombinaciji z #ifexist :

{{#ifexist: {{#rel2abs: .. }} | «..» существует | «..» не существует }}

Če pot, posredovana funkciji kot parameter, ni identificirana kot relativna pot, jo bo funkcija vrnila kot rezultat. Na primer:

{{#rel2abs: Help:Help }} vrne "Help: Help".

#naslovni deli

Funkcija #titleparts vrne podniz pred želeno poševnico. Glavni cilj je pridobiti strani vseh nivojev, za katere je to podstran.

 {{#titleparts: naslov strani | število segmentov | začenši s (privzeto 1) }}

V primeru, ko je število segmentov enako nič, večje od števila ravni članka ali ga ni mogoče pretvoriti v številko, se vrne celoten naslov strani (ali od segmenta od do konca, če je določeno) . Opomba: Kadar koli se vrne prvi segment niza, se začne z veliko začetnico.

{{#titleparts: Обсуждение:Foo/bar/baz/quok }}Razprava: Foo / bar / baz / quok
{{#titleparts: Обсуждение:Foo /bar/baz/quok | 1 }}Razprava: Foo Glej tudi {{ ROOTPAGENAME }} .
{{#titleparts: Обсуждение:Foo/bar /baz/quok | 2 }}Razprava: Foo / bar
{{#titleparts: Обсуждение:Foo/ bar/baz /quok | 2 | 2 }}vrstica / baza
{{#titleparts: Обсуждение:Foo/ bar/baz/quok | | 2 }}bar / baz / quok

Določite lahko negativne vrednosti parametrov: za število segmentov to pomeni izključitev iz rezultata števila segmentov zadnjih delov (vseh, če jih je več od njihovega števila), saj začetek z njim pomeni začetek izhod iz - začenši s segmenta na desni.

{{#titleparts: Обсуждение:Foo/bar/baz /quok | -1 }}Razprava: Foo / bar / baz Izpustite en segment s konca vrstice. Glejte tudi {{ BASEPAGENAME }} .
{{#titleparts: Обсуждение:Foo/bar/baz/quok | -4 }} Izpustite vse 4 segmente s konca vrstice.
{{#titleparts: Обсуждение:Foo/bar/baz/quok | -5 }} Izpustite 5 segmentov s konca vrstice (več kot obstaja).
{{#titleparts: Обсуждение:Foo/bar/baz/ quok | | -1 }}quok Vrne zadnji segment. Glejte tudi {{ PODPAGENAME }} .
{{#titleparts: Обсуждение:Foo/ bar/baz /quok | -1 | 2 }}bar / baz Izpustite zadnji segment s konca vrstice in vrnite drugi in naslednji segment.
{{#titleparts: Обсуждение:Foo/bar/ baz /quok | -1 | -2 }}baz Začne kopirati iz drugega segmenta na koncu vrstice in izpusti en segment s konca vrstice.

  • Če ste na strani "Član: Foo / bar", pokličite {{#titleparts: {{FULLPAGENAME}} | 1 }} , bo rezultat "Član: Foo".
  • Če ste na strani "Član: Foo / bar", pokličite {{#titleparts: {{PAGENAME}} | 1 }} , rezultat bo "Foo".

Nizi, daljši od 255 znakov, se vedno vrnejo kot posredovani.

#iferror

 {{#iferror: izraz | napaka | ok }}

Vrne napako, če izraz vsebuje niz <strong class = "error"> , ki ga generirajo funkcije #expr , #ifexpr , #time , # rel2abs in v nekaterih drugih situacijah v MediaWiki (kot je globoka rekurzija). To je najprimernejši način za ulov neveljavnega vnosa, ki ga je treba posredovati drugi funkciji razčlenjevalnika. Na primer:

  • {{#iferror: {{#expr: 1 + 1}} | napačen vnos | pravilen izraz}}pravilen izraz
  • {{#iferror: {{#expr: 1 + Z}} | napačen vnos | pravilen izraz}}neveljaven vnos

Zadnja dva parametra sta neobvezna. Če je parameter uspešno izpuščen, bo ob uspehu vrnjen izraz . Če je tudi parameter napake izpuščen, se v primeru napake ne bo izpisalo nič, v primeru uspeha pa bo vrnjen izraz .

  • {{#iferror: {{#expr: 1 + 1}} | neveljaven vnos}}2
  • {{#iferror: {{#expr: 1 + Z}} | neveljaven vnos}}neveljaven vnos
  • {{#iferror: {{#expr: 1 + 1}}}}2
  • {{#iferror: {{#expr: 1 + Z}}}}

V to smer:

  • {{#iferror: wikitext | alternativa }} pomeni "prikaži wikibesedilo, če je pravilno, drugače pa alternativo ".
  • {{#iferror: wikitext }} pomeni "prikaži wikitext, če je pravilno."
Opomba: Ta funkcija nadomešča napako v starem predprocesorju, ki je omogočala uporabo #switch za lovljenje napak v izrazih.

Glej tudi: r29774 , r29775 , r29877 .

#prvi

Če želite del strani z imenom strani vključiti v drugo, vam mehanizem vključevanja ločenih razdelkov omogoča večjo prilagodljivost pri vključevanju vsebine nekaterih strani v druge kot popolno vključitev strani z uporabo {{: pagename}} in < noinclude > . Na strani, katere vsebina je načrtovana za vključitev v drugo, je začetek razdelka označen z < section begin= label /> , konec razdelka pa z < section end= label /> . Na strani, kjer je razdelek vključen {{#lst: ime strani | oznaka}} .

Ta mehanizem vam omogoča, da označite več razdelkov na vključeni strani in se lahko prekrivajo.

Poglej tudi

Zgodovina namestitve razširitve

Razširitev je napisal Tim Starling in jo je aprila 2006 namestil v vse Wikimedijine projekte.