Довідка:Функції парсера

(Перенаправлено з Вікіпедія:ПФ)

У квітні 2006 року у всіх проєктах фонду «Вікімедіа» встановлено розширення ParserFunctions, написане Тімом Старлінгом.

Цей модуль містить набір функцій парсера. Загальний синтаксис цих функцій такий:

{{#функція: аргумент 1 | аргумент 2 | аргумент 3…}}

Функції

#expr:

Функція expr виконує математичні обчислення над числами або змінними/параметрами, що приводяться до чисел.. Синтаксис:

{{ #expr: вираз }}

Підтримуються наступні оператори (перелічені в порядку, приблизно відповідному їх пріоритету):

ОператорДіяПриклад
{{#expr: 123456789012345}} = 1.2345678901234E+14
{{#expr: 0.000001}} = 1.0E-6
()Оператори групування{{#expr: (30 + 7) * 7 }} = 259
+Унарний знак +{{#expr: +30 * +7}} = 210
-Унарний знак - (інвертування знаку){{#expr: -30 * -7}} = 210
notУнарне або логічне НЕ{{#expr: not 0 * 7}} = 7
{{#expr: not 30+7}} = 7
*Множення{{#expr: 30 * 7}} = 210
/Ділення, еквівалент div{{#expr: 30 / 7}} = 4.2857142857143
divДілення, еквівалент /,
цілочисельного ділення немає
{{#expr: 30 div 7}} = 4.2857142857143
{{#expr: 5 div 2 * 2 + 5 mod 2}} = 6
modОстача від ділення, яке виконується над операндами, у яких відкинуті дробові частини.
Зверніть увагу, що div і mod працюють не так, як у звичайних мовах програмування.
{{#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
+Додавання{{#expr: 30 + 7}} = 37
-Віднімання{{#expr: 30 - 7}} = 23
roundЗаокруглення лівого операнда до 1/10 в степені числа, вказаного справа{{#expr: 30 / 7 round 3}} = 4.286
{{#expr: 30 / 7 round 0}} = 4
{{#expr: 3456 round -2}} = 3500
=Рівність (чисельне і булеве порівняння){{#expr: 30 = 7}} = 0
<>Нерівність, еквівалент !={{#expr: 30 <> 7}} = 1
!=Нерівність, еквівалент <> і логічного xor{{#expr: 1 != 0}} = 1
<Менше{{#expr: 30 < 7}} = 0
>Більше{{#expr: 30 > 7}} = 1
<=Менше або рівне{{#expr: 30 <= 7}} = 0
>=Більше або рівне{{#expr: 30 >= 7}} = 1
andЛогічне І{{#expr: 4<5 and 4 mod 2}} = 0
orЛогічне АБО{{#expr: 4<5 or 4 mod 2}} = 1

Як завжди, краще поставити зайві дужки, ніж сушити голову над порядком обчислення

На виведенні логічних змінних 0 означає брехню, а 1 — істину.

Наприклад:

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

видає:

38

Виконано перетворення 100° за Фаренгейтом в градуси за Цельсієм з округленням до найближчого цілого числа.

#if:

Функція if (англ. якщо) служить для створення конструкцій вигляду if-then-else. Її синтаксис такий:

{{ #if: <умова> | <текст, якщо умова істинна> | <текст, якщо умова помилкова> }}

Якщо умова — порожній рядок або складається тільки з пропусків, вважається, що умова не виконана, і повертається текст, якщо умова помилкова; якщо задана умова істинна, то при його виконанні повертається текст, якщо умова істинна. Останній параметр може бути опущений — в цьому випадку за помилкової умови буде повернений порожній рядок.

Зверніть увагу, що if не підтримує порівняння за допомогою «=» і інших математичних операцій. Так, {{#if: 1 = 2|так|ні}} поверне «так», оскільки рядок «1 = 2» не порожній. Для порівняння рядків використовуйте ifeq. Для порівняння чисел використовуйте ifexpr.

#ifeq:

Функція ifeq порівнює два рядки, повертаючи ще один рядок залежно від результату порівняння. Її синтаксис такий:

{{ #ifeq: <рядок для порівняння 1> | <рядок для порівняння 2> | <текст, якщо рівні> | <текст, якщо не рівні> }}

#ifexist:

Функція ifexist схожа за синтаксисом на if, тільки замість умови перевіряється існування сторінки з вказаним заголовком. Перевірка виконується з урахуванням регістру після приведення заголовка, що перевіряється, до канонічного вигляду (якщо на початку стоїть мала буква, то вона перетвориться на велику). Наприклад:

{{#ifexist:Вікіпедія:Довідка|Існує|Немає}} поверне Існує, оскільки сторінка Вікіпедія:Довідка існує.
{{#ifexist:вікіпедія:довідка|Існує|Немає}} поверне Існує, оскільки Вікіпедія:довідка при приведенні до канонічної форми дасть Вікіпедія:Довідка.
{{#ifexist:Вікіпедія:ДОВідка|Існує|Немає}} поверне Немає, оскільки сторінка Вікіпедія:ДОВідка не існує.

{{#ifexist}} не працює з відносними шляхами типу /підсторінка.

#ifexpr:

ifexpr обчислює математичний вираз і повертає один з двох рядків залежно від результату.

{{ #ifexpr: <вираз> | <текст, якщо істина> | <текст інакше> }}

Якщо результат обчислень рівний нулю — повертається другий текст, інакше — перший. Математичний синтаксис такий же, як у expr.

#switch:

switch порівнює одне значення з багатьма, повертаючи результат якщо знайдений збіг.

{{#switch: <comparison value> | <value1> = <result1> | <value2> = <result2> | ... | <valuen> = <resultn> | <default result>}}

#switch може використовуватися замість #ifeq:

{{#switch:a | a=true | false }} дає true
{{#ifeq:a | a | true | false }} дає true

#time:

#time — функція форматує час і дату. Синтаксис:

{{ #time: format }}

або

{{ #time: format | time }}

Якщо час не заданий, то використовується поточний.

Через кешування можлива відмінність між реальним часом і відображеним. Для ручного оновлення збережіть сторінку, не роблячи ніяких змін, або перейдіть за адресою http://uk.wikipedia.org/wiki/Назва_сторінки?action=purge

Аргумент format подібний до використовуваного у функції PHP date

СимволОписПрикладПоточне значення (очистити кеш для оновлення)
dДень місяця з нулем.0414
DКоротка назва дня тижня.ПнВт
jДень місяця без нуля.414
lПовна назва дня тижня.понеділоквівторок
NНомер дня тижня ISO 86011 (понеділок) — 7 (неділя)2
wНомер дня тижня0 (неділя) — 6 (субота)2
zНомер дня року (починаючи з 0)0—365134
WНомер тижня ISO 860120
FПовна назва місяця в називному відмінку.січеньтравень
xgПовна назва місяця в родовому відмінку.січнятравня
mНомер місяця з нулем.01—1205
MКоротка назва місяця.вертрав
nНомер місяця без нуля.1—125
tКількість днів в місяці28—3131
LПеревірка чи є рік високосним1 якщо рік високосний, інакше 01
YРік з 4 цифрами.20072024
yРік з 2 цифрами.0724
aam або pmam
AAM або PMAM
g12-годинний формат без 01—1212
G24-годинний формат без 00—230
h12-годинний формат з 001—1212
H24-годинний формат з 000—2300
iХвилина з нулем.00—5929
sСекунда з нулем.00—5944
cISO 86012024-05-14T00:29:44+00:00
rRFC 2822Tue, 14 May 2024 00:29:44 +0000
UUNIX-час1715646584

Розширення PHP синтаксису:

СимволОпис
xnВиводить наступний числовий код в ASCII число. Наприклад, на мові хінді {{ #time:«H, xnH»}} виведе «०६, 06».
xrВиводить наступний числовий код римськими цифрами (тільки для чисел <3000). Наприклад, {{ #time:«Y, xrY»}} виведе «2024, MMXXIV».
xxБуква «x»

Всі інші символи будуть виведені без змін.

  • Фраза в подвійних лапках буде виведена без змін і лапок. Незакриті лапки вважатимуться символами.
    • {{ #time: "Сьогодні" l}} → Сьогодні вівторок
    • {{ #time:i’s"}} → 29’44"
  • Похилена вліво риска працює так само як і з PHP date(). \H виводить H, \" виводить ".

Формат параметра time ідентичний використовуваному в PHP strtotime(). Це можуть бути абсолютні і відносні дати, наприклад «11 грудня» і/або «+10 hours», що може використовуватися для перекладу часових зон.

  • {{ #time: j xg Y | -14 days }} → 30 квітня 2024 (14 днів тому)
  • {{ #time: H:i | +4 hours }} → 04:29 (UTC+4)
  • {{ #time: H:i | 8:15 +6 hours }} → 14:15

#rel2abs:

Функція #rel2abs перетворить відносний шлях посилання в абсолютний.

{{ #rel2abs: | path }}

Під відносним шляхом приймається такий, який починається з символів '/', './' або '../', а також просто '..' або '.'.

Приклад:

  • Якщо знаходитися на стор. Help:Foo/bar і викликати {{#rel2abs: ../baz}}, результатом повинно стати Help:Foo/baz
  • Якщо знаходитися на стор. Help:Foo і викликати {{#rel2abs: ../baz}}, результатом повинно стати baz
  • Якщо знаходитися на стор. Help:Foo і викликати {{#rel2abs: ../../baz}}, результатом повинно стати Помилка: неправильна глибина шляху: «Help:Foo/../../baz» (спроба доступу до вузла, що знаходиться вище, ніж кореневий)

Щоб не перевіряти, чи існує шуканий шлях, можна використовувати цю функцію в комбінації з #ifexist:

{{#ifexist: {{#rel2abs: ..}} | '..' exist | '..' does not exist}}

Якщо шлях, передаваний на вхід функції як параметр, не ідентифікований як відносний шлях, функція його поверне як результат. Наприклад:

{{#rel2abs: Help:Help}} повертає 'Help:Help'

#titleparts:

Функція #titleparts повертає підрядок до потрібного слеша. Основною метою є можливість отримання сторінок всіх рівнів, для яких дана є підсторінкою.

{{ #titleparts: title | bits }}

У разі, коли параметр bits рівний нулю, більше кількості рівнів статті або його неможливо перетворити в число, повертається title

Приклад:

  • {{#titleparts:Стаття/foo/bar|1}} поверне результат результат Стаття
  • {{#titleparts:Стаття/foo/bar|2}} поверне результат результат Стаття/foo
  • Якщо знаходитися на стор. Користувач:Foo/bar і викликати {{#titleparts:{{FULLPAGENAME}}|1}}, результатом повинно стати Користувач:Foo.
  • Якщо знаходитися на стор. Користувач:Foo/bar і викликати {{#titleparts:{{PAGENAME}}|1}}, результатом повинно стати Foo.

#iferror:

{{#iferror: вираз | при помилці | якщо правильно }}

Повертає при помилці якщо вираз містить <strong class="error"> згенеровану #expr, #ifexpr, #time, #rel2abs, чи якимись іншими ситуаціями MediaWiki (наприклад, рекурсією або нескінченними циклами). Буває корисним для перехоплення неправильного вводу в парсерних функціях. Наприклад:

  • {{#iferror:{{#expr:1+1}}|невірний ввід|правильний вираз}} видає правильний вираз
  • {{#iferror:{{#expr:1+Z}}|невірний ввід|правильний вираз}} видає невірний ввід

Останні два параметрами не є обов'язковими. Якщо параметр якщо правильно опущено, то видається вираз. Якщо параметр при помилці теж опущений, при помилці нічого не виводиться, а при правильному виразі повертається вираз.

  • {{#iferror:{{#expr:1+1}}|невірний ввід}} видає 2
  • {{#iferror:{{#expr:1+Z}}|невірний ввід}} видає невірний ввід
  • {{#iferror:{{#expr:1+1}}}} видає 2
  • {{#iferror:{{#expr:1+Z}}}} видає

Тому:

  • {{#iferror: вікітекст | альтернатива }} означає відображення вікітексту при коректному вводі, інакше відображення альтернативи.
  • {{#iferror: вікітекст }} означає відображення вікітексту при коректному вводі".

Інші

ФункціяОпис
{{#babel:code1|code2|...}}Відображає юзербокси ваших знань мов. Як його альтернатива — шаблон {{Babel}}.
{{#coordinates:arg1|arg2|...}}Зберігає географічні координати предмету у базу даних сторінок. Використано у шаблоні {{coord}}.
{{#invoke:module|function|arg1|arg2 |...}}Викликає (Lua) функцію в модулі Scribunto
{{#language:lang code 1|lang code 2}}відображає назву мови за мовним кодом її власною мовою, або мовою коду lang code2.
{{#property:arg1|arg2|...}} Включає властивість Вікіданих із прив'язаної сторінки (Вікіданих). Код властивості передається як аргумент. Напр. {{#property:P21}} виведе стать людини, якщо така властивість вказана на прив'язаній сторінці Вікіданих.
Виклик {{#property:P21|from=Q239864}} повертає жіноча — стать Джун Гевок (на Вікіданих Q239864).
{{#special:userlogin}} = Спеціальна:Вхід[MW1.? r17321+] Локальна назва наданої спеціальної сторінки.
{{#tag:tagname|content|attr1="val1"|attr2="val2"}} =

<tagname attr1="val1" attr2="val2">content</tagname>

[MW1.12+, r29482] Перетворює атрибути та вміст у тег в стилі XML. Дивіться також Дефект 2257 та Розширення:TagParser.
{{#target:fullpagename}}Send a message to a list talk pages on the fullpagename, using the MassMessage function.
{{int:pagename}} Transclude a page from the MediaWiki namespace interface according to the user's language preferences. Наприклад, a system message.

Встановлення

Заладуйте усі п'ять вказаних нижче файлів і встановіть їх у нову директорію ParserFunctions в директорії розширень MediaWiki.

Потім додайте в кінець файлу LocalSettings.php рядок

require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );

Дерево коду можна подивитися тут:

Посилання

Див. також

🔥 Top keywords: Головна сторінкаФайл:XHamster logo.svgДень вишиванкиPorno for PyrosСпеціальна:ПошукВишиванкаЮрай ЦинтулаНова КаледоніяВовчанськУсик Олександр ОлександровичТайсон Ф'юріУкраїнаТериторіальний центр комплектування та соціальної підтримкиФайл:XVideos logo.svgРоберт ФіцоYouTubeБудинок «Слово»Nemo (співак)МіГ-31БріджертониВійськово-облікова спеціальністьПісенний конкурс Євробачення 2024Всесвітній день вишиванкиТайсон Ф'юрі — Олександр УсикНебінарний гендерБудинок «Слово» (фільм, 2021)Микола ХвильовийFacebook125-та окрема бригада територіальної оборони (Україна)Шевченко Тарас ГригоровичПриродні заповідники УкраїниТварини Червоної книги УкраїниРосійське вторгнення в Україну (з 2022)Марко ВовчокСкуфЛеся УкраїнкаРослини Червоної книги УкраїниРозстріляне відродженняВійськові звання України