Help:Extension:ParserFunctions/uk

Розширення впроваджує одинадцять додаткових функцій парсера на додачу до "", які вже присутні у MediaWiki. (Можна налаштувати конфігурацію для впровадження інших функцій парсера для обробки текстових рядків; ці функції для рядків задокументовані в .) Всі парсерні функції впроваджені цим розширенням мають таку форму:

#expr
Ця функція обчислює математичний вираз і повертає обчислене значення. Ця функція також доступна в під назвою.



Всі доступні оператори перелічені в таблиці справа, в порядку пріорітету. Див. для детальнішої інформації про роботу кожного з операторів. Точність та формат поверненого результуючого значення відрізняються в залежності від операційної системи сервера, на якому встановлена вікі, та від формату чисел загальноприйнятого для мови сайту.

У виразах що використовують булеву алгебру, нуль приймає значення, а всі інші значення, як додатні, так і від'ємні, приймають значення  :



Отримавши на вході порожній вираз, функція повертає порожній рядок. Некоректні вирази призводять до повернення одного чи декількох повідомлень про помилку, які можна перехопити використовуючи функцію :



Порядок операторів додавання та віднімання перед чи після числа має значення і може бути сприйнятий як додатне чи від'ємне число, а не як вираз із помилкою:



Зверніть увагу, що при використання у виразі значення поверненого магічним словом, необхідно спочатку привести це значення до "сирого" формату щоб прибрати всі пробіли між цифрами і перевести цифри до арабських. Наприклад, повертає значення, при тому що потрібним значенням є 0, яке можна отримати за допомогою. Це особливо важливо для деяких мов, де числа записуються не арабськими цифрами. Наприклад, для бенгальської мови поверне ৩০,০৬১.



Округлення
Оператор округлення округляє число зліва від нього до 1/10 в степені числа справа (в якому дробова частина відкидається).

Для округлення до більшого чи меншого цілого значення використовуються унарні оператори  та   відповідно.

Текстові рядки
Математичні вирази можуть містити лише числа, вони не можуть порівнювати текстові рядки або символи. Для цього слід використовувати функцію.



#if
Ця функція визначає чи є тестовий рядок порожнім чи ні. Текстовий рядок, що містить тільки пробільні символи, вважається порожнім.





Спершу функція перевіряє чи не є перший параметр порожнім. Якщо він не порожній, функція виводить другий параметр. Якщо параметр порожній або містить тільки пробільні символи (пробіли, символи перенесення рядка тощо), функція виводить третій параметр.



Тестовий рядок завжди інтерпретується як текстовий, математичні вирази не вираховуються:



Останній аргумент може бути відсутнім:



Функція може бути вкладеною. Для цього внутрішня функція #if у повній формі розміщується на місці параметра охоплюючої функції #if. Допускається не більше семи рівнів вкладеності, хоча це може залежати від вікі або обмеження пам'яті.

Також, можна використовувати параметр в якості тестового рядку у функції #if. Необхідно переконатися, що ви додано символ  (вертикальна риска) після імені змінної.



Див. для інших прикладів використання цієї функції парсера.

#ifeq
Ця функція парсера порівнює два введені рядки, визначає чи є вони ідентичними та повертає один з двох текстових рядків залежно від результату. Якщо потрібно порівняти більше текстових рядків із можливістю повернення більшої кількості рядків, використовуйте функцію.



Якщо обидва текстові рядки є числовими значеннями, вони порівнюються як числа:



В іншому разі порівнюється текст; це порівняння чутливе до регістру:


 * →  (порівняти з подібним прикладом вище, без лапок)
 * →  (порівняти з подібним прикладом вище, з  )
 * →  (порівняти з подібним прикладом вище, без лапок)
 * →  (порівняти з подібним прикладом вище, з  )

В якості практичного прикладу, розглянемо існуючий   який використовує парсер для вибору між двома відрізками часу, коротким та довгим. Він бере параметр в якості першого аргумента і порівнює його із текстовим рядком "short" – порядок розміщення цих рядків не має значення, але легше читати якщо параметр йде першим. Код шаблона виглядає так:



і працює таким чином:


 * → 20
 * → 40
 * → 40

#iferror
Функція приймає на вході текстовий рядок і повертає значення  якщо цей рядок містить об'єкт HTML із , який був згенерований іншою функцією парсера, зокрема  ,   або  , або був згенерований шаблоном з помилкою, такою як нескінченний цикл або рекурсія, або виник внаслідок іншої помилки.



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


 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;

#ifexpr
Ця функція обчислює математичний вираз та повертає один з двох текстових рядків залежно від логічного значення результату:



Вираз  обчислюється так само як і у функції , з використанням тих самих операторів. Результат виразу, після цього, трактується як логічне значення.

Порожній вхідний вираз трактується як :



Як сказано вище, нуль приймає значення, а будь-яке ненульове значення приймає значення  , тому ця функція еквівалентна до використання   всередині  :



за винятком порожнього виразу чи виразу із помилкою (повідомлення про помилку вважається порожнім рядком; воно не рівне нулю, тому застосовується ).

в порівнянні з

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



#ifexist
Ця функція бере на вході текстовий рядок, інтерпритує його як назву сторінку, та повертає один з двох текстових рядків залежно від того чи існує сторінка на цій вікі.



Функція повертає  якщо сторінка існує, незалежно від того чи є на ній видимий вміст чи вона є порожньою (містить тільки метадані такі як посилання на категорії,  або, але не містить видимого вмісту, або ж і взагалі є повністю порожньою). Тільки сторінки які є "червоними посиланнями" повертають значення, включаючи сторінки що існували раніше але були видалені.



Функція повертає значення   що були адаптовані та для  які задані програмним забезпеченням.



Якщо на одній сторінці перевіряється існування другої за допомогою, то перша (та на якій перевіряється) з'явиться в списку  для другої (та яка перевіряється). Тому, якщо  було би включене до цієї сторінки, то  з'явилась би в списку /Foo.

На вікі, які використовують спільний репозиторій медіафайлів (зокрема Вікісховище), функція  може бути використана для перевірки того чи існує файл із такою назвою, і функція перевірить існування файлу на репозиторії, а не на самій вікі:

Якщо була створена сторінка опису файла на цій вікі, то для всіх трьох попередніх прикладів результатом буде exists.

Функція  не працює з міжмовними посиланнями (інтервікі).

Обмеження
Функція  вважається "ресурсомісткою функцією парсера", тому кількість викликів цієї функції з однієї сторінки є обмеженою (включаючи виклики зроблені в шаблонах, що включаються до сторінки). Коли це обмеження перевищене, всі подальші виклики функції  завжди повертатимуть "false", не залежно від того чи існує сторінка чи ні. Також, сторінки із таким перевищенням обмеження додаються до Category:, чия назва може відрізнятися залежно від мови вікі.

Для деяких випадків можливо імітувати функцію "ifexist" за допомогою CSS, використовуючи селектори  (щоб вибрати посилання на неіснуючі статті) або   (щоб вибрати посилання на існуючі статті). Крім того, оскільки максимальна кількість викликів ресурсомістких функцій на одній сторінці вказана в, то можна пвказати більшу кількість у файлі LocalSettings.php за потреби.

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



В аргументі  можливе використання такого синтаксису:
 * → поточний рівень
 * → вверх на один рівень
 * → вниз на один рівень до вкладеної папки /foo"

Якщо  не задано, замість нього буде використана повна назва поточної сторінки:



Неправильний синтаксис, такий як  або , ігнорується.



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

Приклади:



Функція # switch з тегами частково включення може використовуватись в конфігураційних файлах, що дає змогу користувачам незнайомим з шаблонами переглядати та змінювати конфігуровані елементи.

За замовчуванням
Результат  повертається якщо жоден   не збігається із  :



Результат за замовчуванням має бути останнім аргументом і не повинен містити знак рівності.



Або можна прямо вказати результат за замовчуванням вказавши " " в якості.

Результати за замовчуванням вказані таким способом можна розмістити будь-де всередині функції:



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



Групування результатів
Можна зробити "провалювання" (об'єднання) одних  в інші. Тоді декілька  повернуть той самий. Це мінімізує повторення коду.

Тут випадки 2, 3 та 4 повертають однаковий результат ; Обоє випадки 6 та 7 повернуть.

Нюанси порівняння
Так само як і в, якщо рядок для порівнянна та випадок є числами, вони порівнюються як числа. В іншому випадку вони вважаються текстовими рядками чутливими до реєстру:





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

Як тільки знайдено збіг, всі подальші  ігноруються:

Буквальне включення знаку рівності
Текстові рядки випадків не можуть містити знаків рівності. Щоб обійти це обмеження, створіть шаблон = що міститиме лише знак рівності -, або замість символу рівності вставте його HTML-код.

Приклад:





Реальний простий приклад використання функції "#switch" можна побачити в шаблоні Template:NBA color. Двома складнішими прикладами є та Template:BOTREQ.

Заміна #ifeq
Функція  може використовуватись для зниження рівня вкладеності.

Наприклад: є еквівалентними до i.e. deep nesting, linear:

On the other hand, the switch replacement could be complicated/impractical for IFs nested in both branches (shown with alternatives of indentation, indented on both sides), making full symmetrical tree:

#time
Ця функція парсера приймає дату та/або час (за Грегоріанським календарем) і форматує їх відповідно до заданого синтаксису. Можна задати об'єкт дати/часу; за замовчуванням береться значення магічного слова, яке містить час коли поточна сторінка в останнє трансформувалась в HTML.



Список допустимих кодів форматування наведено в таблиці справа. Будь-який символ в текстовому рядку для форматування, який не розпізнано, включається до результату без змін; це стосується також і пробілів (для інтерпритації коду системі вони не потрібні). Існує два способи уникнення трактування символу як коду форматування: До того ж, подвійний символ  трактується я один символ "x".
 * 1) Обернена коса риска після якої йде символ, трактується як просто цей символ;
 * 2) Символи всередині подвійних лапок так і залишаються символами, а лапки відкидаються.



можна задавати в будь-якому форматі який допускається у функції strtotime мови PHP. Час можна вказувати як абсолютно (наприклад ), так і відносно (наприклад , тобто "+20 годин").


 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 

Код мови у форматі ISO 639-3 дозволяє відобразити результат обраною мовою:

Час Unix можна використовувати для підрахунку дати, якщо поставити перед ним символ.



Дати можна вказувати не тільки повністю, але і частково; функція доповнить частини дати яких не вистачає, використовуючи значення для поточного моменту:



Чотиризначне число завжди трактується як рік, і ніколи як години та хвилини:

Шестизначне число трактується як години, хвилини та секунди, якщо це можливо, інакше як помилка (не як рік та місяць):
 * →  Введене значення трактується як час, а не рік і місяць.
 * →  Попри те що 19:60:09 не є коректним часом, 196009 не трактується як вересень 1960 року.

Функція може здійснювати деякі перетворення дати:



Довжина вхідних даних для функції  має обмеження в 6000 символів.

Проблема із часовими поясами
Існує недолік в роботі функції #time (а саме у класі "DateTime" мови PHP, який використовується цією функцією) який не дозволяє нецілі значення в якості зміщення в годинах для часових поясів. Це не стосується випадків для часових поясів із зміщенням у цілу кількість годин, таких як EDT. Наприклад:

Але, Венесуела відрізняється від UTC на -4.5 години, і тому час у її часовому поясі не буде підрахований правильно. Ось що станеться: Щоб уникнути цієї проблеми, просто вкажіть зміщення часу у хвилинах чи секундах, наприклад:

(Тім Старлінг, розробник цієї функції, запропонував синтаксис для вирішення цієї проблеми.)

#timel
Ця функція є ідентичною до, окрім того що вона використовує місцевий час для поточної вікі (який налаштований в ), якщо час не вказано.





#titleparts
Ця функція поділяє назву сторінки на сегменти, що розділені символами косої риски. Після цього деякі із цих сегментів повертаються в якості результату.



Якщо кількість сегментів, що треба повернути не вказано, то вона отримує значення за замовчуванням "0", яке повертає всі сегменти від сегмент з якого почати до кінця. Якщо не вказано сегмент з якого почати або для нього вказане значення "0", то аргумент отримує значення за замовчуванням "1":


 * →  See also.
 * →  See also.

Від'ємні значення допускаються в обох аргументах. Якщо від'ємне значення вказане для кількість сегментів, що треба повернути, то функція відрізує вказану кількість сегментів від кінця. При від'ємному значенні для сегмент з якого почати, сегменти рахуються з кінця:


 * →  Відрізує один сегмент від кінця текстового рядка. Див. також.
 * →   Відрізує всі 4 сегменти від кінця рядка
 * →   Відрізує 5 сегментів від кінця рядка (що більше ніж існує)
 * →   Повертає останній сегмент. Див. також.
 * →   Відрізує один сегмент від кінця рядка, після чого повертає другий і все після нього, що залишилось
 * →   Start copying at the second last element; strip one segment from the end of the string

Before processing, the pagename parameter is HTML-decoded: if it contains some standard HTML character entities, they will be converted to plain characters (internally encoded with UTF-8, i.e. the same encoding as in the MediaWiki source page using this parser function).


 * For example, any occurence of,  , or   in pagename will be replaced by.
 * No other conversion from HTML to plain text is performed, so HTML tags are left intact at this initial step even if they are invalid in page titles.

Then the decoded pagename is canonicalized into a standard page title supported by MediaWiki, as much as possible:


 * 1) All underscores are automatically replaced with spaces:
 * →  Not bah_boo, despite the underscore in the original.
 * 1) The string is split a maximum of 25 times; further slashes are ignored and the 25th element will contain the rest of the string. The string is also limited to 255 characters, as it is treated as a page title:
 * If for whatever reason you needed to push this function to its limit, although very unlikely, it is possible to bypass the 25 split limit by nesting function calls:
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).

{{Warning|1= Certain characters that are illegal in a page title will cause #titleparts to not parse the string:


 * → {{#titleparts: {one/two} | 1 | 1 }}. Does not produce the expected: {one
 * → {{#titleparts: page/123 | 1 | 2 }}. Does not work because brackets are illegal in page titles and this parser function does not process links embedded in its input pagename parameter, even when they use the MediaWiki syntax, or any other HTML or MediaWiki tags.
 * → "{{#titleparts: red/#00FF00/blue| 1 | 3 }}". Does not work because "#" is also illegal in page titles.

}}

Substitution
Parser functions can be substituted by prefixing the hash character with :


 * → the code   will be inserted in the wikitext since the page exists.

Substitution does not work within, you can use &hellip;  for this purpose.

Redirects
Especially   could be handy in  to pages including dates, but this does not work.

Escaping pipe characters in tables
Parser functions will mangle syntax and pipe characters, treating all the raw pipe characters as parameter dividers. To avoid this, most wikis used a template    :! with its contents only a raw pipe character, since MW 1.24 a  replaced this kludge. This 'hides' the pipe from the MediaWiki parser, ensuring that it is not considered until after all the templates and variables on a page have been expanded. It will then be interpreted as a table row or column separator. Alternatively, raw HTML table syntax can be used, although this is less intuitive and more error-prone.

You can also escape the pipe character for display as a plain, uninterpreted character using an HTML entity:.

Stripping whitespace
Whitespace, including newlines, tabs, and spaces, is stripped from the beginning and end of all the parameters of these parser functions. If this is not desirable, comparison of strings can be done after putting them in quotation marks.



To prevent the trimming of then and else parts, see. Some people achieve this by using &lt; &gt;  &lt; /nowiki &gt; instead of spaces.


 * → foofoo
 * → foofoo

However, this method can be used to render a single whitespace character only, since the parser squeezes multiple whitespace characters in a row into one.


 * →  foofoo 

In this example, the  style is used to force the whitespace to be preserved by the browser, but even with it the spaces are not shown. This happens because the spaces are stripped by the software, before being sent to the browser.

It is possible to workaround this behavior replacing whitespaces with  (breakable space) or   (non-breakable space), since they are not modified by the software:


 * →  foofoo 
 * → foofoo