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:, чия назва може відрізнятися залежно від мови вікі.

For some use cases it is possible to emulate the ifexist effect with css, by using the selectors  (to select links to unexisting pages) or   (to select links to existing pages). Furthermore, since the number of expensive parser functions that can be used on a single page is controlled by, one can also increase the limit in LocalSettings.php if needed.

#rel2abs
This function converts a relative file path into an absolute filepath.



Within the  input, the following syntax is valid:
 * → the current level
 * → "go up one level"
 * → "go down one level into the subdirectory /foo"

If the  is not specified, the full page name of the page will be used instead:



Invalid syntax, such as  or , is ignored. Since no more than two consecutive full stops are permitted, sequences such as these can be used to separate successive statements:



#switch
This function compares one input value against several test cases, returning an associated string if a match is found.

Examples:




 * 1) switch with partial transclusion tags can effect a configuration file that enables an editor unfamiliar with template coding to view and edit configurable elements.

Default
The  is returned if no   string matches the  :



In this syntax, the default result must be the last parameter and must not contain a raw equals sign.



Alternatively, the default result may be explicitly declared with a  string of " ".

Default results declared in this way may be placed anywhere within the function:



If the  parameter is omitted and no match is made, no   is returned:



Grouping results
It is possible to have 'fall through' values, where several  strings return the same   string. This minimizes duplication.

Here cases 2, 3 and 4 all return ; cases 6 and 7 both return

Comparison behavior
As with, the comparison is made numerically if both the comparison string and the case string being tested are numeric; or as a case-sensitive string otherwise:





A  string may be empty:

Once a match is found, subsequent  are ignored:

Raw equal signs
"Case" strings cannot contain raw equals signs. To work around this, create a template = containing a single equals sign:, or replace equals sign with html code.

Example:





For a simple real life example of the use of this function, check Template:NBA color. Two complex examples can be found at and Template:BOTREQ.

Replacing #ifeq
can be used to reduce expansion depth.

For example: is equivalent to 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
This parser function takes a date and/or time (in the Gregorian calendar) and formats it according to the syntax given. A date/time object can be specified; the default is the value of the magic word  – that is, the time the page was last rendered into HTML.



The list of accepted formatting codes is given in the table to the right. Any character in the formatting string that is not recognized is passed through unaltered; this applies also to blank spaces (the system does not need them for interpreting the codes). There are also two ways to escape characters within the formatting string: In addition, the digraph  is interpreted as a single literal "x".
 * 1) A backslash followed by a formatting character is interpreted as a single literal character
 * 2) Characters enclosed in double quotes are considered literal characters, and the quotes are removed.



The  can be in any format accepted by PHP's strtotime function. Both absolute (eg ) and relative (eg  ) times are accepted.


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

The language code in ISO 639-3 (?) allows the string to be displayed in the chosen language

If you've calculated a Unix timestamp, you may use it in date calculations by pre-pending an  symbol.



Full or partial absolute dates can be specified; the function will "fill in" parts of the date that are not specified using the current values:



A four-digit number is always interpreted as a year, never as hours and minutes:

A six-digit number is interpreted as hours, minutes and seconds if possible, but otherwise as an error (not, for instance, a year and month):
 * →  Input is treated as a time rather than a year+month code.
 * →  Although 19:60:09 is not a valid time, 196009 is not interpreted as September 1960.

The function performs a certain amount of date mathematics:



The total length of the format strings of the calls of  is limited to 6000 characters.

Time Zone issue
There is a bug in this #time parser function (more specifically in PHP DateTime) that does not allow the passing-in of non-integers as relative time zone offsets. This issue does not apply when using an on-the-hour time zone, such as EDT. For example:

However, Venezuela is on a -4.5 hours time offset from UTC, and thus using its time zone will not normally allow the correct calculation of a relative time zone offset. Here's what happens: To workaround this issue, simply convert the time into minutes or seconds, like this:

(Tim Starling, the developer of this function, provided the exact syntax for this solution.)

#timel
This function is identical to, except that it uses the local time of the wiki (as set in ) when no date is given.





#titleparts
This function separates a page title into segments based on slashes, then returns some of those segments as output.



If the number of segments to return parameter is not specified, it defaults to "0", which returns all the segments from the first segment to return (included). If the first segment to return parameter is not specified or is "0", it defaults to "1":


 * →  See also.
 * →  See also.

Negative values are accepted for both values. Negative values for the number of segments to return parameter effectively 'strips' segments from the end of the string. Negative values for the first segment to return translates to "start with this segment counting from the right":


 * →  Strips one segment from the end of the string. See also.
 * →   Strips all 4 segments from the end of the string
 * →   Strips 5 segments from the end of the string (more than exist)
 * →   Returns last segment. See also.
 * →   Strips one segment from the end of the string, then returns the second segment and beyond
 * →   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