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

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Вікіпедія:Парсерні функції)
Перейти до навігації Перейти до пошуку

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

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

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

Функції

[ред. | ред. код]

Функція 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-then-else. Її синтаксис такий:

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

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

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

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

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

#ifexist:

[ред. | ред. код]

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

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

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

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

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

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

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: format }}

або

{{ #time: format | time }}

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

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

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

Символ Опис Приклад Поточне значення (очистити кеш для оновлення)
d День місяця з нулем. 04 27
D Коротка назва дня тижня. Пн Нд
j День місяця без нуля. 4 27
l Повна назва дня тижня. понеділок неділя
N Номер дня тижня ISO 8601 1 (понеділок) — 7 (неділя) 7
w Номер дня тижня 0 (неділя) — 6 (субота) 0
z Номер дня року (починаючи з 0) 0—365 300
W Номер тижня ISO 8601 43
F Повна назва місяця в називному відмінку. січень жовтень
xg Повна назва місяця в родовому відмінку. січня жовтня
m Номер місяця з нулем. 01—12 10
M Коротка назва місяця. вер жов
n Номер місяця без нуля. 1—12 10
t Кількість днів в місяці 28—31 31
L Перевірка чи є рік високосним 1 якщо рік високосний, інакше 0 1
Y Рік з 4 цифрами. 2007 2024
y Рік з 2 цифрами. 07 24
a am або pm am
A AM або PM AM
g 12-годинний формат без 0 1—12 4
G 24-годинний формат без 0 0—23 4
h 12-годинний формат з 0 01—12 04
H 24-годинний формат з 0 00—23 04
i Хвилина з нулем. 00—59 28
s Секунда з нулем. 00—59 57
c ISO 8601 2024-10-27T04:28:57+00:00
r RFC 2822 Sun, 27 Oct 2024 04:28:57 +0000
U UNIX-час 1730003337

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

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

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

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

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

  • {{ #time: j xg Y | -14 days }} → 13 жовтня 2024 (14 днів тому)
  • {{ #time: H:i | +4 hours }} → 08:28 (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" );

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

Посилання

[ред. | ред. код]

Див. також

[ред. | ред. код]