Pomoč:Funkcije razčlenjevalnika kode
Iz Wikipedije, proste enciklopedije
Ta razširitev programja MediaWiki (ParserFunctions) je zbirka funkcij razčlenjevalca kode. Funkcije razčlenjevalnika kode imajo v splošnem skladnjo:
- {{#imefunkcije: argument 1 | argument 2 | argument 3 ...}}
Vsebina |
[uredi] Funkcije
Ta modul trenutno definira sedem funkcij: expr, if, ifeq, ifexist, ifexpr, switch, and time.
[uredi] #expr:
Funkcija expr izračunava matematične izraze na osnovi permutacije števil (ali spremenljivk / parametrov, ki se prevedejo v števila) in operatorjev. Z nizi ne deluje; zanje uporabite funkcijo ifeq. Skladnja je naslednja:
{{ #expr: izraz }}
Sledi seznam podprtih operatorjev. Za več podrobnosti glej m:Help:Calculation, v grobem gre za (1) grupiranje (oklepaji), (2) unarne (znaki + / - in NOT), (3) multiplikativne (*, /, div, mod), (4) aditivne (+ and -), (5) zaokrožitveni, (6) primerjalne (=, !=, <, > itd.), (7) logični AND, (8) logični OR. V istem prednostnem razredu so operatorji obravnavani z leve na desno. Kot vedno je bolje uporabiti nekaj odvečnih oklepajev kot napačno jedrnato kodo.
Operator | Operacija | Zgled |
---|---|---|
none | {{#expr: 123456789012345}} = 1.2345678901234E+14 | |
{{#expr: 0.000001}} = 1E-06 | ||
( ) | Operatorji grupiranja | {{#expr: (30 + 7) * 7 }} = 259 |
+ | Unarni znak + | {{#expr: +30 * +7}} = 210 |
- | Unarni znak - (negacija) | {{#expr: -30 * -7}} = 210 |
not | unarni NOT, logični NOT | {{#expr: not 0 * 7}} = 7 {{#expr: not 30+7}} = 7 |
* | množenje | {{#expr: 30 * 7}} = 210 |
/ | deljenje, enako kot div | {{#expr: 30 / 7}} = 4.2857142857143 |
div | deljenje, enako kot /, brez celoštevilčnega deljenja |
{{#expr: 30 div 7}} = 4.2857142857143 {{#expr: 5 div 2 * 2 + 5 mod 2}} = 6 |
mod | Modulo, ostanek po celoštevilčnem deljenju. Pozor, div in mod sta drugačna kot pri 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 |
+ | Seštevanje | {{#expr: 30 + 7}} = 37 |
- | Odštevanje | {{#expr: 30 - 7}} = 23 |
round | Zaokroži število na levi na potenco 1/10, dano na desni | {{#expr: 30 / 7 round 3}} = 4.286 {{#expr: 30 / 7 round 0}} = 4 {{#expr: 3456 round -2}} = 3500 |
= | Enako (numerično in logično) | {{#expr: 30 = 7}} = 0 |
<> | Neenako, enako kot != | {{#expr: 30 <> 7}} = 1 |
!= | Neenakost, enako kot <>, logični xor | {{#expr: 1 != 0}} = 1 |
< | Manjše | {{#expr: 30 < 7}} = 0 |
> | Večje | {{#expr: 30 > 7}} = 1 |
<= | Manjše ali enako | {{#expr: 30 <= 7}} = 0 |
>= | Večje ali enako | {{#expr: 30 >= 7}} = 1 |
and | Logični AND | {{#expr: 4<5 and 4 mod 2}} = 0 |
or | Logični OR | {{#expr: 4<5 or 4 mod 2}} = 1 |
Booleanovi operatorji obravnavajo 0 kot vrednost false (neresnično), vsa druga števila pa kot true (resnično). Pri izložku se true prikaže kot 1.
Števila so decimalno podana z "." za decimalno piko. Za spremembo decimalne pike v vejico za krajevno prilagoditev programja lahko uporabite funkcijo formatnum:
. Znanstvena notacija z eksponentom E plus za izraze še ni podprta, uporablja pa se pri izložku. Za podrobnosti glej m:Help:Calculation.
[uredi] #if:
Funkcija if je konstrukt vrste če-potem-sicer. Njena skladnja je:
{{ #if: <pogoj> | <potem> | <sicer> }}
Če je pogoj prazen niz ali sestoji le belih znakov, se obravnava kot neresnično in programje vrne besedilo sicer. Sicer vrne besedilo potem. Besedilo sicer lahko izpustite, pri čemer bo, kadar bo pogoj neresničen, rezultat prazen.
Zgled:
{{Predloga|parameter=nekaj}} {{Predloga}} {{Predloga|parameter=}} | | | | | | | | | {{ #if: {{{parameter|}}} | Parameter je podan. | Parameter ni podan ali je prazen }}
Vedite, da funkcija if ne podpira znakov = ali matematičnih izrazov. {{#if: 1 = 2|da|ne}} vrne vrednost da, ker niz 1 = 2 ni prazen. Funkcija je namenjena kot struktura če ni prazno.
[uredi] #ifeq:
Funkcija ifeq primerja dva niza ali števili in glede na rezultat primerjave vrne drug niz. Skladnja je:
{{ #ifeq: <besedilo 1> | <besedilo 2> | <enako besedilo> | <neenako besedilo> }}
Kadar je oba niza mogoče tolmačiti kot število, je rezultat številčen. Za primerjavo nizov dodajte znake, ki jih kot število ni mogoče tolmačiti:
- {{ #ifeq: +07 | 007 | 1 | 0 }} da 1
- {{ #ifeq:"+07"|"007"| 1 | 0 }} da 0
- Zaradi skladnosti s starejšimi predlogami funkcija #if: ne more neposredno ločevati podanih in nepodanih vrednosti parametrov. Gre za bližnjico za primerjavo s praznim nizom. Nepodane parametre je mogoče neposredno odkriti s funkcijo #ifeq::
- {{ #if: {{{x| }}}|neprazno|prazno}} = prazno,
- {{ #ifeq: {{{x| }}}| |prazno|neprazno}} = prazno,
- {{ #ifeq: {{{x| }}}|{{{x|u}}}|podano|nepodano}} = nepodano.
- Nedoločen parameter brez privzete vrednosti šteje v primerjavi kot niz, ki sestoji iz oznake:
- {{ #ifeq: {{{x}}}|{{ concat|{|{|{x}|}|} }}|1|0}} = 0.
[uredi] #ifexist:
Funkcija ifexist vrne enega od dveh rezultatov, glede na to, ali vpisani naslov obstaja ali ne. Veljajo običajna pravila za razlikovanje velikosti črk: kadar stran obstaja, da pozitiven rezultat tudi nekanonično ime strani. Zgled na Meta:
{{#ifexist:Zima|Bar|RFC 3092}}
vrne Bar, kajti Zima obstaja{{#ifexist:zima|Bar|RFC 3092}}
vrne Bar, saj je zima v kanonični obliki obstoječi Zima{{#ifexist:ZIMA|Bar|RFC 3092}}
vrne RFC 3092, saj ZIMA ne obstaja{{#ifexist:ParserFunctions|Hvala|Ne}}
vrne Hvala.{{#ifexist:m:Help:Calculation|Da|Ups}}
vrne zaradi interwiki-predpone, čeprav m:Help:Calculation obstaja, Ups.
Prvi parameter je naslov, ki ga naj programje išče, drugi je pozitivni rezultat, tretji pa negativni rezultat. Kadar vpisani parameter ne vrne veljavnega naslova objekta, je rezultat negativen.
Enak rezultat da Predloga:exists (pogovor, povratne povezave, uredi), razen da je rezultat za interwiki-povezavo pozitiven. To razliko lahko izkoristite z Predloga:if interwiki link (pogovor, povratne povezave, uredi).
[uredi] #ifexpr:
ifexpr obravnava matematični izraz in glede na rezultat vrne enega od dveh nizov.
{{#ifexpr: <izraz> | <potem> | <sicer> }}
Če je rezultat izraza nič, funkcija vrne besedilo sicer, drugače pa besedilo potem. Skladnja izraza je enaka kot za expr.
- Trenutno da besedilo sicer tudi prazen izraz:
{{#ifexpr: {{ns:0}}|Kruh|'''sicer'''}}
da sicer- Če izpustite tako besedilo potem kot besedilo sicer, izložka ni, razen morda sporočilo o napaki. S tem lahko preverite pravilnost izraza oziroma besedilo sporočila o napaki (posnemane trditve, prisiljene napake):
{{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|1|0}}}}
Division by zero{{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|0|1}}}}
{{#if:{{#ifexpr: 1=2}}|napačno|pravilno}}
pravilno{{#if:{{#ifexpr: 1E2}}|napačno|pravilno}}
napačno{{#if:{{#ifexpr: 1/0}}|napačno|pravilno}}
napačno{{#if:{{#ifexpr: a=b}}|napačno|pravilno}}
napačno
[uredi] #switch:
Funckija switch
primerja posamezno vrednost z več drugimi in vrne niz, če najde par. Skladnja je v osnovi:
{{ #switch: <primerjalna vrednost> | <vrednost1> = <rezultat1> | <vrednost2> = <rezultat2> | ... | <vrednostn> = <rezultatn> | <privzeti rezultat> }}
switch
išče po danih vrednostih, dokler ne najde para s primerjalno vrednostjo. Ko ga najde, vrne rezultat za to vrednost (besedilni niz po enačaju). Kadar ne najde nobenega para, vendar pa zadnji predmet vsebuje enačaj, vrne kot privzeto vrednost slednjega. Kadar rezultat mora vsebovati enačaj, lahko uporabite #default
:
{{ #switch: <primerjalna vrednost> | <vrednost> = <rezultat> | #default = <privzeti rezultat> }}
Mogoče je oblikovati tudi izpuščene vrednosti (kar zmanjša potrebo po podvajanju rezultatov). Zgled:
{{ #switch: <primerjalna vrednost> | <vrednost1> | <vrednost2> | <vrednost3> = <rezultat3> | ... | <vrednostn> = <rezultatn> | <rezultat po privzetem> }}
Vrednost1 in vrednost2 ne vsebujeta enačaja. Če se ujemata, dobita rezultat za vrednost3 (t.j., kar koli je v rezultat3).
- Pri #ifeq: je primerjava numerična, kjer je le mogoče:
- {{ #switch: +07 | 7 = Da | 007 = Vez | Ne }} da Da
- {{ #switch:"+07"|"7"= Da |"007"= Vez | Ne }} da Ne
- Ujemajoča se vrednost je lahko prazna, zato sta naslednja konstrukta enakovredna:
- {{ #if: {{ns:0}} | neprazno | prazno }} da prazno
- {{ #switch:{{ns:0}}|=prazno|neprazno }} da prazno
[uredi] #time:
Funkcija #time je funkcija za oblikovanje časa in datuma. Njena skladnja je bodisi
- {{ #time: oblika }}
or
- {{ #time: oblika | čas }}
Kadar čas ni določen, se uporabi čas, ob katerem je bil članek pretvorjen v HTML-kodo. Ta čas se lahko zaradi predpomnjenja razlikuje za teden dni od časa, ko je bil članek prikazan, zato so lahko potrebne ročne posodobitve. To dosežemo s shranjenjem strani, ne da bi napravili kakršno koli spremembo (ničelno urejanje).
Parameter oblika je niz oblike, podoben tistemu, kot ga uporablja PHP-jev datum.
Naslednje kode za oblike imajo enako vrednost kot v PHP. Pomembno razlikovanje od delovanja PHP, razen glede internacionalizacije (t.j. jezikovne in krajevne prilagoditve), je napaka razčlenjevalnika kode in o njej obvestite razvijalce programja. Vse numerične kode za obliko vrnejo števila, oblikovana v skladu s krajevnim jezikom. To lahko povozite s kodo xn, kot je opisano spodaj.
Koda | Opis | Zgled izložka |
---|---|---|
d | Dan v mesecu, z ničlo. | 04 |
D | Okrajšava za dan v tednu. Le redko krajevno prilagojeno. | Pon |
j | Dan v mesecu, brez ničle. | 3 |
l | Popolno ime dneva v tednu. Le redko krajevno prilagojeno. | Ponedeljek |
F | Popolno ime meseca. Pogosto krajevno prilagojeno. | Januar |
m | Zaporedna številka meseca, z ničlo. | 01 do 12 |
M | Okrajšava za ime meseca. Pogosto krajevno prilagojeno. | Jan |
n | Številka meseca, brez ničle. | 1 do 12 |
Y | Leto, s štirimi ničlami. | 2006 |
y | Leto, z dvema ničlama. | 06 |
H | Ura v dnevu, z ničlo. | 00 do 23 |
i | Minuta, brez ničle. | 00 do 59 |
s | Sekunda, brez ničle | 00 do 59 |
Naslednje kode za obliko so razširitve skladnje PHP:
Koda | Opis |
---|---|
xn | Oblikuje naslednjo numerično kodo kot surovo ASCII-število. Zgled: v hindiju {{ #time:H, xnH}} vrne ०६, 06. |
xr | Oblikuje naslednjo numerično kodo kot rimsko številko. |
xg | Vrne ime meseca v rodilniku. Namenjeno jezikom, kjer obstaja za taka imena razlika med rodilnikom in imenovalnikom. |
xx | Dobesedni x |
Kateri koli neprepoznani znak bo vrnjen nespremenjen. Za pridobitev dobesednih znakov lahko uporabite tudi dva dogovora o navajanju.
- Znaki v parnih narekovajih se obravnavajo dobesedno (narekovaji se odstranijo). Neparni narekovaji se obravnavajo kot dobesedni navedek. Zgled:
- {{ #time: "Trenutni mesec je" F}} → Trenutni mesec je Januar
- {{ #time:i's"}} → 20'11"
- Podprta je tudi izpustitev z levo poševnico, kot deluje pri datumih v PHP. \H vrne dobesedni H, \" vrne dobesedni ".
V prihodnosti bo glede na potrebe uporabnikov razširitve morda dodanih še več kod za obliko. To lahko pomeni bolj popolno uvedbo kod PHP za obliko ali dodatne kode x.
Oblika parametra čas je identična obliki, ki jo uporablja strtotime() v PHP. Podpira tako absolutne kot relativne datume, npr. "December 11" in / ali "+10 hours", kar lahko uporabite na primer za prilagoditev časovnega pasu. Za več podatkov gleje priročnik tar GNU.
[uredi] Zgledi
- {{#time:j F Y|-14 days}} vrne 8 december 2006 (pred 14 dnevi)
- {{#time:H:i|+6 hours}} gives 02:56 (6 ur kasneje kot UTC)
- {{#time:H:i|8:15 +6 hours}} gives 14:15
[uredi] Opombe
Večina opaženih težav se izkaže za splošne težave, ki niso omejene na funkcije razčlenjevalnika.
[uredi] Substitucija
Uporaba subst: je pri funkcijah razčlenjevalnika mogoča, če le med subst: in # ni presledka. Za podrobnosti glej m:Help:Substitution. Vedite, da razen ob uporabi tehnike, kot je neobvezna substitucija, substitucija predloge s funkcijami razčlenjevalnika teh funkcij ne zamenja z njihovim rezultatom. To je pogosto neželeno.
Tako kot na druge funkcije z dvopičjem tudi funkcije razčlenjevalnika na predvidljiv način ovira hrošč 5678. Na kratko gre za to, da lahko nedefinirane parametre prepišejo ustrezajoči parametri. Za podrobnosti glej m:ParserFunctions/5678 in stran o substituciji. Substitucija je edini primer, kjer je to osrednjega pomena v zvezi s privzetimi vrednostmi parametrov. Na podane parametre to ne vpliva.
[uredi] Razpredelnice
V pogojnih konstruktih wikiskladnja z navpičnicami trenutno še ne deluje. Pomagate si lahko z dvema obhodnima potema:
- Navpičnico lahko pred funkcijami razčlenjevalnika skrijete tako, da jo postavite v predlogo. Zgled je npr. Predloga:Tim na w:sl:.
- Uporabite lahko tudi HTML-skladnjo za razpredelnice.
- Popolnoma prazne vrstice ali stolpci se ne prikažejo (glej tudi m:Help:Table). Prazne celice lahko na straneh, na katere ne vpliva hrošč 5569, preoblikujete tudi v lažne celice .
Sicer pa sta bila | in = v predlogah vedno težavna za uporabo.
Kadar odpove vse drugo, poskusite v svojih LocalSettings.php
nastaviti $wgUseTidy=true;
.
[uredi] Izrazi
- div se za celoštevilčno deljenje ne uporablja več in je odvečen. Za realna deljenja uporabite / (poševnico).
- mod uporablja PHP-jev operator %, ki se razlikuje od modulo-operatorjev v vseh drugih programskih jezikih. Glej tudi Predloga:Tim in hrošč 6068.
- mod včasih vrne napačne rezultate pri istih vnesenih vrednostih. Glej hrošč 6356 in /MOD10000. Posodobitev: zdi se, da pri vrednostih pod 1E+12 ni težav.
- Veljavne rezultate funkcije #expr:, kot je 1E-07, vnos za #expr: še ne podpira:
- {{#expr:1E-07}} da Expression error: Unrecognised word "e".
- round 0 da v nekaterih okoliščinah namesto vrednosti 0 vrednost -0. Pri izrazu x se tej nenavadnosti izognete z vpisom 0+(x).
[uredi] Pogojni beli znaki
Ker pogojniki ob navpičnicah (ne pa tudi parametrih predloge) odstranijo uvodne in zaključne bele znake, ni takoj jasno, kako pogojno vstaviti beli znak ali zaporedje belih znakov.
Predpostavimo, da želimo bodisi par novih vrstic ali posamezen presledek na osnovi pogoja:
"Želim nov odstavek točno{{#if: odstavek| | }}tukaj."
- "Želim nov odstavek točno tukaj."
- "Želim nov odstavek točnozačetek-
-konectukaj."
Težavo rešimo tako, da v pogojnik vpišemo za razčlembo med belim znakom in navpičnico nekaj, kar se ne tiska (vendar ni beli znak), npr. prazno oznako nowiki:
"Želim nov odstavek točno{{#if: odstavek|<nowiki/> <nowiki/>|<nowiki/> <nowiki/>}}tukaj."
- "Želim nov odstavek točno
- tukaj."
Opomba: vstavitev presledka v nasprotju z belimi znaki ni tako zapletena. Kjer ga želite uporabiti, preprosto vpišite
.
[uredi] Glej tudi
- m:Help:Calculation
- m:Help:Magic words
- m:StringFunctions
- m:DynamicFunctions
- m:Category:Templates using ParserFunctions
- sl:Kategorija:Predloge s ParserFunctions