From Test-Scratch-Wiki
Розширення ParserFunctions додає ще більше функцій парсера до магічних слів, розпізнаваних рушієм вікі. Типовий синтаксис функцій парсера такий:
{{#functionname:argument 1|argument 2|argument 3 ...}}}
#expr
- Головна стаття: Довідка:Обчислення
Функція #expr (від англ. expression, тобто вираз) обчислює певний математичний вираз. Звернутися до неї можна так: {{#expr|вираз}}
. Вираз для обчислення задається відповідним параметром, результат обчислення підставляється замість цього виклика функції. Якщо обчислення неможливе математично, результатом буде повідомлення про помилку. Булеві функції розглядають нуль як хибу і будь-яке інше число як істину. Порожній вираз повертає порожню відповідь.
Код | Відображення | Пояснення |
---|---|---|
{{#expr:5+5}}
|
10 | П'ять плюс п'ять дорівнює десяти. |
{{#expr:8/0}}
|
Division by zero. | Ділення на нуль неможливе, отже, помилка. |
{{#expr: }}
|
Порожній вираз веде до порожнього результату обчислення. | |
{{#expr:5 and 0}}
|
0 | У булевих значеннях 5 – це істина, а 0 – це хиба. Отже, результатом обчислення буде хиба (0). |
#if
Функція обчислює текстове поле і перевіряє, чи воно вийшло порожнім. Якщо це так, повертається одне значення; в іншому разі – інше значення. Ці значення теж задаються як аргументи. Пропуск вважається порожнім значенням. Текстові параметри розглядаються як звичайни текст. Повний синтаксис функції такий:
{{#if:string|якщо значення string не порожнє|якщо значення string порожнє}}
Код | Відображення | Пояснення |
---|---|---|
{{#if: |Так|Ні}}
|
Ні | Текстове поле після двокрапки порожнє (містить лише пропуски), отже, результатом буде Ні. |
{{#if:тут щось|Так|Ні}}
|
Так | Текстове поле після двокрапки не порожнє, отже, результатом буде Так. |
{{#if:а й|Так|Ні}}
|
Так | Текстове поле після двокрапки не порожнє (містить текст), результат: Так. |
#ifeq
Ця функція (від англ. if equal) обчислює два текстові значення й перевіряє, чи вони однакові. Повний синтаксис її такий:
{{#ifeq:string|string2|результат, якщо однакові|результат, якщо різні}}
Не записуй теги HTML в текстові поля string, string2 (теги парсера заміняться і не збігатимуться один із одним). Числова відповідь і символьна відповідь розрізняються; числа порівнюються як числа (01 те ж саме, що 1), а текстові значення містяться в лапках, розрізняють великі й малі літери і порівнюються як текст, тож 01 і 1 будуть різними значеннями. Всі числа при порівняння перетворюютсяь на цілі, тому дозволений інтервал – не більше 9E18 за абсолютною величиною.
Код | Відображення | Пояснення |
---|---|---|
{{#ifeq: 0| 0 |Так|Ні}}
|
Так | Числові значення порівнюються як числа, пропуски несуттєві. |
{{#ifeq: "0 "|" 0 "|Так|Ні}}
|
Ні | У текстових значеннях пропуски суттєві. Результатом буде Ні. |
{{#ifeq: ку ку|куку|Так|Ні}}
|
Ні | Символьні значення, у лапках чи без них, порівнюються як текст, пропуски суттєві. |
{{#ifeq: Бе|бе|Так|Ні}}
|
Ні | Великі й малі літери розрізняються. |
#iferror
Інші функції, зокрема й #expr, повертають повідомлення про помилку, якщо щось йде не так. Ця функція перевіряє, чи функція всередині її повернула повідомлення про помилку. Повний синтаксис такий:
{{#iferror:вираз|якщо помилка|якщо помилки нема}}
Параметри її (після вертикальної риски) необов'язкові, їх можна не писати разом із рисками. Якщо залишити тільки один, він буде першим і відобразиться в разі помилки, а за її відсутності буде відображено результат обчислення виразу. Якщо не вказати жодного, замість повідомлення про помилку буде не відображено нічого.
Код | Відображення | Пояснення |
---|---|---|
{{#iferror: {{#expr:5+5}} |пом|нема}}
|
нема | Вираз 5+5 синтаксично правильний і обчислюваний, тому відобразиться 'нема'. |
{{#iferror: {{#expr:abc}} |пом|нема}}
|
пом | Вираз abc є непридатним для обчислення, тому відобразиться 'пом'. |
{{#iferror: {{#expr:2/8}} |пом}}
|
0.25 | Вираз 2/8 синтаксично коректний і обчислюваний. За відсутності параметру буде відображено результат його обчислення. |
{{#iferror: {{#expr:@#$^&*}} |пом}}
|
пом | Вираз @#$^&* синтаксично некоректний для обчислення, відобразиться 'пом'. |
{{#iferror: {{#expr:2^3}}}}
|
8 | Вираз 2^3 правильний і обчислюваний. Буде відображено його результат. |
{{#iferror: {{#expr:=}} }}
|
Вираз = синтаксично некоректний для обчислення. За відсутності параметрів не буде відображено нічого. | |
{{#iferror:<span class="error">a</span>|пом|нема}}
|
пом | Ця функція знаходить помилкові класи. Клас "error" із таких (не визначений), функція відобразить 'пом'. |
#ifexpr
Ця функція (англ. if expression [істинне/хибне]) обчислює вираз і потім повретає один із двох параметрів. Повний синтаксис такий:
{{#ifexpr:вираз|якщо істинний|якщо хибний}}
Вираз розбирається так само, як у #expr, і порожній текстовий результат або числовий результат 0 відповідають хибі. Все інше відповідає істині. Другий параметр можна не писати, тоді при обчисленні хиби не відобразиться нічого. Перший параметр 'якщо істинний' теж можна не писати, але вертикальна риска після 'вираз'у має бути присутня.
Код | Відображення | Пояснення |
---|---|---|
{{#ifexpr: |Так|Ні}}
|
Ні | Порожній вираз позначає хибу. |
{{#ifexpr: 8>9 |Так|Ні}}
|
Ні | Порівняння хибне, відобразиться Ні. |
{{#ifexpr: = |Так|Ні}}
|
Expression error: Unexpected = operator. | Вираз = неприйнятний для обчислення, відобразиться помилка. |
{{#ifexpr: 8+4^5 |Так|Ні}}
|
Так | Вираз обчислюваний і дає не 0, відобразиться Так. |
{{#ifexpr: 8=9 |Так}}
|
Вираз 8=9 хибний, за відсутності другого параметру не відобразиться нічого. | |
{{#ifexpr: (3+3) = (2+4) ||Ні}}
|
Вираз 3+3 = 2+4 істинний, відобразитися перший параметр, який порожній – тобто нічого. | |
{{#ifexpr: 9>=8}}
|
Вираз 9>=8 хибний, за відсутності параметрів не відобразиться нічого. |
#ifexist
Ця витратна для обчислення функція розглядає параметр як назву сторінки вікі і повертає одне з двох значень в залежності від того, чи така сторінка існує. Повний синтаксис такий:
{{#ifexist:назва сторінки|існує|не існує}}
Є обмеження на виклик цієї функції у 100 викликів.
Код | Відображення | Пояснення |
---|---|---|
{{#ifexist:Ukr:Довідка:ParserFunctions|є|немає}}
|
є | Така сторінка існує. |
{{#ifexist:Довідка:ParserFunctions|є|немає}}
|
немає | Простір назв суттєвий. |
#rel2abs
Ця функція перетворює відносний шлях до файлу на абсолютний. Назва походить від англ. "relative to absolute". Перший параметр – це шлях, а другий – базовий шлях (необов'язковий; якщо не вказаний, буде використано повна назва поточної сторінки. Параметр шляху розпізнає такі особливі символи:
.
– поточний рівень..
– на один рівень вище від поточного/x
– на 1 рівень глибше від поточного в директорії x
Код | Відображення | Пояснення |
---|---|---|
{{#rel2abs:/abc|Scratch Wiki:Example}}
|
Scratch Wiki:Example/abc | Шлях дописується до базового шляху. |
{{#rel2abs:../../ms|Scratch Wiki:Example/Example2/Example3}}
|
Scratch Wiki:Example/ms | Двома рівнями вище від базового шляху буде Scratch Wiki:Example, дали углиб директорії ms. |
{{#rel2abs:../ms|Scratch Wiki:Example}}
|
ms | Одним рівнем вище від порожнього базового шляху, далі додається ms, якому не передує /, оскільки це додається до порожньго шляху. |
{{#rel2abs:../.|Scratch Wiki:Example/Example2}}
|
Scratch Wiki:Example | Одним рівнем вище, потім отримати поточний рівень (еквівалентно {{#rel2abs:..|Scratch Wiki:Example/Example2}} )
|
{{#rel2abs:../../..|Scratch Wiki:Example/Example2}}
|
Error: Invalid depth in path: "Scratch Wiki:Example/Example2/../../.." (tried to access a node above the root node). | Трьома рівнями вище немає нічого. |
#switch
Ця функція виконує порівняння з кількома константами і виводить своє для кожного випадку текстове значення. Приміром, розглянемо приклад трьох різних варіантів у програмі Скретч:
надати [порівнюване v] значення [привіт] надати [результат v] значення [] якщо <(порівнюване) = [привіт]> то //випадок1 надати [результат v] значення [вітаю!] інакше якщо <(порівнюване) = [бувай]> то //випадок2 надати [результат v] значення [до зустрічі!] інакше надати [результат v] значення [чудово!] //всі інші випадки end end
В даному прикладі відповіддю буде "вітаю!".
Код | Відображення | Пояснення |
---|---|---|
{{#switch:pop|lol=HI|pop=BOOM|aww :(}}
|
BOOM | Значення аргументу pop відповідає другому випадку, |pop=BOOM|, отже, відобразиться BOOM. |
{{#switch:dfd|lol=HI|pop=BOOM|aww :(}}
|
aww :( | Значення аргументу dfd не відповідає жодному специфічному, тому спрацьовує універсальний, останній, відображується aww :(. |
{{#switch:А|а=маленька а|немаленька а}}
|
немаленька а | Функція розрізнює великі й малі літери. |
{{#switch:аб|вг = так}}
|
Якщо значення параметру не відповідає жодному зі специфічних, а універсальний випадок не передбачено, не відобразиться нічого. |
#time
Ця функція відображує зазначену дату в указаному форматі.
{{#time:format|дата (за замовчуванням {{CURRENTTIMESTAMP}}) |код мови}}
В таблиці нижче наведено кілька найпоширеніших кодів формату. Уважно, там розрізняються великі й малі літери.
Note: | Час, який відображується, відповідає часовому поясу UTC. Аби відобразити щось для іншого часового поясу, вкажіть відповідну дату в параметрі. |
Код | Опис | Відображення |
---|---|---|
Y | Рік, повний | 2024 |
y | Рік, 2-цифровий | 24 |
L | Ознака високосного року (1=так, 0=ні) | 1 |
n | Місяць, число не вирівняне | 10 |
m | Місяць, число вирівняне | 10 |
M | Місяць, скорочено | жов |
F | Повна назва місяця | жовтень |
W | Тиждень, число вирівняне | 40 |
j | День тижня, число не вирівняне | 2 |
d | День тижня, число вирівняне | 02 |
z | День року, число | 275 |
D | День тижня, скорочено | Ср |
l | Повна назва дня тижня | середа |
N | День тижня, число (неділя = 7) | 3 |
w | День тижня, число (неділя = 0) | 3 |
a | Час, AM чи PM | am |
g | Час, 12-годинний, не вирівняне | 5 |
h | Час, 12-годинний, вирівняне | 05 |
G | Час, 24-годинний, не вирівняне | 5 |
H | Час, 24-годинний, вирівняне | 05 |
i | Хвилини, вирівняне | 24 |
s | Секунди, вирівняне | 15 |
t | День місяця, число | 31 |
Всередину коду можна також вміщувати текстові фрагменти.
Код | Відображення | Пояснення |
---|---|---|
{{#time:d-m-Y, G:i|now+2 hours}}
|
02-10-2024, 7:24 | Рядок формату: день вирівняно "-" місяць вирівняно "-" 4-цифровий рік "," 24-годинний час ":" хвилини. Відображується дата на 2 години пізніше поточного часу. |
{{#time:d-"m"-Y}}
|
02-m-2024 | Аби показати як є літери, що належать до елементів формату, візьми їх у лапки. |
{{#time:M||uk}}
|
жов | Код української мови "uk" дає нашу локалізацію назви місяця. |
#timel
Це фактично те саме, що й #time, але використовує як поточний той час, що його визначено в налаштуванні рушія $wgLocaltimezone
.
{{#timel:format|дата (за замовчуванням {{CURRENTTIMESTAMP}}) |код мови}}
#titleparts
Ця функція розбиває назву сторінки на частини по косих рисках, на підсторінки. Вона здатна приймати три агрументи: назва сторінки, (можливо) кількість сегментів, (можливо) номер першого сегменту. При невказаній кількості сегментів (значення 0) повертаються усі. Номер першого сегменту за замовчуванням дорівнює 1.
Код | Відображення | Пояснення |
---|---|---|
{{#titleparts:Talk:Hello/Bye/Yo/Me/See|1|2}}
|
Bye | Повертає один сегмент за номером 2 ("Bye"). |
{{#titleparts:Talk:Hello/Bye/Yo/Me/See||3}}
|
Yo/Me/See | Повертає всі сегменти, починаючи з номера 3, тобто все, що слідує за "Yo". |
{{#titleparts:Talk:Hello/Bye/Yo/Me/See||-2}}
|
Me/See | Повертає 2 сегменти з кінця. |
{{#titleparts:Talk:Hello/Bye/Yo/Me/See|-2}}
|
Talk:Hello/Bye/Yo | Відкидає 2 сегменти з кінця й повертає залишок. |
{{#titleparts:Talk:Hello/Bye/Yo/Me/See|-2|-3}}
|
Yo | Відкидає 2 сегменти з кінця, потім повертає 3 сегменти, починаючи з (нового) кінця. |
Текстові функції
Ці функції змінюють текстові дані чи надають інформацію про них. Правильно працюють, зокрема, з кодуванням UTF-8.
#len
Повертає довжину тексту в символах.
{{#len:текст}}
Код | Відображення | Пояснення |
---|---|---|
{{#len:Українська}}
|
10 | Кількість літер. |
{{#len: Україн ська }}
|
11 | Пропуски на початку і в кінці не рахуються, на відміну від тих, що всередині. |
{{#len: }}
|
6 | Перетворення символів до підрахунку не відбувається. |
{{#len:"лапки"}}
|
7 | Лапки, що оточують текст, теж рахуються. |
{{#len:<nowiki>Ось </nowiki>так.}}
|
4 | Тег <nowiki> приховує свій вміст від парсера, не додаючи до довжини.
|
#pos
Повертає позицію фрагменту в тексті. Позиції пронумеровано починаючи з 0.
{{#pos:скирта|голка|початок}}
В тексті "скирта", починаючи з позиції "початок", шукається "голка" і повертається позиція першої знайденої.
Код | Відображення | Пояснення |
---|---|---|
{{#pos:мене не буде|не}}
|
2 | Перше входження. |
{{#pos:мене не буде|не|3}}
|
5 | Зсув повз перше входження дасть друге. |
{{#pos:а я буду}}
|
1 | Якщо не вказано фрагмент для пошуку, повертає позицію першого пропуску. |
{{#pos:а я буду|не}}
|
За відсутності фрагменту в тексті не повертає нічого. | |
{{#pos:Я теж!|я}}
|
Розрізняє великі й малі літери. |
#rpos
Те саме, що й #pos, але повертає позицію останнього входження й не використовує зсув ("початок").
{{#rpos:скирта|голка}}
#sub
Повертає фрагмент тексту за вказаним інтервалом позицій.
{{#sub:текст|початок|довжина}}
Код | Відображення | Пояснення |
---|---|---|
{{#sub:Україна|1}}
|
країна | Повертає все до кінця тексту, якщо довжина не вказана. |
{{#sub:Україна|-2}}
|
на | Якщо початкова позиція негативна, повертає таку кількість символів з кінця. |
{{#sub:Україна|1|-2}}
|
краї | Якщо довжина негативна, викидає таку кількість символів з кінця. |
{{#sub:Україна|1|-7}}
|
Викидаючи більше символів, ніж залишилося в результаті, не повертає нічого. |
#replace
Замінює один текстовий фрагмент іншим, якщо треба, кілька разів.
{{#replace:текст|шило|мило}}
Код | Відображення | Пояснення |
---|---|---|
{{#replace:І сніг і дощ|І|А}}
|
А сніг і дощ | Розрізняє великі й малі літери. |
{{#replace:Мій_текст|_| }}
|
Мійтекст | Якщо вказати фрагмент для заміни як пропуск, для заміни не буде використано нічого. |
{{#replace:Мій_текст|_|<nowiki/> <nowiki/>}}
|
Мій текст | Якщо слід замінити щось пропуском, оточи його тегом <nowiki/> .
|
#explode
Розбиває текст на фрагменти і повертає один із фргаментів.
{{#explode:текст|розділювач|позиція}}
Вихідний "текст" розбивається на фрагменти, розділені "розділювач"ем; "позиція" обирає номер фрагменту (починаючи з 0).
Код | Відображення | Пояснення |
---|---|---|
{{#explode:і Дніпро, і кручі}}
|
і | За замовчуванням, розділювач – це пропуск, повертається найперша (номер 0) частина. |
{{#explode:і Дніпро, і кручі||-1}}
|
кручі | Відлік негативних позицій іде з кінця списку. |
{{#explode:і Дніпро, і кручі|,|1}}
|
і кручі | Розбивання за іншим символом (можливо, за послідовністю символів). |
{{#explode:і Дніпро, і кручі|,|2}}
|
Якщо фрагменту з таким номером немає, не повертає нічого. |
#urldecode
Перетворює закодовані символи з URL на текст, придатний для прочитання.
{{#urldecode:value}}
Приклад:
{{#urldecode:https://test.scratch-wiki.info/wiki/Ukr:%D0%94%D0%BE%D0%B2%D1%96%D0%B4%D0%BA%D0%B0:%D0%A0%D0%B5%D0%B4%D0%B0%D0%B3%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BE%D0%BA}}
відобразиться як: https://test.scratch-wiki.info/wiki/Ukr:Довідка:Редагування_сторінок