Help:Extension:ParserFunctions/ru

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

#expr
Эта функция вычисляет математическое выражение и возвращает вычисленное значение. Эта функция также доступна в через функцию.



Доступные операторы перечислены справа в порядке очередности. Дополнительные сведения о функции каждого оператора см. в Справка:Вычисления. Точность и формат возвращаемого результата будут варьироваться в зависимости от операционной системы сервера, на котором выполняется вики, и числового формата языка сайта.

При вычислении с помощью булева алгебры ноль вычисляется как, а любое не нулевое значение, положительное или отрицательное, вычисляется как  :



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



Порядок сложения и вычитания операндов до или после числа имеет смысл и может рассматриваться как положительное или отрицательное значение, а не как операнд с ошибочным вводом:



Обратите внимание, что при использовании вывода Волшебных слов, вы должны raw-форматировать их, чтобы удалить запятые и перевести цифры. Например, результаты в, когда мы хотим 0, которые можно получить с помощью. Это особенно важно в некоторых языках, где цифры переводятся. Например, в бенгальском языке производит ৩০,০৬১.



Округление
Округление число слева до кратного 1/10, возведенного в степень, с показателем степени, равным усеченному значению числа, заданного справа.

Для округления увеличением или уменьшением используйте унарные  или   соответственно.

Строки
Выражения работают только с числовыми значениями, они не могут сравнивать строки или символы. Вместо этого можно использовать.



#if
Функция определяет, является тестовая строка пустой или нет. Строка, содержащая только пробелы, считается пустой.





Эта функция сначала проверяет, не пуст ли первый параметр. Если первый параметр не пуст, то функция выводит второй аргумент. Если первый параметр пуст или содержит только пробельные символы (пробелы, новые строки и т. д.) он отображает третий аргумент.



Тестовая строка всегда интерпретируется как чистый текст, поэтому математические выражения не вычисляются:



Последний параметр (ложь) может быть опущен:



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

Вы также можете использовать параметр в качестве тестовой строки в операторе #if. Вы должны убедиться, что вы добавляете  (символ pipe) после имени переменной. (Таким образом, если параметр не имеет значения, он вычисляется в пустую строку вместо строки " ".)



Дополнительные примеры этой функции парсера см. в разделе.

#ifeq
Эта функция парсера сравнивает две входные строки, определяет, идентичны ли они, и возвращает одну из двух строк на основе результата. Если требуется больше сравнений и выходных строк, рассмотрите возможность использования $switch. If more comparisons and output strings are required, consider using.



Если обе строки являются допустимыми числовыми значениями, то строки сравниваются численно:



В противном случае сравнение производится как текст; это сравнение чувствительно к регистру:


 * →  (сравните с аналогичным примером выше, без кавычек)
 * →  (сравните с аналогичным примером выше, с , возвращающим сначала допустимое число)
 * →  (сравните с аналогичным примером выше, без кавычек)
 * →  (сравните с аналогичным примером выше, с , возвращающим сначала допустимое число)

В качестве практического примера рассмотрим существующий , использующий синтаксический анализатор для выбора между двумя стандартными временами, коротким и длинным. Он принимает параметр в качестве первого входного сигнала для сравнения со строкой "short" – но его проще читать, если параметр идет первым. Код шаблона определяется как: It takes the parameter as the first input to compare against the string "short" – there is no convention for the order, but it is simpler to read if the parameter goes first. The template code is defined as:



и работает следующим образом:


 * → 20
 * → 40
 * → 40

#iferror
Эта функция принимает входную строку и возвращает один из двух результатов; функция возвращает значение, если входная строка содержит HTML-объект с  , генерируемый другими функциями синтаксического анализатора, такими как  ,   и  , шаблоны ошибки, такие как циклы и рекурсии, и другие "отказоустойчивые" ошибки парсера.



Одна или обе возвращаемые строки могут быть опущены. Если строка  опущена, то   возвращается, если она не ошибочна. Если строка  также опущена, то при ошибке возвращается пустая строка:


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

#ifexpr
Эта функция вычисляет математическое выражение и возвращает одну из двух строк в зависимости от логического значения результата:



Входные данные  вычисляются точно так же, как и для   выше, причем доступны те же операторы. Выходные данные затем вычисляются как логическое выражение.

Пустое входное выражение принимает значение :



Как упоминалось выше, нулевое значение равно, а любое не нулевое значение равно  , поэтому эта функция эквивалентна функциям   и  , использующихся одновременно:



за исключением пустого или неправильного входного выражения (сообщение об ошибке обрабатывается как пустая строка; оно не равно нулю, поэтому мы получаем ).

сравнение

Одно или оба возвращаемых значения могут быть опущены; если соответствующая ветвь оставлена пустой, выходные данные не выводятся.:



#ifexist
Эта функция принимает входную строку, интерпретирует ее как заголовок страницы и возвращает одно из двух значений в зависимости от того, существует ли страница в локальной Вики.



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



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



Если страница проверяет цель с помощью, то эта страница появится в списке  для целевой страницы. Поэтому, если код  был включен на этой странице, /Foo будет содержать.

В вики, использующих общий медиа-репозиторий,  можно использовать для проверки, был ли файл загружен в репозиторий, но не в саму Вики:



Если для файла была создана локальная страница описания, результатом будет "существуют" для всех вышеперечисленных.

не работает с интервики-ссылками.

#ifexist ограничения
считается "дорогой функцией парсера"; только ограниченное число может быть включено на каждой отдельной странице (включая функции внутри трансклюзованных шаблонов). При превышении этого предела любые дополнительные функции  автоматически возвращают Ложь, независимо от того, существует ли целевая страница или нет, и страница классифицируется в Category:. Название может варьировать в зависимости от языка содержимого Вики.

В некоторых случаях можно эмулировать эффект #ifexist с помощью css, используя селекторы  (для выбора ссылок на несуществующие страницы) или   (для выбора ссылок на существующие страницы). Кроме того, поскольку количество данных функций парсера, которые могут быть использованы на одной странице, контролируется, можно также увеличить лимит в LocalSettings.php, если нужно.

#ifexist и разыскиваемые страницы
Страница, которая не существует и проверена на использование #ifexist, будет в конечном итоге на Разыскиваемые страницы.

#rel2abs
Эта функция преобразует относительный путь к файлу в абсолютный путь к файлу.



Во входных данных  допустим следующий синтаксис:
 * $code1 → текущий уровень
 * $code2 → "подняться на один уровень вверх"
 * $code3 / foo $code4 → "опустится на один уровень вниз в подкаталог /foo"


 * → the current level
 * → go up one level
 * → go down one level into the subdirectory /foo

Если $code1 базовый путь $code2 не указан, вместо него будет использоваться полное имя страницы:



Недопустимый синтаксис, например  или , игнорируются. Поскольку допускается не более двух последовательных полных остановок, такие последовательности могут использоваться для разделения последовательных операторов:



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

Примеры:




 * 1) switch с тегами частичной трансклюзии может создавать конфигурационный файл, который позволяет редактору, незнакомому с шаблонным кодированием, просматривать и редактировать настраиваемые элементы.

По умолчанию
возвращается, если строка  не совпадает с  :



В этом синтаксисе результат по умолчанию должен быть последним параметром и не должен содержать обычный (необработанный) знак равенства (знак равенства без ). If it does, it will be treated as a case comparison, and no text will display if no cases match. Это потому, что значение по умолчанию не было определено (является пустым). If a case matches however, its associated string will be returned.



Кроме того, результат по умолчанию может быть явно объявлен с  строкой " ".

Результаты по умолчанию, объявленные таким образом, могут быть размещены в любом месте функции:



Если параметр  опущен и не выполняется сопоставление, то   не возвращается:



Группировка результатов
Возможен 'провал' значения, где  строки возвращают одинаковые   строки. Это сводит к минимуму дублирование.

Здесь случаи 2, 3 и 4 возвращают ; случаи 6 и 7 оба возвращают The " " in the last parameter may be omitted in the above case.

Use with parameters
The function may be used with parameters as the test string. In this case, it is not necessary to place the pipe after the parameter name, because it is very unlikely that you will choose to set a case to be the string " ". (This is the value the parameter will default to if the pipe is absent and the parameter doesn't exist or have a value. See .)



In the above case, if  equals , the function will return. If it equals, the function will return. If the parameter is empty or does not exist, the function will return.

As in the section above, cases can be combined to give a single result.



Here, if  equals ,   or  , the function will return. If it equals, the function will return. If the parameter is empty or does not exist, the function will return.

Additionally, the default result can be omitted if you do not wish to return anything if the test parameter value does not match any of the cases.



In this case, the function returns an empty string unless  exists and equals   or , in which case it returns   or  , respectively.

This has the same effect as declaring the default result as empty.



If for some reason you decide to set a case as " ", the function will return that case's result when the parameter doesn't exist or doesn't have a value. The parameter would have to exist and have a value other than the string " " to return the function's default result.


 * (when  doesn't exist or is empty):
 * →  Foo 
 * (when  has the value " "):
 * →  Bar 
 * (when  has the value " "):
 * →  Foo 

In this hypothetical case, you would need to add the pipe to the parameter.

Поведение сравнения
Как и в случае с, сравнение производится численно, если и строка сравнения, и проверяемая строка регистра являются числовыми; или как чувствительная к регистру строка в противном случае:





Строка  может быть пустой:



Как только совпадение найдено, последующие  игнорируются:



Необработанные знаки равенства
Строки "Случай" не могут содержать необработанные знаки равенства. Чтобы обойти это, создайте шаблон =, содержащий один знак равенства:, или замените знак равенства html-кодом.

Пример:





Замена #ifeq
не может быть использован, чтобы уменьшить глубину расширения.

Например:



эквивалентно



т.е. глубокая вложенность, линейная:

С другой стороны, замена переключателя может быть сложной/непрактичной для #if, вложенных в обе ветви (показано с альтернативами отступа, отступами с обеих сторон), что делает полное симметричное дерево:

#time
Эта функция парсера берет дату и/или время (по Григорианскому календарю) и форматирует ее в соответствии с заданным синтаксисом. 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  in ISO 639-3 (?) allows the string to be displayed in the chosen language



The  parameter specifies if the date/time object refers to the local timezone or to UTC.

This is a boolean parameters: its value is determined by casting the value of the argument (see the official PHP documentation for details on how string are cast to boolean values).

See the following examples for details:





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.

Вопрос часового пояса
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:


 * &rarr;

However, India is on a +5.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:


 * &rarr;

To workaround this issue, simply convert the time into minutes or seconds, like this:


 * &rarr;
 * &rarr;

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

#timel
Эта функция полностью идентична функции  в том случае, если параметр   настроен как. При этом всегда используется местное время, установленное в вашей вики при настройке.

Синтаксис функции следующий:





For instance, see the following examples:





#titleparts
Эта функция разделяет заголовок страницы на сегменты, разделённые слэшем ("/"), и затем на выходе возвращает некоторые из этих сегментов.



Если параметр количество выводимых сегментов не определён, он принимается равным нулю ("0"), и выводятся все сегменты начиная с номера первого выводимого сегмента (включительно). Если номер первого выводимого сегмента не определён или равен "0", то он принимает значение по умолчанию "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. См. также.
 * →   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. См. также.
 * →   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 occurrence 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.

}}

StringFunctions
All of these functions are integrated from the StringFunctions extension, but are only available if an administrator sets   in.

All of these functions operate in O(n) time complexity, making them safe against DoS attacks.

#len:
The #len function returns the length of the given string. The syntax is:

The return value is always a number of characters in the source string (after expansions of template invocations, but before conversion to HTML). If no string is specified, the return value is zero.

#pos:
The #pos function returns the position of a given search term within the string. The syntax is:

The offset parameter, if specified, tells a starting position where this function should begin searching.

If the search term is found, the return value is a zero-based integer of the first position within the string.

If the search term is not found, the function returns an empty string.

#rpos:
The #rpos function returns the last position of a given search term within the string. The syntax is:

If the search term is found, the return value is a zero-based integer of its last position within the string.

If the search term is not found, the function returns -1.

#sub:
The #sub function returns a substring from the given string. The syntax is:

The start parameter, if positive (or zero), specifies a zero-based index of the first character to be returned.

Example: returns.

returns.

If the start parameter is negative, it specifies how many characters from the end should be returned.

Example: returns.

The length parameter, if present and positive, specifies the maximum length of the returned string.

Example: returns.

If the length parameter is negative, it specifies how many characters will be omitted from the end of the string.

Example: returns.

If the start parameter is negative, it specifies how many characters from the end should be returned. The length parameter, if present and positive, specifies the maximum length of the returned string from the starting point.

Example: returns.

#replace:
The #replace function returns the given string with all occurrences of a search term replaced with a replacement term.

If the search term is unspecified or empty, a single space will be searched for.

If the replacement term is unspecified or empty, all occurrences of the search term will be removed from the string.

Currently the syntax doesn't provide a switch to toggle case-sensitivity setting. But you may make use of magic words of formatting (e.g. your_string_here ) as a workaround. For example, if you want to remove the word "Category:" from the string regardless of its case, you may type:
 * Case-insensitive replace

But the disadvantage is that the output will become all lower-case. If you want to keep the casing after replacement, you have to use multiple nesting levels (i.e. multiple replace calls) to achieve the same thing.

#explode:
The #explode function splits the given string into pieces and then returns one of the pieces. The syntax is:

The delimiter parameter specifies a string to be used to divide the string into pieces. This delimiter string is then not part of any piece, and when two delimiter strings are next to each other, they create an empty piece between them. If this parameter is not specified, a single space is used. The limit parameter is available in ParserFunctions only, not the standalone StringFunctions version, and allows you to limit the number of parts returned, with all remaining text included in the final part.

The position parameter specifies which piece is to be returned. Pieces are counted from 0. If this parameter is not specified, the first piece is used (piece with number 0). When a negative value is used as position, the pieces are counted from the end. In this case, piece number -1 means the last piece. Examples:


 * returns.
 * returns.
 * returns.
 * returns.

The return value is the position-th piece. If there are fewer pieces than the position specifies, an empty string is returned.

Limits
This module defines three global settings:


 * 
 * 
 * 

These are used to limit some parameters of some functions to ensure the functions operate in O(n) time complexity, and are therefore safe against DoS attacks.

$wgStringFunctionsLimitSearch
This setting is used by #pos, #rpos, #replace, and #explode. All these functions search for a substring in a larger string while they operate, which can run in O(n*m) and therefore make the software more vulnerable to DoS attacks. By setting this value to a specific small number, the time complexity is decreased to O(n).

This setting limits the maximum allowed length of the string being searched for.

The default value is 30 multibyte characters.

$wgStringFunctionsLimitReplace
This setting is used by #replace. This function replaces all occurrences of one string for another, which can be used to quickly generate very large amounts of data, and therefore makes the software more vulnerable to DoS attacks. This setting limits the maximum allowed length of the replacing string.

The default value is 30 multibyte characters.

Подстановка
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.

Перенаправления
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 m:Template:If. 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

См. также

 * m:Help:Calculation
 * m:Help:Newlines and spaces
 * m:Help:Comparison between ParserFunctions syntax and TeX syntax
 * Module:String obsoleting
 * Module:String obsoleting
 * Module:String obsoleting